1
0
mirror of https://github.com/privacyguides/privacyguides.org.git synced 2025-07-07 20:12:41 +00:00

Compare commits

..

21 Commits

Author SHA1 Message Date
cc54a3bc47 docs: Add team members to .mailmap (#2933)
Signed-off-by: Daniel Gray <dngray@privacyguides.org>
2025-03-12 20:26:17 -07:00
3c80495db0 update: Mullvad server country count (#2945)
Signed-off-by: fria <fria@privacyguides.org>
Signed-off-by: Jonah Aragon <jonah@privacyguides.org>
2025-03-12 20:16:02 -07:00
e4506a3583 style: Update Molly logo (#2946)
Signed-off-by: Jonah Aragon <jonah@privacyguides.org>
Signed-off-by: redoomed1 <redoomed1@privacyguides.org>
2025-03-12 20:13:51 -07:00
1c1e0b8bb8 style: Update OPNsense logo (#2942)
Signed-off-by: fria <fria@privacyguides.org>
Signed-off-by: redoomed1 <redoomed1@privacyguides.org>
2025-03-12 20:13:15 -07:00
1c8afe6a15 feat!: Add list of monthly/annual members to website (#2927)
Signed-off-by: blacklight447 <niek@privacyguides.org>
Signed-off-by: Daniel Gray <dngray@privacyguides.org>
Signed-off-by: Freddy <freddy@privacyguides.org>
2025-03-12 19:57:29 -07:00
c2cfb0fce6 style: Fix problems with #2887 and #2827 (#2941)
Signed-off-by: fria <fria@privacyguides.org>
Signed-off-by: blacklight447 <niek@privacyguides.org>
Co-authored-by: Daniel Gray <dngray@privacyguides.org>
2025-03-10 21:28:20 -05:00
Em
4d01c48293 update(blog)!: Privacy is Also Protecting the Data of Others (#2931)
Signed-off-by: Jonah Aragon <jonah@privacyguides.org>
2025-03-10 15:02:45 -05:00
9274ce188f fix: Correct latest blog post date 2025-03-08 10:21:29 -06:00
5fd34aaaa6 update!: Add Paaster as a Pastebin recommendation (#2219)
Signed-off-by: fria <138676274+friadev@users.noreply.github.com>
Signed-off-by: Daniel Gray <dngray@privacyguides.org>
2025-03-08 22:23:27 +10:30
32b8785ed8 update!: Add map/navigation recommendations (#2827)
Signed-off-by: fria <138676274+friadev@users.noreply.github.com>
Signed-off-by: Mare Polaris <15004290+ph00lt0@users.noreply.github.com>
Signed-off-by: Daniel Gray <dngray@privacyguides.org>
2025-03-08 21:36:47 +10:30
2cbf9c7062 update!: Add Health and Wellness Section (#2887)
Signed-off-by: fria <138676274+friadev@users.noreply.github.com>
Signed-off-by: Daniel Gray <dngray@privacyguides.org>
2025-03-08 21:30:15 +10:30
36c9fb3e7a update!(blog): Add Toward a Passwordless Future article (#2911)
Signed-off-by: Jonah Aragon <jonah@privacyguides.org>
Signed-off-by: Daniel Gray <dngray@privacyguides.org>
2025-03-08 21:11:20 +10:30
762f0b647d docs: Privacy notice clarifications and updates (#2925)
Signed-off-by: fria <138676274+friadev@users.noreply.github.com>
Signed-off-by: Daniel Gray <dngray@privacyguides.org>
2025-03-08 20:50:50 +10:30
f6e2f00429 update: Note iOS limitations wrt Onion Browser (#2934)
Signed-off-by: Tad <8296104+SkewedZeppelin@users.noreply.github.com>
Signed-off-by: Daniel Gray <dngray@privacyguides.org>
2025-03-08 20:42:22 +10:30
19f74dc230 update: Reword introduction to Language Tools page for consistency (#2935)
Signed-off-by: Jonah Aragon <jonah@privacyguides.org>
Signed-off-by: Daniel Gray <dngray@privacyguides.org>
2025-03-08 20:39:43 +10:30
134ccf8f21 docs: Add Donation Acceptance Policy (#2917)
Signed-off-by: Daniel Gray <dngray@privacyguides.org>
Signed-off-by: Freddy <freddy@privacyguides.org>
Signed-off-by: blacklight447 <niek@privacyguides.org>
2025-03-07 20:01:28 -06:00
5b9b7d9eab update: Add Flathub link for OnionShare (#2926)
Signed-off-by: fria <138676274+friadev@users.noreply.github.com>
Signed-off-by: Jonah Aragon <jonah@triplebit.net>
2025-03-06 16:35:15 -06:00
Em
b6e2559306 update(blog)!: How to Reset Your YubiKey and Create a Backup (#2928)
Signed-off-by: Jonah Aragon <jonah@privacyguides.org>
2025-03-06 15:51:56 -06:00
567c184389 build: Add mkdocs-minify-html-plugin and upgrade dependencies (#2924) 2025-03-05 15:57:06 -06:00
45d2dae89a update: Mullvad Leta is available without restriction (#2922)
Signed-off-by: fria <138676274+friadev@users.noreply.github.com>
Signed-off-by: redoomed1 <161974310+redoomed1@users.noreply.github.com>
2025-03-04 20:07:04 -06:00
e15cef973d docs!: Update privacy policy (#2914) 2025-03-04 20:03:56 -06:00
107 changed files with 2822 additions and 446 deletions

View File

@ -72,6 +72,8 @@ jobs:
continue-on-error: false
privileged: ${{ fromJSON(needs.metadata.outputs.privileged) }}
strict: true
secrets:
RO_DISCOURSE_API_KEY: ${{ secrets.RO_DISCOURSE_API_KEY }}
build_i18n:
if: ${{ contains(github.event.pull_request.labels.*.name, 'ci:build i18n') }}

View File

@ -30,6 +30,9 @@ on:
cache:
type: boolean
default: true
secrets:
RO_DISCOURSE_API_KEY:
required: false
permissions:
contents: read
@ -63,6 +66,7 @@ jobs:
- name: Set Metadata for International Builds
if: inputs.lang != 'en'
run: |
echo "GITREVISIONDATE=false" >> "$GITHUB_ENV"
echo "GITAUTHORS=false" >> "$GITHUB_ENV"
- name: Set Metadata for Offline Mode
@ -171,23 +175,31 @@ jobs:
sudo apt install pngquant
echo "EXTRA_FLAGS=""$EXTRA_FLAGS" --cmd=mkdocs"" >> "$GITHUB_ENV"
- name: Generate Donating Members List
continue-on-error: true
env:
DISCOURSE_API_KEY: ${{ secrets.RO_DISCOURSE_API_KEY }}
run: |
pip install requests
python generate-members.py > includes/members.md
- name: Build Website
run: |
eval ./run.sh --build --lang=${{ inputs.lang }} "$EXTRA_FLAGS"
- name: Run index-generation.sh for top posts
- name: Run generate-topics.sh for top posts
if: inputs.lang == 'en'
run: |
bash index-generation.sh \
bash generate-topics.sh \
--source='https://discuss.privacyguides.net/top.json?period=weekly' \
--tag="top posts" \
--destination="./site/en/index.html" \
--count=3
- name: Run index-generation.sh for latest posts
- name: Run generate-topics.sh for latest posts
if: inputs.lang == 'en'
run: |
bash index-generation.sh \
bash generate-topics.sh \
--source='https://discuss.privacyguides.net/latest.json' \
--tag="latest posts" \
--destination="./site/en/index.html" \
@ -258,6 +270,14 @@ jobs:
path: site-${{ inputs.config }}-${{ inputs.lang }}.tar.gz
retention-days: 1
- name: Upload members list
uses: actions/upload-artifact@v4
if: inputs.config == 'build' && inputs.lang == 'en'
with:
name: members.md
path: includes/members.md
retention-days: 1
offline_package:
if: inputs.config == 'offline' && inputs.lang == 'en'
needs: build

View File

@ -63,6 +63,8 @@ jobs:
context: production
continue-on-error: false
cache: false
secrets:
RO_DISCOURSE_API_KEY: ${{ secrets.RO_DISCOURSE_API_KEY }}
build_blog:
needs: submodule

View File

@ -55,17 +55,17 @@ jobs:
source: /en/index.html
target: ./site/en/
- name: Run index-generation.sh for top posts
- name: Run generate-topics.sh for top posts
run: |
bash index-generation.sh \
bash generate-topics.sh \
--source='https://discuss.privacyguides.net/top.json?period=weekly' \
--tag="top posts" \
--destination="./site/en/index.html" \
--count=3
- name: Run index-generation.sh for latest posts
- name: Run generate-topics.sh for latest posts
run: |
bash index-generation.sh \
bash generate-topics.sh \
--source='https://discuss.privacyguides.net/latest.json' \
--tag="latest posts" \
--destination="./site/en/index.html" \

3
.gitignore vendored
View File

@ -23,3 +23,6 @@ node_modules
.venv
.env
.mkdocs-insiders-*
# Automatically generated
includes/members.md

View File

@ -1,16 +1,22 @@
# Please use this file to correct information in our git log.
# Format: Proper Name <Proper Email> <Incorrect Email>
#
# Privacy Guides Team Members
# ===========================
Daniel Gray <dngray@privacyguides.org> <dng@disroot.org>
Daniel Gray <dngray@privacyguides.org> <48640805+dngray@users.noreply.github.com>
Daniel Gray <dngray@privacyguides.org> <dngray@privacytools.io>
Daniel Gray <dngray@privacyguides.org>
Em <em@privacyguides.org> <194856901+EmAtPrivacyGuides@users.noreply.github.com>
Freddy <freddy@privacyguides.org> <freddy@decypher.pw>
Freddy <freddy@privacyguides.org> <freddy@privacytools.io>
fria <fria@privacyguides.org> <138676274+friadev@users.noreply.github.com>
Jonah Aragon <jonah@privacyguides.org> <jonah@triplebit.net>
Jonah Aragon <jonah@privacyguides.org> <jonah@privacytools.io>
Jonah Aragon <jonah@privacyguides.org> <github@aragon.science>
mfwmyfacewhen <mfw@privacyguides.org> <94880365+mfwmyfacewhen@users.noreply.github.com>
mbananasynergy <mbananasynergy@privacyguides.org> <>
mbananasynergy <mbananasynergy@privacyguides.org> <107055883+matchboxbananasynergy@users.noreply.github.com>
rollsicecream <rollsicecream@proton.me> <153316540+rollsicecream@users.noreply.github.com>
rollsicecream <rollsicecream@proton.me> <waterfallnet@proton.me>
Freddy <freddy@privacyguides.org> <freddy@decypher.pw>
Freddy <freddy@privacyguides.org> <freddy@privacytools.io>
Jordan Warne <jordan@privacyguides.org> <jw@omg.lol>
Justin Ehrenhofer <justin.ehrenhofer@gmail.com> <12520755+SamsungGalaxyPlayer@users.noreply.github.com>
Mare Polaris <ph00lt0@privacyguides.org> <15004290+ph00lt0@users.noreply.github.com>
Niek de Wilde <niek@privacyguides.org> <github.ef27z@simplelogin.com>
Niek de Wilde <niek@privacyguides.org> <blacklight447@privacytools.io>
redoomed1 <redoomed1@privacyguides.org> <161974310+redoomed1@users.noreply.github.com>

View File

@ -504,3 +504,38 @@ bsky
Memoji
QuickType
Freeform
subprocessors
Schrems
Subprocessor
Subprocessors
Triplebit
Fediverse
Safing
YubiHSM
ykman
material-linux
yubico
material-microsoft-windows
HSMauth
PUK
TDES
ModHex
OATH-TOTPs
OATH-HOTP
OATH-HOTPs
MODHEX
HMAC-based
subkeys
subkey
keysize
Keygrip
tessera
Corbató
NordPass
Syncable
fontawesome-solid-glasses
CommonHealth
Euki
sympto-thermal
OsmAnd
Paaster

View File

@ -1 +0,0 @@
COMMA_PARENTHESIS_WHITESPACE

View File

@ -70,3 +70,11 @@
{"rule":"DOUBLE_PUNCTUATION","sentence":"^\\QOur contributors should always question the motives behind a source requesting anonymity..\\E$"}
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QIllustration: Em / Privacy Guides | Photo: Edward Eyer / Pexels\\E$"}
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QOn February 7th this year, Joseph Menn reported from the Washington Post that officials in the United Kingdom had contacted Apple to demand the company allows them to access data from any iCloud user worldwide.\\E$"}
{"rule":"DO_VBZ","sentence":"^\\QDoes Privacy Guides sell my personal information?\\E$"}
{"rule":"DO_VBZ","sentence":"^\\QDoes Privacy Guides use personal information for marketing purposes?\\E$"}
{"rule":"DO_VBZ","sentence":"^\\QWhere does Privacy Guides store data about me?\\E$"}
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QPrivacy Guides relies on the European Commission's standard contractual clauses for international transfers(SCCs) to legally transfer personal data out of the European Economic Area.\\E$"}
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QIllustration: Jordan / Privacy Guides | Photo: Gowtham AGM / Unsplash\\E$"}
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QThunder was used specifically because it was difficult for Germans to pronounce, since the English \"th\" sound doesn't exist in German.\\E$"}
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QAllan Scherr, a Ph.D. researcher at MIT, wanted more time for his detailed simulations.\\E$"}
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QYou can test out passkeys at webauthn.io.\\E$"}

View File

@ -85,6 +85,8 @@
"ARROWS": "hint",
"AUXILIARY_DO_WITH_INCORRECT_VERB_FORM": "hint",
"MISSING_COMMA_AFTER_YEAR": "hint",
"DO_VBZ": "hint",
"NOUN_AROUND_IT": "hint",
"default": "error"
},
"editor.unicodeHighlight.ambiguousCharacters": true,

501
Pipfile.lock generated
View File

@ -18,22 +18,34 @@
"default": {
"babel": {
"hashes": [
"sha256:368b5b98b37c06b7daf6696391c3240c938b37767d4584413e8438c5c435fa8b",
"sha256:d1f3554ca26605fe173f3de0c65f750f5a42f924499bf134de6423582298e316"
"sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d",
"sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2"
],
"markers": "python_version >= '3.8'",
"version": "==2.16.0"
"version": "==2.17.0"
},
"backrefs": {
"hashes": [
"sha256:2cab642a205ce966af3dd4b38ee36009b31fa9502a35fd61d59ccc116e40a6bd",
"sha256:2e1c15e4af0e12e45c8701bd5da0902d326b2e200cafcd25e49d9f06d44bb61b",
"sha256:a66851e4533fb5b371aa0628e1fee1af05135616b86140c9d787a2ffdf4b8fdc",
"sha256:bbef7169a33811080d67cdf1538c8289f76f0942ff971222a16034da88a73486",
"sha256:c67f6638a34a5b8730812f5101376f9d41dc38c43f1fdc35cb54700f6ed4465d",
"sha256:e3a63b073867dbefd0536425f43db618578528e3896fb77be7141328642a1585"
],
"markers": "python_version >= '3.9'",
"version": "==5.8"
},
"cachecontrol": {
"extras": [
"filecache"
],
"hashes": [
"sha256:7db1195b41c81f8274a7bbd97c956f44e8348265a1bc7641c37dfebc39f0c938",
"sha256:f5bf3f0620c38db2e5122c0726bdebb0d16869de966ea6a2befe92470b740ea0"
"sha256:7d47d19f866409b98ff6025b6a0fca8e4c791fb31abbd95f622093894ce903a2",
"sha256:ebad2091bf12d0d200dfc2464330db638c5deb41d546f6d7aca079e87290f3b0"
],
"markers": "python_version >= '3.7'",
"version": "==0.14.0"
"markers": "python_version >= '3.8'",
"version": "==0.14.2"
},
"cairocffi": {
"hashes": [
@ -52,11 +64,11 @@
},
"certifi": {
"hashes": [
"sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8",
"sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9"
"sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651",
"sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe"
],
"markers": "python_version >= '3.6'",
"version": "==2024.8.30"
"version": "==2025.1.31"
},
"cffi": {
"hashes": [
@ -133,122 +145,109 @@
},
"charset-normalizer": {
"hashes": [
"sha256:0099d79bdfcf5c1f0c2c72f91516702ebf8b0b8ddd8905f97a8aecf49712c621",
"sha256:0713f3adb9d03d49d365b70b84775d0a0d18e4ab08d12bc46baa6132ba78aaf6",
"sha256:07afec21bbbbf8a5cc3651aa96b980afe2526e7f048fdfb7f1014d84acc8b6d8",
"sha256:0b309d1747110feb25d7ed6b01afdec269c647d382c857ef4663bbe6ad95a912",
"sha256:0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c",
"sha256:0de7b687289d3c1b3e8660d0741874abe7888100efe14bd0f9fd7141bcbda92b",
"sha256:1110e22af8ca26b90bd6364fe4c763329b0ebf1ee213ba32b68c73de5752323d",
"sha256:130272c698667a982a5d0e626851ceff662565379baf0ff2cc58067b81d4f11d",
"sha256:136815f06a3ae311fae551c3df1f998a1ebd01ddd424aa5603a4336997629e95",
"sha256:14215b71a762336254351b00ec720a8e85cada43b987da5a042e4ce3e82bd68e",
"sha256:1db4e7fefefd0f548d73e2e2e041f9df5c59e178b4c72fbac4cc6f535cfb1565",
"sha256:1ffd9493de4c922f2a38c2bf62b831dcec90ac673ed1ca182fe11b4d8e9f2a64",
"sha256:2006769bd1640bdf4d5641c69a3d63b71b81445473cac5ded39740a226fa88ab",
"sha256:20587d20f557fe189b7947d8e7ec5afa110ccf72a3128d61a2a387c3313f46be",
"sha256:223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e",
"sha256:27623ba66c183eca01bf9ff833875b459cad267aeeb044477fedac35e19ba907",
"sha256:285e96d9d53422efc0d7a17c60e59f37fbf3dfa942073f666db4ac71e8d726d0",
"sha256:2de62e8801ddfff069cd5c504ce3bc9672b23266597d4e4f50eda28846c322f2",
"sha256:2f6c34da58ea9c1a9515621f4d9ac379871a8f21168ba1b5e09d74250de5ad62",
"sha256:309a7de0a0ff3040acaebb35ec45d18db4b28232f21998851cfa709eeff49d62",
"sha256:35c404d74c2926d0287fbd63ed5d27eb911eb9e4a3bb2c6d294f3cfd4a9e0c23",
"sha256:3710a9751938947e6327ea9f3ea6332a09bf0ba0c09cae9cb1f250bd1f1549bc",
"sha256:3d59d125ffbd6d552765510e3f31ed75ebac2c7470c7274195b9161a32350284",
"sha256:40d3ff7fc90b98c637bda91c89d51264a3dcf210cade3a2c6f838c7268d7a4ca",
"sha256:425c5f215d0eecee9a56cdb703203dda90423247421bf0d67125add85d0c4455",
"sha256:43193c5cda5d612f247172016c4bb71251c784d7a4d9314677186a838ad34858",
"sha256:44aeb140295a2f0659e113b31cfe92c9061622cadbc9e2a2f7b8ef6b1e29ef4b",
"sha256:47334db71978b23ebcf3c0f9f5ee98b8d65992b65c9c4f2d34c2eaf5bcaf0594",
"sha256:4796efc4faf6b53a18e3d46343535caed491776a22af773f366534056c4e1fbc",
"sha256:4a51b48f42d9358460b78725283f04bddaf44a9358197b889657deba38f329db",
"sha256:4b67fdab07fdd3c10bb21edab3cbfe8cf5696f453afce75d815d9d7223fbe88b",
"sha256:4ec9dd88a5b71abfc74e9df5ebe7921c35cbb3b641181a531ca65cdb5e8e4dea",
"sha256:4f9fc98dad6c2eaa32fc3af1417d95b5e3d08aff968df0cd320066def971f9a6",
"sha256:54b6a92d009cbe2fb11054ba694bc9e284dad30a26757b1e372a1fdddaf21920",
"sha256:55f56e2ebd4e3bc50442fbc0888c9d8c94e4e06a933804e2af3e89e2f9c1c749",
"sha256:5726cf76c982532c1863fb64d8c6dd0e4c90b6ece9feb06c9f202417a31f7dd7",
"sha256:5d447056e2ca60382d460a604b6302d8db69476fd2015c81e7c35417cfabe4cd",
"sha256:5ed2e36c3e9b4f21dd9422f6893dec0abf2cca553af509b10cd630f878d3eb99",
"sha256:5ff2ed8194587faf56555927b3aa10e6fb69d931e33953943bc4f837dfee2242",
"sha256:62f60aebecfc7f4b82e3f639a7d1433a20ec32824db2199a11ad4f5e146ef5ee",
"sha256:63bc5c4ae26e4bc6be6469943b8253c0fd4e4186c43ad46e713ea61a0ba49129",
"sha256:6b40e8d38afe634559e398cc32b1472f376a4099c75fe6299ae607e404c033b2",
"sha256:6b493a043635eb376e50eedf7818f2f322eabbaa974e948bd8bdd29eb7ef2a51",
"sha256:6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee",
"sha256:6fd30dc99682dc2c603c2b315bded2799019cea829f8bf57dc6b61efde6611c8",
"sha256:707b82d19e65c9bd28b81dde95249b07bf9f5b90ebe1ef17d9b57473f8a64b7b",
"sha256:7706f5850360ac01d80c89bcef1640683cc12ed87f42579dab6c5d3ed6888613",
"sha256:7782afc9b6b42200f7362858f9e73b1f8316afb276d316336c0ec3bd73312742",
"sha256:79983512b108e4a164b9c8d34de3992f76d48cadc9554c9e60b43f308988aabe",
"sha256:7f683ddc7eedd742e2889d2bfb96d69573fde1d92fcb811979cdb7165bb9c7d3",
"sha256:82357d85de703176b5587dbe6ade8ff67f9f69a41c0733cf2425378b49954de5",
"sha256:84450ba661fb96e9fd67629b93d2941c871ca86fc38d835d19d4225ff946a631",
"sha256:86f4e8cca779080f66ff4f191a685ced73d2f72d50216f7112185dc02b90b9b7",
"sha256:8cda06946eac330cbe6598f77bb54e690b4ca93f593dee1568ad22b04f347c15",
"sha256:8ce7fd6767a1cc5a92a639b391891bf1c268b03ec7e021c7d6d902285259685c",
"sha256:8ff4e7cdfdb1ab5698e675ca622e72d58a6fa2a8aa58195de0c0061288e6e3ea",
"sha256:9289fd5dddcf57bab41d044f1756550f9e7cf0c8e373b8cdf0ce8773dc4bd417",
"sha256:92a7e36b000bf022ef3dbb9c46bfe2d52c047d5e3f3343f43204263c5addc250",
"sha256:92db3c28b5b2a273346bebb24857fda45601aef6ae1c011c0a997106581e8a88",
"sha256:95c3c157765b031331dd4db3c775e58deaee050a3042fcad72cbc4189d7c8dca",
"sha256:980b4f289d1d90ca5efcf07958d3eb38ed9c0b7676bf2831a54d4f66f9c27dfa",
"sha256:9ae4ef0b3f6b41bad6366fb0ea4fc1d7ed051528e113a60fa2a65a9abb5b1d99",
"sha256:9c98230f5042f4945f957d006edccc2af1e03ed5e37ce7c373f00a5a4daa6149",
"sha256:9fa2566ca27d67c86569e8c85297aaf413ffab85a8960500f12ea34ff98e4c41",
"sha256:a14969b8691f7998e74663b77b4c36c0337cb1df552da83d5c9004a93afdb574",
"sha256:a8aacce6e2e1edcb6ac625fb0f8c3a9570ccc7bfba1f63419b3769ccf6a00ed0",
"sha256:a8e538f46104c815be19c975572d74afb53f29650ea2025bbfaef359d2de2f7f",
"sha256:aa41e526a5d4a9dfcfbab0716c7e8a1b215abd3f3df5a45cf18a12721d31cb5d",
"sha256:aa693779a8b50cd97570e5a0f343538a8dbd3e496fa5dcb87e29406ad0299654",
"sha256:ab22fbd9765e6954bc0bcff24c25ff71dcbfdb185fcdaca49e81bac68fe724d3",
"sha256:ab2e5bef076f5a235c3774b4f4028a680432cded7cad37bba0fd90d64b187d19",
"sha256:ab973df98fc99ab39080bfb0eb3a925181454d7c3ac8a1e695fddfae696d9e90",
"sha256:af73657b7a68211996527dbfeffbb0864e043d270580c5aef06dc4b659a4b578",
"sha256:b197e7094f232959f8f20541ead1d9862ac5ebea1d58e9849c1bf979255dfac9",
"sha256:b295729485b06c1a0683af02a9e42d2caa9db04a373dc38a6a58cdd1e8abddf1",
"sha256:b8831399554b92b72af5932cdbbd4ddc55c55f631bb13ff8fe4e6536a06c5c51",
"sha256:b8dcd239c743aa2f9c22ce674a145e0a25cb1566c495928440a181ca1ccf6719",
"sha256:bcb4f8ea87d03bc51ad04add8ceaf9b0f085ac045ab4d74e73bbc2dc033f0236",
"sha256:bd7af3717683bea4c87acd8c0d3d5b44d56120b26fd3f8a692bdd2d5260c620a",
"sha256:bf4475b82be41b07cc5e5ff94810e6a01f276e37c2d55571e3fe175e467a1a1c",
"sha256:c3e446d253bd88f6377260d07c895816ebf33ffffd56c1c792b13bff9c3e1ade",
"sha256:c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944",
"sha256:c94057af19bc953643a33581844649a7fdab902624d2eb739738a30e2b3e60fc",
"sha256:cab5d0b79d987c67f3b9e9c53f54a61360422a5a0bc075f43cab5621d530c3b6",
"sha256:ce031db0408e487fd2775d745ce30a7cd2923667cf3b69d48d219f1d8f5ddeb6",
"sha256:cee4373f4d3ad28f1ab6290684d8e2ebdb9e7a1b74fdc39e4c211995f77bec27",
"sha256:d5b054862739d276e09928de37c79ddeec42a6e1bfc55863be96a36ba22926f6",
"sha256:dbe03226baf438ac4fda9e2d0715022fd579cb641c4cf639fa40d53b2fe6f3e2",
"sha256:dc15e99b2d8a656f8e666854404f1ba54765871104e50c8e9813af8a7db07f12",
"sha256:dcaf7c1524c0542ee2fc82cc8ec337f7a9f7edee2532421ab200d2b920fc97cf",
"sha256:dd4eda173a9fcccb5f2e2bd2a9f423d180194b1bf17cf59e3269899235b2a114",
"sha256:dd9a8bd8900e65504a305bf8ae6fa9fbc66de94178c420791d0293702fce2df7",
"sha256:de7376c29d95d6719048c194a9cf1a1b0393fbe8488a22008610b0361d834ecf",
"sha256:e7fdd52961feb4c96507aa649550ec2a0d527c086d284749b2f582f2d40a2e0d",
"sha256:e91f541a85298cf35433bf66f3fab2a4a2cff05c127eeca4af174f6d497f0d4b",
"sha256:e9e3c4c9e1ed40ea53acf11e2a386383c3304212c965773704e4603d589343ed",
"sha256:ee803480535c44e7f5ad00788526da7d85525cfefaf8acf8ab9a310000be4b03",
"sha256:f09cb5a7bbe1ecae6e87901a2eb23e0256bb524a79ccc53eb0b7629fbe7677c4",
"sha256:f19c1585933c82098c2a520f8ec1227f20e339e33aca8fa6f956f6691b784e67",
"sha256:f1a2f519ae173b5b6a2c9d5fa3116ce16e48b3462c8b96dfdded11055e3d6365",
"sha256:f28f891ccd15c514a0981f3b9db9aa23d62fe1a99997512b0491d2ed323d229a",
"sha256:f3e73a4255342d4eb26ef6df01e3962e73aa29baa3124a8e824c5d3364a65748",
"sha256:f606a1881d2663630ea5b8ce2efe2111740df4b687bd78b34a8131baa007f79b",
"sha256:fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079",
"sha256:ffc519621dce0c767e96b9c53f09c5d215578e10b02c285809f76509a3931482"
"sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537",
"sha256:01732659ba9b5b873fc117534143e4feefecf3b2078b0a6a2e925271bb6f4cfa",
"sha256:01ad647cdd609225c5350561d084b42ddf732f4eeefe6e678765636791e78b9a",
"sha256:04432ad9479fa40ec0f387795ddad4437a2b50417c69fa275e212933519ff294",
"sha256:0907f11d019260cdc3f94fbdb23ff9125f6b5d1039b76003b5b0ac9d6a6c9d5b",
"sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd",
"sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601",
"sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd",
"sha256:0af291f4fe114be0280cdd29d533696a77b5b49cfde5467176ecab32353395c4",
"sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d",
"sha256:1a2bc9f351a75ef49d664206d51f8e5ede9da246602dc2d2726837620ea034b2",
"sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313",
"sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd",
"sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa",
"sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8",
"sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1",
"sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2",
"sha256:2a75d49014d118e4198bcee5ee0a6f25856b29b12dbf7cd012791f8a6cc5c496",
"sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d",
"sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b",
"sha256:2fb9bd477fdea8684f78791a6de97a953c51831ee2981f8e4f583ff3b9d9687e",
"sha256:311f30128d7d333eebd7896965bfcfbd0065f1716ec92bd5638d7748eb6f936a",
"sha256:329ce159e82018d646c7ac45b01a430369d526569ec08516081727a20e9e4af4",
"sha256:345b0426edd4e18138d6528aed636de7a9ed169b4aaf9d61a8c19e39d26838ca",
"sha256:363e2f92b0f0174b2f8238240a1a30142e3db7b957a5dd5689b0e75fb717cc78",
"sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408",
"sha256:3bed14e9c89dcb10e8f3a29f9ccac4955aebe93c71ae803af79265c9ca5644c5",
"sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3",
"sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f",
"sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a",
"sha256:49402233c892a461407c512a19435d1ce275543138294f7ef013f0b63d5d3765",
"sha256:4c0907b1928a36d5a998d72d64d8eaa7244989f7aaaf947500d3a800c83a3fd6",
"sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146",
"sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6",
"sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9",
"sha256:619a609aa74ae43d90ed2e89bdd784765de0a25ca761b93e196d938b8fd1dbbd",
"sha256:6e27f48bcd0957c6d4cb9d6fa6b61d192d0b13d5ef563e5f2ae35feafc0d179c",
"sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f",
"sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545",
"sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176",
"sha256:75832c08354f595c760a804588b9357d34ec00ba1c940c15e31e96d902093770",
"sha256:7709f51f5f7c853f0fb938bcd3bc59cdfdc5203635ffd18bf354f6967ea0f824",
"sha256:78baa6d91634dfb69ec52a463534bc0df05dbd546209b79a3880a34487f4b84f",
"sha256:7974a0b5ecd505609e3b19742b60cee7aa2aa2fb3151bc917e6e2646d7667dcf",
"sha256:7a4f97a081603d2050bfaffdefa5b02a9ec823f8348a572e39032caa8404a487",
"sha256:7b1bef6280950ee6c177b326508f86cad7ad4dff12454483b51d8b7d673a2c5d",
"sha256:7d053096f67cd1241601111b698f5cad775f97ab25d81567d3f59219b5f1adbd",
"sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b",
"sha256:807f52c1f798eef6cf26beb819eeb8819b1622ddfeef9d0977a8502d4db6d534",
"sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f",
"sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b",
"sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9",
"sha256:89149166622f4db9b4b6a449256291dc87a99ee53151c74cbd82a53c8c2f6ccd",
"sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125",
"sha256:8c60ca7339acd497a55b0ea5d506b2a2612afb2826560416f6894e8b5770d4a9",
"sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de",
"sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11",
"sha256:97f68b8d6831127e4787ad15e6757232e14e12060bec17091b85eb1486b91d8d",
"sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35",
"sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f",
"sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda",
"sha256:ab36c8eb7e454e34e60eb55ca5d241a5d18b2c6244f6827a30e451c42410b5f7",
"sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a",
"sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971",
"sha256:b7b2d86dd06bfc2ade3312a83a5c364c7ec2e3498f8734282c6c3d4b07b346b8",
"sha256:b97e690a2118911e39b4042088092771b4ae3fc3aa86518f84b8cf6888dbdb41",
"sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d",
"sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f",
"sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757",
"sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a",
"sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886",
"sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77",
"sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76",
"sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247",
"sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85",
"sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb",
"sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7",
"sha256:dccbe65bd2f7f7ec22c4ff99ed56faa1e9f785482b9bbd7c717e26fd723a1d1e",
"sha256:dd78cfcda14a1ef52584dbb008f7ac81c1328c0f58184bf9a84c49c605002da6",
"sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037",
"sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1",
"sha256:ea0d8d539afa5eb2728aa1932a988a9a7af94f18582ffae4bc10b3fbdad0626e",
"sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807",
"sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407",
"sha256:ecddf25bee22fe4fe3737a399d0d177d72bc22be6913acfab364b40bce1ba83c",
"sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12",
"sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3",
"sha256:f30bf9fd9be89ecb2360c7d94a711f00c09b976258846efe40db3d05828e8089",
"sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd",
"sha256:fc54db6c8593ef7d4b2a331b58653356cf04f67c960f584edb7c3d8c97e8f39e",
"sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00",
"sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616"
],
"markers": "python_full_version >= '3.7.0'",
"version": "==3.4.0"
"markers": "python_version >= '3.7'",
"version": "==3.4.1"
},
"click": {
"hashes": [
"sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28",
"sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"
"sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2",
"sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"
],
"markers": "python_version >= '3.7'",
"version": "==8.1.7"
"version": "==8.1.8"
},
"colorama": {
"hashes": [
@ -260,11 +259,11 @@
},
"cssselect2": {
"hashes": [
"sha256:1ccd984dab89fc68955043aca4e1b03e0cf29cad9880f6e28e3ba7a74b14aa5a",
"sha256:fd23a65bfd444595913f02fc71f6b286c29261e354c41d722ca7a261a49b5969"
"sha256:46fc70ebc41ced7a32cd42d58b1884d72ade23d21e5a4eaaf022401c13f0e76e",
"sha256:7674ffb954a3b46162392aee2a3a0aedb2e14ecf99fcc28644900f4e6e3e9d3a"
],
"markers": "python_version >= '3.7'",
"version": "==0.7.0"
"markers": "python_version >= '3.9'",
"version": "==0.8.0"
},
"defusedxml": {
"hashes": [
@ -276,10 +275,10 @@
},
"filelock": {
"hashes": [
"sha256:2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0",
"sha256:c249fbfcd5db47e5e2d6d62198e565475ee65e4831e2561c8e313fa7eb961435"
"sha256:533dc2f7ba78dc2f0f531fc6c4940addf7b70a481e269a5a3b93be94ffbe8338",
"sha256:ee4e77401ef576ebb38cd7f13b9b28893194acc20a8e68e18730ba9c0e54660e"
],
"version": "==3.16.1"
"version": "==3.17.0"
},
"ghp-import": {
"hashes": [
@ -290,19 +289,19 @@
},
"gitdb": {
"hashes": [
"sha256:81a3407ddd2ee8df444cbacea00e2d038e40150acfa3001696fe0dcf1d3adfa4",
"sha256:bf5421126136d6d0af55bc1e7c1af1c397a34f5b7bd79e776cd3e89785c2b04b"
"sha256:5ef71f855d191a3326fcfbc0d5da835f26b13fbcba60c32c21091c349ffdb571",
"sha256:67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf"
],
"markers": "python_version >= '3.7'",
"version": "==4.0.11"
"version": "==4.0.12"
},
"gitpython": {
"hashes": [
"sha256:35f314a9f878467f5453cc1fee295c3e18e52f1b99f10f6cf5b1682e968a9e7c",
"sha256:eec7ec56b92aad751f9912a73404bc02ba212a23adb2c7098ee668417051a1ff"
"sha256:9e0e10cda9bed1ee64bc9a6de50e7e38a9c9943241cd7f585f6df3ed28011110",
"sha256:c87e30b26253bf5418b01b0660f818967f3c503193838337fe5e573331249269"
],
"markers": "python_version >= '3.7'",
"version": "==3.1.43"
"version": "==3.1.44"
},
"hjson": {
"hashes": [
@ -328,11 +327,11 @@
},
"jinja2": {
"hashes": [
"sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369",
"sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"
"sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d",
"sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67"
],
"markers": "python_version >= '3.7'",
"version": "==3.1.4"
"version": "==3.1.6"
},
"markdown": {
"hashes": [
@ -435,21 +434,21 @@
},
"mkdocs-git-authors-plugin": {
"hashes": [
"sha256:60b291603479c765c3ca49fc4bda88a58989d9703c5e396fa1e81ae7de8a2836",
"sha256:b719fdab2199dc1633c4f69296ac66ec4adb6365ddd998409aefc87b1d2790ac"
"sha256:77f97c321e08a8757beb866293eb257070b11cd5a080976bc6696b249cbade4f",
"sha256:f6cefc4dc832865d26f7f9f944c0a8c7dc852742d79320f3800e0d97814e2a84"
],
"index": "pypi",
"markers": "python_version >= '3.8'",
"version": "==0.9.1"
"version": "==0.9.2"
},
"mkdocs-git-revision-date-localized-plugin": {
"hashes": [
"sha256:439e2f14582204050a664c258861c325064d97cdc848c541e48bb034a6c4d0cb",
"sha256:c99377ee119372d57a9e47cff4e68f04cce634a74831c06bc89b33e456e840a1"
"sha256:364d7c4c45c4f333c750e34bc298ac685a7a8bf9b7b52890d52b2f90f1812c4b",
"sha256:bb1eca7f156e0c8a587167662923d76efed7f7e0c06b84471aa5ae72a744a434"
],
"index": "pypi",
"markers": "python_version >= '3.8'",
"version": "==1.3.0"
"version": "==1.4.1"
},
"mkdocs-glightbox": {
"hashes": [
@ -485,12 +484,12 @@
},
"mkdocs-rss-plugin": {
"hashes": [
"sha256:be66b11300f1e951d3393ce8da60ca6d730108f731434cc256670b3b8e0cffb3",
"sha256:f0e275c933be69a77ee7af92256d88e2969e10c36c5ee1ecdb663a4ea4aa08ea"
"sha256:9371d30afb0eda7288c946a89b419aa7a0b8e212d2219584c2dbd23ece93a991",
"sha256:ff81f0ece33befd5a0152c196132e15eb93b4b9f7f53644c6d3db8e9a529e186"
],
"index": "pypi",
"markers": "python_version >= '3.9' and python_version < '4'",
"version": "==1.16.0"
"version": "==1.17.1"
},
"msgpack": {
"hashes": [
@ -564,11 +563,11 @@
},
"packaging": {
"hashes": [
"sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002",
"sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"
"sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759",
"sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"
],
"markers": "python_version >= '3.8'",
"version": "==24.1"
"version": "==24.2"
},
"paginate": {
"hashes": [
@ -688,19 +687,19 @@
},
"pygments": {
"hashes": [
"sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199",
"sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"
"sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f",
"sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c"
],
"markers": "python_version >= '3.8'",
"version": "==2.18.0"
"version": "==2.19.1"
},
"pymdown-extensions": {
"hashes": [
"sha256:41cdde0a77290e480cf53892f5c5e50921a7ee3e5cd60ba91bf19837b33badcf",
"sha256:bc8847ecc9e784a098efd35e20cba772bc5a1b529dfcef9dc1972db9021a1049"
"sha256:05e0bee73d64b9c71a4ae17c72abc2f700e8bc8403755a00580b49a4e9f189e9",
"sha256:41e576ce3f5d650be59e900e4ceff231e0aed2a88cf30acaee41e02f063a061b"
],
"markers": "python_version >= '3.8'",
"version": "==10.11.2"
"version": "==10.14.3"
},
"python-dateutil": {
"hashes": [
@ -712,11 +711,11 @@
},
"pytz": {
"hashes": [
"sha256:2aa355083c50a0f93fa581709deac0c9ad65cca8a9e9beac660adcbd493c798a",
"sha256:31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725"
"sha256:89dd22dca55b46eac6eda23b2d72721bf1bdfef212645d81513ef5d03038de57",
"sha256:c2db42be2a2518b28e65f9207c4d05e6ff547d1efa4086469ef855e4ab70178e"
],
"markers": "python_version < '3.9'",
"version": "==2024.2"
"version": "==2025.1"
},
"pyyaml": {
"hashes": [
@ -785,106 +784,6 @@
"markers": "python_version >= '3.6'",
"version": "==0.1"
},
"regex": {
"hashes": [
"sha256:01c2acb51f8a7d6494c8c5eafe3d8e06d76563d8a8a4643b37e9b2dd8a2ff623",
"sha256:02087ea0a03b4af1ed6ebab2c54d7118127fee8d71b26398e8e4b05b78963199",
"sha256:040562757795eeea356394a7fb13076ad4f99d3c62ab0f8bdfb21f99a1f85664",
"sha256:042c55879cfeb21a8adacc84ea347721d3d83a159da6acdf1116859e2427c43f",
"sha256:079400a8269544b955ffa9e31f186f01d96829110a3bf79dc338e9910f794fca",
"sha256:07f45f287469039ffc2c53caf6803cd506eb5f5f637f1d4acb37a738f71dd066",
"sha256:09d77559e80dcc9d24570da3745ab859a9cf91953062e4ab126ba9d5993688ca",
"sha256:0cbff728659ce4bbf4c30b2a1be040faafaa9eca6ecde40aaff86f7889f4ab39",
"sha256:0e12c481ad92d129c78f13a2a3662317e46ee7ef96c94fd332e1c29131875b7d",
"sha256:0ea51dcc0835eea2ea31d66456210a4e01a076d820e9039b04ae8d17ac11dee6",
"sha256:0ffbcf9221e04502fc35e54d1ce9567541979c3fdfb93d2c554f0ca583a19b35",
"sha256:1494fa8725c285a81d01dc8c06b55287a1ee5e0e382d8413adc0a9197aac6408",
"sha256:16e13a7929791ac1216afde26f712802e3df7bf0360b32e4914dca3ab8baeea5",
"sha256:18406efb2f5a0e57e3a5881cd9354c1512d3bb4f5c45d96d110a66114d84d23a",
"sha256:18e707ce6c92d7282dfce370cd205098384b8ee21544e7cb29b8aab955b66fa9",
"sha256:220e92a30b426daf23bb67a7962900ed4613589bab80382be09b48896d211e92",
"sha256:23b30c62d0f16827f2ae9f2bb87619bc4fba2044911e2e6c2eb1af0161cdb766",
"sha256:23f9985c8784e544d53fc2930fc1ac1a7319f5d5332d228437acc9f418f2f168",
"sha256:297f54910247508e6e5cae669f2bc308985c60540a4edd1c77203ef19bfa63ca",
"sha256:2b08fce89fbd45664d3df6ad93e554b6c16933ffa9d55cb7e01182baaf971508",
"sha256:2cce2449e5927a0bf084d346da6cd5eb016b2beca10d0013ab50e3c226ffc0df",
"sha256:313ea15e5ff2a8cbbad96ccef6be638393041b0a7863183c2d31e0c6116688cf",
"sha256:323c1f04be6b2968944d730e5c2091c8c89767903ecaa135203eec4565ed2b2b",
"sha256:35f4a6f96aa6cb3f2f7247027b07b15a374f0d5b912c0001418d1d55024d5cb4",
"sha256:3b37fa423beefa44919e009745ccbf353d8c981516e807995b2bd11c2c77d268",
"sha256:3ce4f1185db3fbde8ed8aa223fc9620f276c58de8b0d4f8cc86fd1360829edb6",
"sha256:46989629904bad940bbec2106528140a218b4a36bb3042d8406980be1941429c",
"sha256:4838e24ee015101d9f901988001038f7f0d90dc0c3b115541a1365fb439add62",
"sha256:49b0e06786ea663f933f3710a51e9385ce0cba0ea56b67107fd841a55d56a231",
"sha256:4db21ece84dfeefc5d8a3863f101995de646c6cb0536952c321a2650aa202c36",
"sha256:54c4a097b8bc5bb0dfc83ae498061d53ad7b5762e00f4adaa23bee22b012e6ba",
"sha256:54d9ff35d4515debf14bc27f1e3b38bfc453eff3220f5bce159642fa762fe5d4",
"sha256:55b96e7ce3a69a8449a66984c268062fbaa0d8ae437b285428e12797baefce7e",
"sha256:57fdd2e0b2694ce6fc2e5ccf189789c3e2962916fb38779d3e3521ff8fe7a822",
"sha256:587d4af3979376652010e400accc30404e6c16b7df574048ab1f581af82065e4",
"sha256:5b513b6997a0b2f10e4fd3a1313568e373926e8c252bd76c960f96fd039cd28d",
"sha256:5ddcd9a179c0a6fa8add279a4444015acddcd7f232a49071ae57fa6e278f1f71",
"sha256:6113c008a7780792efc80f9dfe10ba0cd043cbf8dc9a76ef757850f51b4edc50",
"sha256:635a1d96665f84b292e401c3d62775851aedc31d4f8784117b3c68c4fcd4118d",
"sha256:64ce2799bd75039b480cc0360907c4fb2f50022f030bf9e7a8705b636e408fad",
"sha256:69dee6a020693d12a3cf892aba4808fe168d2a4cef368eb9bf74f5398bfd4ee8",
"sha256:6a2644a93da36c784e546de579ec1806bfd2763ef47babc1b03d765fe560c9f8",
"sha256:6b41e1adc61fa347662b09398e31ad446afadff932a24807d3ceb955ed865cc8",
"sha256:6c188c307e8433bcb63dc1915022deb553b4203a70722fc542c363bf120a01fd",
"sha256:6edd623bae6a737f10ce853ea076f56f507fd7726bee96a41ee3d68d347e4d16",
"sha256:73d6d2f64f4d894c96626a75578b0bf7d9e56dcda8c3d037a2118fdfe9b1c664",
"sha256:7a22ccefd4db3f12b526eccb129390942fe874a3a9fdbdd24cf55773a1faab1a",
"sha256:7fb89ee5d106e4a7a51bce305ac4efb981536301895f7bdcf93ec92ae0d91c7f",
"sha256:846bc79ee753acf93aef4184c040d709940c9d001029ceb7b7a52747b80ed2dd",
"sha256:85ab7824093d8f10d44330fe1e6493f756f252d145323dd17ab6b48733ff6c0a",
"sha256:8dee5b4810a89447151999428fe096977346cf2f29f4d5e29609d2e19e0199c9",
"sha256:8e5fb5f77c8745a60105403a774fe2c1759b71d3e7b4ca237a5e67ad066c7199",
"sha256:98eeee2f2e63edae2181c886d7911ce502e1292794f4c5ee71e60e23e8d26b5d",
"sha256:9d4a76b96f398697fe01117093613166e6aa8195d63f1b4ec3f21ab637632963",
"sha256:9e8719792ca63c6b8340380352c24dcb8cd7ec49dae36e963742a275dfae6009",
"sha256:a0b2b80321c2ed3fcf0385ec9e51a12253c50f146fddb2abbb10f033fe3d049a",
"sha256:a4cc92bb6db56ab0c1cbd17294e14f5e9224f0cc6521167ef388332604e92679",
"sha256:a738b937d512b30bf75995c0159c0ddf9eec0775c9d72ac0202076c72f24aa96",
"sha256:a8f877c89719d759e52783f7fe6e1c67121076b87b40542966c02de5503ace42",
"sha256:a906ed5e47a0ce5f04b2c981af1c9acf9e8696066900bf03b9d7879a6f679fc8",
"sha256:ae2941333154baff9838e88aa71c1d84f4438189ecc6021a12c7573728b5838e",
"sha256:b0d0a6c64fcc4ef9c69bd5b3b3626cc3776520a1637d8abaa62b9edc147a58f7",
"sha256:b5b029322e6e7b94fff16cd120ab35a253236a5f99a79fb04fda7ae71ca20ae8",
"sha256:b7aaa315101c6567a9a45d2839322c51c8d6e81f67683d529512f5bcfb99c802",
"sha256:be1c8ed48c4c4065ecb19d882a0ce1afe0745dfad8ce48c49586b90a55f02366",
"sha256:c0256beda696edcf7d97ef16b2a33a8e5a875affd6fa6567b54f7c577b30a137",
"sha256:c157bb447303070f256e084668b702073db99bbb61d44f85d811025fcf38f784",
"sha256:c57d08ad67aba97af57a7263c2d9006d5c404d721c5f7542f077f109ec2a4a29",
"sha256:c69ada171c2d0e97a4b5aa78fbb835e0ffbb6b13fc5da968c09811346564f0d3",
"sha256:c94bb0a9f1db10a1d16c00880bdebd5f9faf267273b8f5bd1878126e0fbde771",
"sha256:cb130fccd1a37ed894824b8c046321540263013da72745d755f2d35114b81a60",
"sha256:ced479f601cd2f8ca1fd7b23925a7e0ad512a56d6e9476f79b8f381d9d37090a",
"sha256:d05ac6fa06959c4172eccd99a222e1fbf17b5670c4d596cb1e5cde99600674c4",
"sha256:d552c78411f60b1fdaafd117a1fca2f02e562e309223b9d44b7de8be451ec5e0",
"sha256:dd4490a33eb909ef5078ab20f5f000087afa2a4daa27b4c072ccb3cb3050ad84",
"sha256:df5cbb1fbc74a8305b6065d4ade43b993be03dbe0f8b30032cced0d7740994bd",
"sha256:e28f9faeb14b6f23ac55bfbbfd3643f5c7c18ede093977f1df249f73fd22c7b1",
"sha256:e464b467f1588e2c42d26814231edecbcfe77f5ac414d92cbf4e7b55b2c2a776",
"sha256:e4c22e1ac1f1ec1e09f72e6c44d8f2244173db7eb9629cc3a346a8d7ccc31142",
"sha256:e53b5fbab5d675aec9f0c501274c467c0f9a5d23696cfc94247e1fb56501ed89",
"sha256:e93f1c331ca8e86fe877a48ad64e77882c0c4da0097f2212873a69bbfea95d0c",
"sha256:e997fd30430c57138adc06bba4c7c2968fb13d101e57dd5bb9355bf8ce3fa7e8",
"sha256:e9a091b0550b3b0207784a7d6d0f1a00d1d1c8a11699c1a4d93db3fbefc3ad35",
"sha256:eab4bb380f15e189d1313195b062a6aa908f5bd687a0ceccd47c8211e9cf0d4a",
"sha256:eb1ae19e64c14c7ec1995f40bd932448713d3c73509e82d8cd7744dc00e29e86",
"sha256:ecea58b43a67b1b79805f1a0255730edaf5191ecef84dbc4cc85eb30bc8b63b9",
"sha256:ee439691d8c23e76f9802c42a95cfeebf9d47cf4ffd06f18489122dbb0a7ad64",
"sha256:eee9130eaad130649fd73e5cd92f60e55708952260ede70da64de420cdcad554",
"sha256:f47cd43a5bfa48f86925fe26fbdd0a488ff15b62468abb5d2a1e092a4fb10e85",
"sha256:f6fff13ef6b5f29221d6904aa816c34701462956aa72a77f1f151a8ec4f56aeb",
"sha256:f745ec09bc1b0bd15cfc73df6fa4f726dcc26bb16c23a03f9e3367d357eeedd0",
"sha256:f8404bf61298bb6f8224bb9176c1424548ee1181130818fcd2cbffddc768bed8",
"sha256:f9268774428ec173654985ce55fc6caf4c6d11ade0f6f914d48ef4719eb05ebb",
"sha256:faa3c142464efec496967359ca99696c896c591c56c53506bac1ad465f66e919"
],
"markers": "python_version >= '3.8'",
"version": "==2024.9.11"
},
"requests": {
"hashes": [
"sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760",
@ -895,19 +794,19 @@
},
"six": {
"hashes": [
"sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926",
"sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"
"sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274",
"sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"
],
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
"version": "==1.16.0"
"version": "==1.17.0"
},
"smmap": {
"hashes": [
"sha256:dceeb6c0028fdb6734471eb07c0cd2aae706ccaecab45965ee83f11c8d3b1f62",
"sha256:e6d8668fa5f93e706934a62d7b4db19c8d9eb8cf2adbb75ef1b675aa332b69da"
"sha256:26ea65a03958fa0c8a1c7e8c7a58fdc77221b8910f6be2131affade476898ad5",
"sha256:b30115f0def7d7531d22a0fb6502488d879e75b260a9db4d0819cfb25403af5e"
],
"markers": "python_version >= '3.7'",
"version": "==5.0.1"
"version": "==5.0.2"
},
"super-collections": {
"hashes": [
@ -935,47 +834,47 @@
},
"urllib3": {
"hashes": [
"sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac",
"sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9"
"sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df",
"sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d"
],
"markers": "python_version >= '3.8'",
"version": "==2.2.3"
"markers": "python_version >= '3.9'",
"version": "==2.3.0"
},
"watchdog": {
"hashes": [
"sha256:0f9332243355643d567697c3e3fa07330a1d1abf981611654a1f2bf2175612b7",
"sha256:1021223c08ba8d2d38d71ec1704496471ffd7be42cfb26b87cd5059323a389a1",
"sha256:108f42a7f0345042a854d4d0ad0834b741d421330d5f575b81cb27b883500176",
"sha256:1e9679245e3ea6498494b3028b90c7b25dbb2abe65c7d07423ecfc2d6218ff7c",
"sha256:223160bb359281bb8e31c8f1068bf71a6b16a8ad3d9524ca6f523ac666bb6a1e",
"sha256:26dd201857d702bdf9d78c273cafcab5871dd29343748524695cecffa44a8d97",
"sha256:294b7a598974b8e2c6123d19ef15de9abcd282b0fbbdbc4d23dfa812959a9e05",
"sha256:349c9488e1d85d0a58e8cb14222d2c51cbc801ce11ac3936ab4c3af986536926",
"sha256:49f4d36cb315c25ea0d946e018c01bb028048023b9e103d3d3943f58e109dd45",
"sha256:53a3f10b62c2d569e260f96e8d966463dec1a50fa4f1b22aec69e3f91025060e",
"sha256:53adf73dcdc0ef04f7735066b4a57a4cd3e49ef135daae41d77395f0b5b692cb",
"sha256:560135542c91eaa74247a2e8430cf83c4342b29e8ad4f520ae14f0c8a19cfb5b",
"sha256:720ef9d3a4f9ca575a780af283c8fd3a0674b307651c1976714745090da5a9e8",
"sha256:752fb40efc7cc8d88ebc332b8f4bcbe2b5cc7e881bccfeb8e25054c00c994ee3",
"sha256:78864cc8f23dbee55be34cc1494632a7ba30263951b5b2e8fc8286b95845f82c",
"sha256:85527b882f3facda0579bce9d743ff7f10c3e1e0db0a0d0e28170a7d0e5ce2ea",
"sha256:90a67d7857adb1d985aca232cc9905dd5bc4803ed85cfcdcfcf707e52049eda7",
"sha256:91b522adc25614cdeaf91f7897800b82c13b4b8ac68a42ca959f992f6990c490",
"sha256:9413384f26b5d050b6978e6fcd0c1e7f0539be7a4f1a885061473c5deaa57221",
"sha256:94d11b07c64f63f49876e0ab8042ae034674c8653bfcdaa8c4b32e71cfff87e8",
"sha256:950f531ec6e03696a2414b6308f5c6ff9dab7821a768c9d5788b1314e9a46ca7",
"sha256:a2e8f3f955d68471fa37b0e3add18500790d129cc7efe89971b8a4cc6fdeb0b2",
"sha256:ae6deb336cba5d71476caa029ceb6e88047fc1dc74b62b7c4012639c0b563906",
"sha256:b8ca4d854adcf480bdfd80f46fdd6fb49f91dd020ae11c89b3a79e19454ec627",
"sha256:c66f80ee5b602a9c7ab66e3c9f36026590a0902db3aea414d59a2f55188c1f49",
"sha256:d52db5beb5e476e6853da2e2d24dbbbed6797b449c8bf7ea118a4ee0d2c9040e",
"sha256:dd021efa85970bd4824acacbb922066159d0f9e546389a4743d56919b6758b91",
"sha256:e25adddab85f674acac303cf1f5835951345a56c5f7f582987d266679979c75b",
"sha256:f00b4cf737f568be9665563347a910f8bdc76f88c2970121c86243c8cfdf90e9",
"sha256:f01f4a3565a387080dc49bdd1fefe4ecc77f894991b88ef927edbfa45eb10818"
"sha256:07df1fdd701c5d4c8e55ef6cf55b8f0120fe1aef7ef39a1c6fc6bc2e606d517a",
"sha256:20ffe5b202af80ab4266dcd3e91aae72bf2da48c0d33bdb15c66658e685e94e2",
"sha256:212ac9b8bf1161dc91bd09c048048a95ca3a4c4f5e5d4a7d1b1a7d5752a7f96f",
"sha256:2cce7cfc2008eb51feb6aab51251fd79b85d9894e98ba847408f662b3395ca3c",
"sha256:490ab2ef84f11129844c23fb14ecf30ef3d8a6abafd3754a6f75ca1e6654136c",
"sha256:6eb11feb5a0d452ee41f824e271ca311a09e250441c262ca2fd7ebcf2461a06c",
"sha256:6f10cb2d5902447c7d0da897e2c6768bca89174d0c6e1e30abec5421af97a5b0",
"sha256:7607498efa04a3542ae3e05e64da8202e58159aa1fa4acddf7678d34a35d4f13",
"sha256:76aae96b00ae814b181bb25b1b98076d5fc84e8a53cd8885a318b42b6d3a5134",
"sha256:7a0e56874cfbc4b9b05c60c8a1926fedf56324bb08cfbc188969777940aef3aa",
"sha256:82dc3e3143c7e38ec49d61af98d6558288c415eac98486a5c581726e0737c00e",
"sha256:9041567ee8953024c83343288ccc458fd0a2d811d6a0fd68c4c22609e3490379",
"sha256:90c8e78f3b94014f7aaae121e6b909674df5b46ec24d6bebc45c44c56729af2a",
"sha256:9513f27a1a582d9808cf21a07dae516f0fab1cf2d7683a742c498b93eedabb11",
"sha256:9ddf7c82fda3ae8e24decda1338ede66e1c99883db93711d8fb941eaa2d8c282",
"sha256:a175f755fc2279e0b7312c0035d52e27211a5bc39719dd529625b1930917345b",
"sha256:a1914259fa9e1454315171103c6a30961236f508b9b623eae470268bbcc6a22f",
"sha256:afd0fe1b2270917c5e23c2a65ce50c2a4abb63daafb0d419fde368e272a76b7c",
"sha256:bc64ab3bdb6a04d69d4023b29422170b74681784ffb9463ed4870cf2f3e66112",
"sha256:bdd4e6f14b8b18c334febb9c4425a878a2ac20efd1e0b231978e7b150f92a948",
"sha256:c7ac31a19f4545dd92fc25d200694098f42c9a8e391bc00bdd362c5736dbf881",
"sha256:c7c15dda13c4eb00d6fb6fc508b3c0ed88b9d5d374056b239c4ad1611125c860",
"sha256:c897ac1b55c5a1461e16dae288d22bb2e412ba9807df8397a635d88f671d36c3",
"sha256:cbafb470cf848d93b5d013e2ecb245d4aa1c8fd0504e863ccefa32445359d680",
"sha256:d1cdb490583ebd691c012b3d6dae011000fe42edb7a82ece80965b42abd61f26",
"sha256:e3df4cbb9a450c6d49318f6d14f4bbc80d763fa587ba46ec86f99f9e6876bb26",
"sha256:e6439e374fc012255b4ec786ae3c4bc838cd7309a540e5fe0952d03687d8804e",
"sha256:e6f0e77c9417e7cd62af82529b10563db3423625c5fce018430b249bf977f9e8",
"sha256:e7631a77ffb1f7d2eefa4445ebbee491c720a5661ddf6df3498ebecae5ed375c",
"sha256:ef810fbf7b781a5a593894e4f439773830bdecb885e6880d957d5b9382a960d2"
],
"markers": "python_version >= '3.9'",
"version": "==5.0.3"
"version": "==6.0.0"
},
"webencodings": {
"hashes": [
@ -995,11 +894,11 @@
},
"six": {
"hashes": [
"sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926",
"sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"
"sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274",
"sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"
],
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
"version": "==1.16.0"
"version": "==1.17.0"
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 429 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 230 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 171 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 171 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 165 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 261 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 187 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 169 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 179 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 167 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 173 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 277 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 219 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 177 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 163 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 178 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 162 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 180 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 180 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 173 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 165 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 180 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 163 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 183 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 165 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 159 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 221 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 191 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 256 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 223 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 180 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 244 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 220 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 177 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 159 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 182 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 KiB

View File

@ -0,0 +1,157 @@
---
date:
created: 2025-03-10T20:00:00Z
categories:
- Opinion
authors:
- em
description: In privacy, we talk a lot about how to protect our own data, but what about our responsibility to protect the data of others? If you care about privacy rights, you must also care for the data of the people around you. Together, we must start building a culture of data privacy where everyone cares for the data of others.
schema_type: OpinionNewsArticle
---
# Privacy is Also Protecting the Data of Others
![Illustration from a photo of two children standing in a grass field. The taller child holds a yellow umbrella protecting the smaller child.](../assets/images/the-privacy-of-others/cover.webp)
<small aria-hidden="true">Illustration: Em / Privacy Guides | Photo: J W / Unsplash</small>
In privacy, we talk a lot about how to protect our own data, but what about our responsibility to protect the data of others?
If you care about privacy rights, you must also care for the data of the people around you. To make privacy work, we need to develop a culture that normalizes caring for everyone's data, not just our own. Privacy cannot solely be a personal responsibility, data privacy is team work.<!-- more -->
Whatever measures and tools you use to protect your own data, you would never be able to protect it fully without the collaboration of others.
In this context, the people around you might be your family or your friends, but also includes your boss, your doctor, your therapist, your school, your government, and any other person or organization that has control over some of your data.
Conversely, you are also in control of other people's data.
Even if you are not a boss, a doctor, or a therapist yourself, you probably have some photos of your friends, a list of contact information, and copies of sensitive conversations exchanged in private messages with your family. All of this data is under your guard too.
Once you have control over someone else's data, **you become its guardian**.
## Data protection is a communal responsibility
Now to be clear, this isn't necessarily in relationship with the law, although it can be part of it. In this context, I am referring more to ethics. Do we have a moral obligation to care for and protect others to at least the same level we wish to be protected ourselves?
As a connected society, we constantly exchange information with each other. This information is now mostly stored on digital mediums, and can be very easily duplicated and shared elsewhere. Actually, on a technical level, it's even *difficult* not to constantly involuntarily create duplicates of this data and send it elsewhere.
This is why **we must increase our vigilance** about protecting the data of others.
Considering the quantity of data that ends up in everyone's possession, data has become a communal responsibility.
## We must develop a culture that normalizes data privacy
Privacy is a human right, and a good starting point to protect any human right is legislation. Legislation is undeniably an aspect of data privacy that is in constant evolution, and we can hope that privacy laws will only get better over time. Well, let's not just hope, let's also work to make sure it does.
That being said, **laws simply aren't enough**.
To truly improve data privacy rights, we *must* integrate them into our *whole culture*. This might sound like an over-ambitious endeavor, but culture is flexible and evolves with people's needs.
In the past few decades, our culture and customs have begun to shift *against* data privacy. Some of us are old enough to remember a time when everyone didn't have a camera in their pocket. At that time, it would have been considered unacceptable in most places to suddenly point a recording camera at a stranger in the street and start filming them without any explanation and without their consent.
Now this kind of disrespectful behavior is a common occurrence, because everyone has the tool do to it. Our society evolved with technological tools, but **we neglected to course-correct our culture for it**.
We have reached a point where we need to develop a culture of individual responsibility towards each other's data.
This means caring not just for our own data, but **caring for everyone's data**, whether it's the data of our friends, our family, our employees, our patients, or even complete strangers in the streets, or online.
This will take a lot of time and effort, but we owe it to the next generations to start now.
## The principles we should consider in relation to privacy
Our society already has adopted or improved many ethical principles in the past decades that are intimately linked to data privacy.
Some of these principles and values have become much more prevalent in our culture recently, consent being one great example for this.
**Consent** in privacy is incredibly important. What one person might feel comfortable sharing publicly might be completely different from another person, for example. Privacy cannot be established on a fixed basis without considering individuality and circumstances.
Someone might be happy sharing their name on social media, and someone else might safeguard this information and only use pseudonyms. One person might feel safe sharing their home address online, yet another person could be killed for doing this.
This is why *informed* and *explicit* individual consent (with true choices) should always be the center of such decisions, for any type of personal information.
Other principles we must integrate in our culture of data privacy include **empathy** (my threat model isn't your threat model), **trust and respect** (secure this data properly if you must collect it), **safety** (consider someone could get severely harmed by a data breach), and **individual liberties** (sharing data must be a personal choice, even if there's no danger, it's still valid even if it's just a preference).
Of course, these are only a few principles indispensable to build a culture of data privacy, but since most people are already familiar with these we'll start here.
## How we can start building a better culture around data privacy
So, what concrete actions can we take *right now* to improve our culture around data privacy? What can we do today at the individual level to start better protecting the data of others?
Here are a few practices you can adopt in your daily life to improve the data of the people around you. However, I insist you not just demand others do this for you, but **do this for others too**. Re-shaping our culture needs to start with ourselves:
### :material-camera-off: Ask for consent before sharing/posting photos
Do not post photos of people online without their prior consent. Especially if there are children involved! Before sharing photos of others online, *always* ask for their consent first.
### :material-face-recognition: Be mindful when sharing photos of protests
Be very careful when [taking pictures during a protest](https://www.privacyguides.org/articles/2025/01/23/activists-guide-securing-your-smartphone/). There's a lot of nuance to this because it's also important to show protests and make them known (that's usually the goal!), but in some circumstances people might be put in danger if their faces are shown online associated with certain causes.
Be mindful and make sure no one is singled out without consent in your pictures if you post them online. When possible, try to blur/block the faces of the people you couldn't ask for consent.
### :material-car: Blur license plates
When taking photos in the streets and posting them online, be mindful to blur license plates. This might sound extreme but imagine a situation where someone is a victim of domestic violence and their abuser sees their car parked at a shelter, or at someone's place. This information could literally get someone killed. Always keep in mind different people have different [threat models](https://www.privacyguides.org/en/basics/threat-modeling/).
### :material-contacts: Safeguard contact information
Never share the contact information of someone with someone else (or something else) without their prior explicit consent. This includes email addresses, phone numbers, legal names, locations, photos, and *especially* home addresses. This information in the wrong hands could literally get someone killed. **Always ask first!**
Additionally, be vigilant when importing your contact list in a new application. This could get it shared further than you intended. Ideally, always keep your contact list in an end-to-end encrypted application only.
### :material-file-eye: Be careful when sharing files from and with others
If someone trusted you with a file (photo, music, video, PDF, text file, etc.), always ask for consent before sharing this file with someone else.
Additionally, always keep this file only locally or stored in a secure end-to-end encrypted service. If this person gives you consent to share this file, ensure that metadata has been [removed](https://www.privacyguides.org/en/data-redaction/) from it. This person might not be aware of the metadata on this file.
### :material-heart: Keep confidences secret
If someone trusts you enough to share something personal with you, do not betray that trust by talking about it with someone else, and *especially* not on unencrypted services such as Gmail or Twitter's DM. In doing so, you would expose this secret to even more unintended recipients. Respect people's trust in you. Do not share confidences.
### :material-message-text: Safeguard and delete private messages on social media
If you have private conversations on social media, be mindful not to spread this information elsewhere. If you delete your account, be mindful to also [delete](https://docs.cyd.social/docs/x/delete#delete-my-direct-messages) the information of others you have stored in your private messages. If someone wants to share sensitive information with you, always invite them to move to an end-to-end encrypted [messaging service](https://www.privacyguides.org/en/real-time-communication/) instead.
### :material-heart-box: Safeguard and delete intimate pictures you received
If someone trust you enough to send you intimate photos of themselves, take this responsibility *extremely* seriously. If they use an end-to-end encrypted service, do not move the photos out of there. If you do, you could inadvertently upload them to an unencrypted service and compromise the security of these pictures.
If your relationship with this person ends, you *should* delete all intimate pictures you have received. This is extremely important for their safety, and also possibly for *yours*. Things could get very problematic legally if your copies were to get accidentally leaked or stolen. No matter how difficult this might be emotionally, do the right thing and delete these pictures fully.
If you are still unconvinced about this one, maybe have a look at Ted Lasso season 3, [episode 8](https://screenrant.com/ted-lasso-season-3-episode-8-keeley-story-response/) which has a great story demonstrating the dangers related to this.
### :material-cellphone-screenshot: Avoid taking screenshot of people's posts
Each time you take a screenshot of someone's post to repost it somewhere else, you are effectively removing this person's ability to delete their content later. This is horrible for privacy *and* for consent. Instead, use links to other people's posts. That way, if they decide later to delete their content, the link will simply not work anymore, but their right to deletion will remain intact.
### :material-record-circle: Notify guests if you are using a smart speaker
If you are using a smart speaker device in your home such as Amazon's Echo (Alexa), Apple's HomePod (Siri), Google's Nest, inform your guests about it when they enter your home. These devices have the [capacity](https://www.makeuseof.com/tag/alexa-amazon-echo-privacy-risk/) to record all conversations, and there has already been instances of accidental privacy invasion [reported](https://www.cnet.com/home/smart-home/alexa-sent-private-audio-to-a-random-contact-portland-family-says/) about this. Even if you don't mind yourself, offer your guests to *unplug* your smart speaker while they are visiting you. The same is valid for any voice assistant on your phone.
### :material-eye-off: Do not use Windows Recall (or anything similar)
If you are a Microsoft user, make sure to [*disable*](https://www.ytechb.com/how-to-uninstall-microsoft-recall-in-windows-11/) Windows Recall from your computer. If it's enabled, this application will [continuously](https://www.theverge.com/2024/6/3/24170305/microsoft-windows-recall-ai-screenshots-security-privacy-issues) take screenshots of your computer, including the faces of anyone video-chatting with you on Signal, the email content of anyone contacting your through Tuta Mail, the secrets of anyone chatting with you on Matrix. Windows Recall completely defeats the protections of anyone using end-to-end encryption to contact you. This is a huge breach of trust! If you somehow use this feature, at least be mindful to disable it each time you communicate with others.
### :fontawesome-solid-glasses: Don't use Meta's Ray-Ban "AI" glasses!
Don't use "smart" glasses recording people.
Just don't.
Ever.
This is *extremely* creepy.
Never buy nor use this.
If you encounter someone in the street wearing this, run away.
## This is only a start, but together we can do this
Improving our culture around data privacy will take time and effort, but we have to start now. The best place to start is with yourself.
Remember:
"Be the change you wish to see in the world."
**Be the data protector you wish to see in the world.**

View File

@ -0,0 +1,247 @@
---
date:
created: 2025-03-08T11:00:00Z
categories:
- Explainers
authors:
- fria
tags:
- Passkeys
- Passwords
license: BY-SA
---
# Toward a Passwordless Future
![Article cover showing a rusted, broken lock on a door latch](../assets/images/toward-a-passwordless-future/cover.webp)
<small aria-hidden="true">Illustration: Jordan / Privacy Guides | Photo: Gowtham AGM / Unsplash</small>
Passwords are annoying, vulnerable to attack, and prone to human error. The multitude of issues with passwords has cost [millions](https://www.ibm.com/downloads/documents/us-en/107a02e94948f4ec) of dollars and forced terrible band-aid solutions in how we handle signing up for, logging in to, and securing online accounts. I'd like to break down some of these design paradigms that have entrenched themselves in our lives and how passkeys can lead to more secure and private online accounts.<!-- more -->
## How did we get here?
### Ancient Rome
Passwords are a surprisingly old concept, dating all the way back to ancient Rome. The ancient Roman historian Polybius in his *[Histories](http://www.perseus.tufts.edu/hopper/text?doc=Perseus%3Atext%3A1999.01.0234%3Abook%3D6%3Achapter%3D34)* describes how the Roman military would pass around a wooden tablet, or *tessera*, inscribed with a "watchword" that would allow them to identify each other as friendly.
### Prohibition
During Prohibition in the 1920s US, speakeasies, or private, unlicensed bars selling illegal alcohol, would require a spoken [password](https://prohibition.themobmuseum.org/the-history/the-prohibition-underworld/the-speakeasies-of-the-1920s/) to gain entry. The name comes from how quietly you had to say the password, so law enforcement didn't overhear.
### World War II
The US military later used [countersigns](https://en.wikipedia.org/wiki/Countersign_(military)#cite_note-2), consisting of a challenge and a password to identify allies. On D-Day, they used the challenge "flash" and the password "thunder." Thunder was used specifically because it was difficult for Germans to pronounce, since the English "th" sound doesn't exist in German. This is an example of a shibboleth, or a way of distinguishing groups of people based on cultural differences.
### 1960's
It wasn't long after the dawn of the electronic computer that a solution for authentication was needed. Computers in the 1950s were expensive and slow, only able to handle one problem at a time.
MIT's Compatible Time Sharing System (CTSS), pioneered by Fernando Corbató, aimed to solve this problem by allowing multiple users to do work at the same time, but they needed a way to authenticate specific users. "Putting a password on for each individual user as a lock seemed like a very straightforward solution" Corbató told Wired in an [interview](https://www.wired.com/2012/01/computer-password/).
These passwords weren't designed to be very secure. Fred Schneider, a computer science professor at Cornell University, said in the same Wired article "nobody wanted to devote many machine resources to this authentication stuff."
![Fernando Corbató standing next to the CTSS](../assets/images/toward-a-passwordless-future/ctss.webp)
<small aria-hidden="true">Fernando Corbató with the CTSS | Photo: <a href="https://www.computerhistory.org/timeline/1961/">Computer History Museum</a></small>
### First Password Breach
The first password breach occurred not long after in 1962, detailed in a [pamphlet](https://www.multicians.org/thvv/compatible-time-sharing-system.pdf) written to commemorate the CTSS.
Allan Scherr, a Ph.D. researcher at MIT, wanted more time for his detailed simulations. He knew that the passwords were stored in a plaintext file, so he requested it to be printed offline and that was that: he now had everyone's password and all the time he could ask for.
A later incident in 1966 saw all users' passwords being printed at login due to the administrator accidentally swapping the master password file and the message of the day.
### Early Attempts at Securing Passwords
Clearly there was work to be done on securely storing passwords. A [paper](https://rist.tech.cornell.edu/6431papers/MorrisThompson1979.pdf) from 1979 by Robert Morris and Ken Thompson of Bell Laboratories outlines some requirements to bolster the security of passwords on a UNIX system.
#### Hashing
One of which is the need for passwords to not be stored in plaintext on the system, instead recommending storing a hash.
A hash is a one-way function: you give a certain input, and it spits out data that can't be easily reversed back to the input, even knowing the algorithm that was used. But, given the same input, you'll get the same output, allowing you to compare an inputted user password to a stored one.
In order to make it hard to brute force, the hashing algorithm should be fairly slow.
#### Password Requirements
They recommend certain requirements on the password entry program such as the classic 6-character minimum password length to prevent easily guessable passwords.
#### Salting
Password salting, a technique wherein a random string of characters is added to the end of the user's password before hashing, gets a mention as well. This prevents an attacker from simply pre-computing many password hashes ahead of time, and also prevents an attacker from knowing if the same password has been used on multiple systems just from comparing the hashes.
These guidelines would remain mostly unchanged for decades, save for improved hashing and salting algorithms.
## Unforeseen Consequences
What was originally a system designed for a few people sharing a computer in an academic and research setting has somehow remained almost unchanged decades later.
### Password Overload
Instead of remembering a single password for your computer, you now have potentially hundreds of passwords for various online accounts. A recent [survey](https://nordpass.com/blog/how-many-passwords-does-average-person-have/) by NordPass estimates that the average person has around 168 personal accounts, with a nearly 70% increase in just the last three years since the survey was taken. This is an untenable number of passwords for a human to remember, so we don't.
### Email Requirement
With the ever-present threat of users forgetting their passwords and therefore losing access to their account irrevocably, there needed to be a way to recover the account.
By the end of the dotcom bubble, email was fairly ubiquitous, so it made sense as a fallback way of authenticating. This had the added benefit of giving companies a way of contacting (read: spamming with ads) their customers.
While it's hard to say when it started happening, major websites like eBay were requiring email addresses on signup as far back as [1999](http://web.archive.org/web/19991122073209/http://pages.ebay.com/services/registration/register.html). Amazon was doing it back in [2001](https://web.archive.org/web/20011107052853/http://www.amazon.com/exec/obidos/flex-sign-in/?opt=oa&page=recs/sign-in-secure.html&response=tg/recs/recs-post-login-dispatch/-/recs). People I interviewed said that email-based signup was commonplace by the late 90s.
And so the precedent of requiring personal contact information to sign up for an account was born, at least partially due to the shortcomings of passwords.
### Terrible Security
#### Single Point of Failure
On top of the extra personal data now required for each online account, email acts as a one-stop shop for attackers looking to hack your accounts, either by getting into your email account itself or by sending you convincing password reset emails that send you to a phishing page that looks exactly like the real page.
With the advent of AI, phishing attacks have only gotten cheaper and easier.
Laughably, we're told to "look for typos" or "just feel out the vibes man" in order to defend against these attacks. What hope did we ever have?
This intersects a bit with how I think email is a terrible, outdated protocol that needs to be replaced, but that's a blog post for another day.
What's followed as a consequence of the tech industry's refusal to adapt to the security landscape is an unprecedented cybercrime industry, stealing an estimated [$44.2 million](https://aag-it.com/the-latest-phishing-statistics/) in 2021 through phishing scams. These are people whose only contribution to society is draining grandma's bank account, and they're absolutely raking it in.
#### Service Provider Negligence
But even if you do everything right and never fall for a phishing email, you can still be compromised due to the negligence of any one of the hundreds of service providers you rely on. Passwords need to be stored on a server somewhere, and if a service provider doesn't hash and salt them properly, a data breach will leave your account vulnerable.
Even if the *service provider* does everything right in terms of storing the password (which you have absolutely no way of verifying), in the event of a data breach the attackers will still have a hash of your password to attack.
There's typically also a period between the server receiving your password from the encrypted HTTPS tunnel and storing it securely as a hash where it handles your password in plaintext in order to compare it with what it has on file. Any vulnerabilities in the hardware could be catastrophic.
If you think this sounds like minor nitpicking, consider that in 2019, Facebook realized it had accidentally been storing [hundreds of millions of user passwords in plaintext](https://about.fb.com/news/2019/03/keeping-passwords-secure/).
#### Human Error
Even ignoring all of that, passwords rely on randomness to be secure, but they also rely on humans to generate them.
Humans are very bad at generating random numbers. We're so bad at it that it's possible to [uniquely identify](https://pubmed.ncbi.nlm.nih.gov/23626943/) you based on your pattern of "random" numbers.
That doesn't even matter though, since passwords, by requiring the user to type them whenever they want to log in and requiring the user to remember them, encourage minimum randomness and minimum length.
Most of us, even [IT experts](https://www.hipaajournal.com/92-of-it-leaders-guilty-of-password-reuse/), reuse passwords because we are so heavily incentivized to do so by how they fundamentally work.
The strategy historically has been to shame people for using bad passwords whenever their account gets hacked, which has prevented us from seeing the fundamental issues with the way we authenticate and instead making it every individual's responsibility to somehow fight the incentives of the system they rely on.
Imagine if every time you connected to a website with HTTPS, you had to come up with your own encryption key. Would that be a secure system?
## Band-aid Solutions
A common theme with passwords, and frankly many other things in the tech world, is stapling band-aid solutions on top of them to try and make them fit a modern use case they were never meant to serve.
### Password Managers
Password managers solve the issue of forgetting your passwords by acting as a secure repository for of all your passwords. You can even conveniently have them autofill your information for you on the login screen. They can generate strong passwords for you as well.
#### Single Point of Failure
Essentially, password managers try to eliminate the human error element of passwords. But in doing so, they introduce more attack surface: you now have a repository of all your login credentials conveniently located on your device, so if your device is compromised, all your accounts are also compromised.
So a user with a password manager has to worry about passwords being guessed, potential compromise of their email, or compromise of their password manager.
#### Security isn't Enforced
Not to mention that many of the protections of a password manager are optional. A user isn't required to generate secure passwords, many will just continue using the same passwords they always have.
#### Poor Phishing Protection
Although some argue autofill protects against phishing attacks, really it doesn't since as soon as it doesn't autofill, a user will simply copy and paste their password into the field. A proper anti-phishing mitigation would make it nearly impossible to authenticate with the wrong website. Autofill can introduce its own set of [vulnerabilities](https://github.com/google/security-research/security/advisories/GHSA-mhhf-w9xw-pp9x) as well.
### Salting and Hashing
Salting and hashing themselves I would consider band-aid solutions, as they were stapled on top of the existing system as security concerns grew. They rely a lot on the service providers implementing them properly and even still there are gaps in security as I previously mentioned.
### Two-Factor Authentication
Because of the risk of compromise with passwords, most websites implement some form of two-factor authentication.
#### Email 2FA
By far the most common is email 2FA, which on top of all the problems with using email as an authentication method stated before, usually only happens the first time you log in to a website on each device (until you clear your cookies that is).
#### SMS 2FA
SMS 2FA is also common. This method is vulnerable to [SIM swap attacks](https://www.verizon.com/about/account-security/sim-swapping) in which an attacker tricks your carrier into swapping your phone number onto a new SIM card under their control. SMS is also completely unencrypted, lacking even transport encryption.
The SS7 system underlying SMS is inherently [vulnerable to interception](https://youtu.be/wVyu7NB7W6Y?si=S8yzlWWh8zwuGraq). The idea of using SMS as a security tool is, frankly, laughable.
#### OTP
That brings us to [OTP](https://www.onelogin.com/learn/otp-totp-hotp) or One Time Password. This 2FA method relies on two things: a shared secret between you and the website called a "seed", and a "moving factor".
The moving factor changes, allowing you both to generate a temporary password based on the seed that you need to type in on login.
There are two main approaches to OTP.
##### HOTP
Hash-based Message Authentication Code OTP, or HOTP, increments the moving factor each time you successfully log in.
##### TOTP
In Time-based OTP or TOTP, the moving factor is time. The generated passwords will be valid for only about 30 to 60 seconds. The amount of time they're valid for is called a *time step*.
Of the two, TOTP is newer and considered more secure since the passwords are constantly expiring.
##### Issues
While a massive step up from SMS 2FA in terms of both privacy and security, they're still lacking in phishing resistance.
If you are sent to a fake login screen and put in your HOTP or TOTP password, the attacker can simply put that in to the real login screen. At least with TOTP there's a somewhat limited timeframe they can do it in, but these days phishing operations are fully automated, so it really doesn't matter.
Also since both you and the website are storing the same seed, any breach of either your device or the servers will leave you compromised. You could store your secret on a separate device or on a separate app on your phone, but this leaves the risk of either not having your phone with you to log in to your accounts or losing your TOTP codes due to the file getting corrupted or a bad update. Overall, OTP is better than SMS 2FA but still leaves a lot to be desired.
### Shoulder Surfing
Another oft-forgotten issue with passwords is that someone could just [watch you type it](https://www.insideedition.com/thieves-are-snatching-phones-and-stealing-personal-info-after-studying-victims-passwords-81548) in and hack your account that way. Most password fields replace the characters in your password with stars or dots to combat this, but they usually still give you the option to show your password in plaintext anyway. The screen isn't the only way you can leak your password either, someone filming or watching you type it in a keyboard or on your phone screen would have your password with little effort. A human doesn't even need to be present, AI models can now work out your password just by [listening](https://www.royalholloway.ac.uk/research-and-education/departments-and-schools/information-security/news/study-suggests-that-ai-can-detect-your-password-from-the-sound-of-keys-being-pressed/#:~:text=Artificial%20Intelligence%20can%20work%20out,Royal%20Holloway%2C%20University%20of%20London.) to you type it.
All of these are attempts, with varying success, at fixing the individual flaws with passwords rather than designing a solution from the ground up with security in mind. They add complexity, more steps in the process where either you or a service provider can screw something up.
## Passkeys: The Password Replacement
[Passkeys](https://fidoalliance.org/passkeys/) are FIDO credentials tied to a specific app or website that let you sign in with the same method you use to unlock your device, be that biometrics or a PIN.
<iframe title="Passkey Authentication" src="https://neat.tube/videos/embed/aa1e8c86-5ccb-41ca-bc20-7d1afe026759" frameborder="0" allowfullscreen="" sandbox="allow-same-origin allow-scripts allow-popups allow-forms" width="230" height="440"></iframe>
As long as you can remember your phone password, you can log in to your accounts. This frees you up to set a secure password on your device, since that's the only password you'd need to remember.
You may have heard of passkeys from Apple or Google and assumed they're some proprietary feature, but they're based on FIDO standards and the word "passkey" is meant to be a common noun like "password," not tied to any platform or company.
### No Personal Info
You also won't need to use a username or email when logging in with passkeys, although currently most implementations still require it. Passkeys can fully replace every aspect of logging in.
That means no email to send phishing attacks to or hack, and no SMS to be SIM swapped.
### Phishing Resistance
Passkeys operate using public-key cryptography just like how HTTPS works, so your private key isn't stored on the service provider's server, completely eliminating data breach issues with passwords. They were designed from the ground up to be phishing resistant and secure.
### Privacy
Since a unique key pair is generated for each account, you don't have to worry about being identified between accounts either. Hopefully soon you won't need to pay for that email aliasing service just to not be tracked across accounts.
### Protection Against Losing Your Account
You can even generate multiple passkeys per account in case you lose one somehow. Essentially this replaces the need for a recovery method; you can just add as many as you need, and they'll be available on all your devices anyway so losing your phone won't lock you out of your account.
### Anti-Shoulder Surfing
Passkeys fight shoulder surfing by allowing you to use biometrics on your device to sign in. Even in the event someone got your device password, they would still need the actual private key associated with your account, either through physical possession of your device or some other compromise of your password manager. Since the private key stays in your possession and is never sent anywhere unencrypted, the risk is minimal.
### Fully Syncable
Passkeys can be synced across devices and in the cloud as well, so you don't have to worry about losing them. And they'll be E2EE. Many password managers support passkeys, including Apple's and Google's built-in ones, so you can likely start using them right now.
### Try It Out
You can test out passkeys at [webauthn.io](https://webauthn.io). Even if your passkeys aren't synced to the device you're currently using, you can still login via a QR code, allowing your phone to act as a sort of wireless security key.
### Barriers
The main barrier to passkey adoption currently is lack of support from websites and apps. They either don't support passkeys at all, or still force you to sign up with a password, email, etc. with no way to delete them. I encourage you to contact any website or apps that don't have passkey support and request it, with the ability to signup and login without ever setting a password.

File diff suppressed because it is too large Load Diff

View File

@ -3,38 +3,110 @@ title: Donate
description: The charitable mission of Privacy Guides relies on contributions from visitors like yourself. Anything you can do to support the project is hugely appreciated.
---
<!-- markdownlint-disable MD036 -->
Donate to Privacy Guides and support our mission to defend digital rights and spread the word about mass surveillance programs and other daily privacy invasions. You can help Privacy Guides researchers, activists, and maintainers create informative content, host private digital services, and protect privacy rights at a time when the world needs it most.
Support our mission to defend digital rights and spread the word about mass surveillance programs and other daily privacy invasions. You can help Privacy Guides researchers, activists, and maintainers create informative content, host private digital services, and protect privacy rights at a time when the world needs it most.
Privacy Guides has been a nonstop effort for over 5 years to stay up to date with the world of cybersecurity and privacy, and to promote the benefits of privacy overall. This is a **non-profit, community-driven** project that would not be possible without the generous support of all our [contributors](contributors.md).
[:material-heart:{ .pg-red } Become a Member](https://donate.magicgrants.org/privacyguides/membership){ class="md-button md-button--primary" }
[:material-hand-coin: Make a Donation](https://donate.magicgrants.org/privacyguides/donate/privacyguides){ class="md-button md-button--primary" }
## Donate
<small markdown>
MAGIC Grants is our fiscal host, and their custom, open-source donation platform allows you to donate to our project with **Monero**, **Bitcoin**, or **debit/credit card**.
MAGIC Grants is our fiscal host, and their custom, open-source donation platform allows you to donate to our project with **Monero**, **Bitcoin**, or **debit/credit card**. You can also donate using [:simple-github: GitHub Sponsors](https://github.com/sponsors/privacyguides).
[:material-heart:{ .pg-red } Donate](https://donate.magicgrants.org/privacyguides){ class="md-button md-button--primary" }
[Sponsor on GitHub](https://github.com/sponsors/privacyguides){ class="md-button" }
</small>
Donating with Monero will maximize your donation by lowering our transaction fees while simultaneously [preserving your privacy](../cryptocurrency.md), win-win! You can also donate to us via GitHub Sponsors if you prefer, or if you would like to publicize your support. GitHub does not charge us any fees if you donate as an individual, but may charge us fees if you donate with a GitHub organization, if this is a concern for you.
## Foundations & Organizations
## How We Use Donations
=== "Current Supporters"
Privacy Guides is a **non-profit** project. Your donation will go to a [dedicated fund](https://magicgrants.org/funds/privacy_guides) within [MAGIC Grants](https://magicgrants.org), a 501(c)(3) organization and our fiscal host. The funds will **only** be used for this project specifically.
Thank you to these organizations who significantly support Privacy Guides. (1)
{ .annotate }
1. Please contact <info@magicgrants.org> to inquire about giving. Privacy Guides reserves the right to rescind the membership of those who are unaligned with our mission or organization at any time. Organizational members have no ability to influence what content is recommended on the Privacy Guides website. Learn more about our [donation acceptance policy](donation-acceptance-policy.md).
<div class="mdx-specialthanks" markdown>
[![Power Up Privacy]](https://powerupprivacy.com){ rel=nofollow target=_blank title="Power Up Privacy" }
[![DeleteMe]](https://joindeleteme.com){ rel=nofollow target=_blank title="DeleteMe" }
[Power Up Privacy]: ../assets/img/donors/power-up-privacy.webp
[DeleteMe]: ../assets/img/donors/deleteme.webp
</div>
=== "Past Supporters"
Thank you to these organizations who have substantially supported our project in the past.
- [Safing](https://safing.io){ rel=nofollow target=_blank }: 2019 2021
## Active Members
Privacy Guides would not be possible without these individuals who generously donate on a monthly or yearly basis. (1)
{ .annotate }
1. If you [become a member](https://donate.magicgrants.org/privacyguides/membership) and [link your donation](https://discuss.privacyguides.net/t/getting-your-member-flair-on-the-forum/25453) to your forum account, you're automatically added here with a link to your profile and avatar to show your support for Privacy Guides. If you link your forum account but don't set your flair or title, you'll be a silent +1. You can change your visibility any time. This chart is updated upon each website release.
<div class="mdx-donors" data-mdx-component="donors">
<div class="mdx-donors__list">
--8<-- "includes/members.md"
</div>
</div>
<small markdown>
This is a list of our **active** [members](https://donate.magicgrants.org/privacyguides/membership), plus donors on GitHub, who have chosen to make their donation public. Hundreds more have donated in the past or privately, and their support is hugely appreciated as well.
</small>
## Merchandise
You can support us and share your passion for privacy by buying our merchandise from HelloTux.
[Buy on HelloTux.com](https://hellotux.com/privacyguides){ class="md-button" }
## Non-Financial Support
It takes a lot of [people](contributors.md) and [work](https://github.com/privacyguides/privacyguides.org/pulse/monthly) to keep Privacy Guides up to date and spread the word about privacy and mass surveillance. If you're looking for other ways to help out, consider getting involved by [editing the site](https://github.com/privacyguides/privacyguides.org), [joining our forum](https://discuss.privacyguides.net), or [contributing translations](https://crowdin.com/project/privacyguides).
## FAQ
### What is an organizational membership?
Organizational membership to Privacy Guides is open to any company, private foundation, or organization that donates at least $5,000 per year. While Privacy Guides does not endorse private companies or their products, we're grateful for their contributions. Your donation may be tax-deductible, and we will provide you with a receipt.
You can become an organizational member by reaching out to <info@magicgrants.org> for more information.
### How are organizational members recognized?
Organizational members that choose to be recognized publicly are included in our organizational members section (above), and occasionally at other opportunities where appropriate. Organizational member links include the `rel="nofollow"` attribute: We adopted this policy to screen out potential abuse of our program and site to raise the rank of third parties in search algorithms. Unfortunately, this is a growing problem for nonprofits. This was a complex decision since we know many of the sincere supporters behind these companies, but we decided that it was the best choice for us.
Organizational members have no ability to influence what content is recommended on the Privacy Guides website. Learn more about our [donation acceptance policy](donation-acceptance-policy.md).
### What is an active membership?
Your monthly or yearly membership sustains Privacy Guides's services and public activism for privacy and cybersecurity year round. If you become a member, we will recognize your support here on our website, our community forum, and occasionally in other areas like our videos if you choose to make your membership publicly known.
Our membership program is brand new, and we are still exploring other ways that we can share a token of our appreciation with you, while maintaining sustainable and ethical boundaries. Stay tuned!
### How does Privacy Guides use donations?
Privacy Guides has been a nonstop effort for over 5 years to stay up to date with the world of cybersecurity and privacy, and to promote the benefits of privacy overall. This is a **non-profit, community-driven** project that would not be possible without the generous support of all our [contributors](contributors.md), in addition to our regularly donating members above.
Your donation go to a [dedicated fund](https://magicgrants.org/funds/privacy_guides) within [MAGIC Grants](https://magicgrants.org), a 501(c)(3) organization and our fiscal host. The funds will **only** be used for this project specifically.
You may qualify for a tax deduction. When you donate to us [here](https://donate.magicgrants.org/privacyguides) with cryptocurrency or card you have the option to receive a receipt from MAGIC Grants for this purpose. If you have questions about other transactions please email <info@magicgrants.org>.
We use donations for a variety of purposes, including:
**Web Hosting**
: Traffic to this website uses hundreds of gigabytes of data per month, we use a variety of service providers to keep up with this traffic.
**Payroll**
: We are endeavoring to [hire](jobs.md) full-time journalists and writers to review products and create more educational content on a regular basis.
: We have journalists, writers, and video creators on payroll to review products and create more educational content on a regular basis. This is a significant expense, and we are only able to create our quantity of content with your support.
**Domain Registrations**
**Web Hosting and Infrastructure**
: We have a few domain names like `privacyguides.org` which cost us around $10 yearly to maintain their registration.
: Traffic to this website uses hundreds of gigabytes of data per month; we use a variety of service providers to keep up with this traffic.
**Online Services**
@ -46,14 +118,4 @@ We use donations for a variety of purposes, including:
Thank you to all those who support our mission! :material-heart:{ .pg-red }
We strictly **cannot** use donations to support political campaigns/candidates or attempt to influence legislation. Earnings also will **not** inure to the benefit of any private shareholder or individual.
## Merchandise
Another option to support us is by buying our merchandise from HelloTux. We get a small commission for each item sold, and you get a quality product to show for it.
[Buy on HelloTux.com](https://hellotux.com/privacyguides){ class="md-button" }
## Non-Financial Support
It takes a lot of [people](contributors.md) and [work](https://github.com/privacyguides/privacyguides.org/pulse/monthly) to keep Privacy Guides up to date and spread the word about privacy and mass surveillance. If you're looking for other ways to help out, consider getting involved by [editing the site](https://github.com/privacyguides/privacyguides.org), [joining our forum](https://discuss.privacyguides.net), or [contributing translations](https://crowdin.com/project/privacyguides).
We strictly **do not** use donations to support political campaigns/candidates or attempt to influence legislation. Earnings will **not** inure to the benefit of any private shareholder or individual.

View File

@ -0,0 +1,58 @@
---
title: Donation Acceptance Policy
description: Privacy Guides aspires to obtain funding from a wide variety of sources to reduce our dependency on any single donor. Please consider donating!
---
Privacy Guides takes the ethical responsibility of making unbiased recommendations on its website very seriously.
Privacy Guides aspires to obtain funding from a wide variety of sources to reduce our dependency on any single donor. Please consider [donating](donate.md)!
## What we **can** accept
In the course of our regular fundraising activities...
- Donations and other forms of support will generally be accepted from individuals, corporations, foundations, or other entities, without limitations.
- This includes cash, cash equivalents (checks, money orders, credit/debit card payments), and cryptocurrency.
- Gifts of Real Property, Personal Property, or Securities may only be accepted upon approval of the MAGIC Grants board of directors.
Privacy Guides will only accept such gifts that are legal and consistent with our policies. Gifts must not interfere with Privacy Guides' mission, purpose, and procedures.
## Things we do **not** do
- Accept sponsorships.
- Offer to recommend a product or service in exchange for a donation or other incentive.
- Threaten to remove a recommendation for a product or service unless we receive a donation or other incentive.
- Offer to expedite a review of a product or service in exchange for a donation or other incentive.
- Write sponsored content or feature sponsored components in our content.
## Things we **may** do
- Accept donations from privacy-related companies and non-profits.
- Apply for grant programs.
- Accept free versions of software or hardware to test and review, while being mindful of possible differences in versions that could differ from a regular customer experience. ([More details](executive-policy.md#ep1-freely-provided-product-samples))
- Accept discounted versions of software or hardware that assist our operations (for example, discounted software costs made available to non-profits).
## Restrictions on gifts
Privacy Guides accepts unrestricted gifts, and we appreciate the flexibility to apply your gift to our programs where they are most needed.
We also accept and appreciate gifts for specified programs or purposes, provided that such gifts are consistent with our program's stated mission, purpose, and priority. Privacy Guides will not accept gifts which are too restrictive in purpose.
Examples of gifts which are too restrictive include:
- Those which fund the research and review of a specific product category or specific product.
- Those which violate our existing policies.
- Those which are too difficult for us to administer.
- Those that are for purposes outside our general mission.
An example of an acceptable restriction could be a gift towards funding our [video](https://www.privacyguides.org/videos/) production, or hosting our website and forum.
Final decisions on the restrictive nature of a gift and its acceptance or refusal will be made by our executive committee.
## Additional terms
Privacy Guides generally does not pay "finder's fees" or commissions to third parties in connection with any gift to Privacy Guides. We may, however, pay commissions and fees to properly negotiate and receive assets when appropriate.
No officer, committee member, employee, or other agent of Privacy Guides will be compensated in a manner which is dependent on the size or nature of gifts made to Privacy Guides by any person. If we engage with legal, accounting, or other professionals, their fees and expenses will be determined by the time they spend engaged with our work, and not by reference to any particular gift in connection to their retainer.
Privacy Guides always follows the MAGIC Grants Gift Acceptance Policy, available on their website: <https://magicgrants.org/about/documentation/>

View File

@ -1,49 +0,0 @@
---
title: "Privacy Policy"
description: We do not sell or share your data with any third-parties.
---
Privacy Guides is a community project operated by a number of active contributors. The public list of team members [can be found on our forum](https://discuss.privacyguides.net/u?group=team&order=solutions&period=all).
## Data We Collect From Visitors
The privacy of our website visitors is important to us, so we do not track any individual people. As a visitor to our website:
- No personal information is stored
- No information is shared with, sent to or sold to third-parties
- No information is shared with advertising companies
- No information is mined and harvested for personal and behavioral trends
- No information is monetized
You can view the data we collect on our [statistics](statistics.md) page.
We run a self-hosted installation of [Umami](https://umami.is) to collect some anonymous usage data for statistical purposes. The goal is to track overall trends in our website traffic, it is not to track individual visitors. All the data is in aggregate only, and no personal data is stored.
The only data which is collected is data sent in a standard web request, which includes referral sources, the page you're visiting, your user agent, your IP address, and your screen resolution. The raw data is immediately discarded after statistics have been generated, for example if we collect your screen resolution as `1125x2436`, the only data we retain is "mobile device" and not your specific resolution.
## Data We Collect From Account Holders
If you register for an account on one of our services, we may collect any information you provide us (such as your email, password, profile information, etc.) and use that information to provide you with the service. We never share or sell this data.
Some services we host have separate privacy policies which supersede this document. For example, the privacy policy of our forum can be found at [discuss.privacyguides.net/privacy](https://discuss.privacyguides.net/privacy).
## Contacting Us
Even in the limited cases where your data is collected, our volunteers and most members of the Privacy Guides team have no access to that information. Some information (such as your email address) may be accessible to moderators via limited control panels for the purposes of moderating our communities.
Thus, inquiries regarding your personal information should be sent directly to:
```text
Jonah Aragon
Services Administrator
jonah@privacyguides.org
```
For all other inquiries, you can contact any member of our team.
For complaints under GDPR more generally, you always have the option to lodge complaints with your local data protection supervisory authorities.
## About This Policy
We will post any new versions of this statement [here](privacy-policy.md). We may change how we announce changes in future versions of this document. In the meantime we may update our contact information at any time without announcing a change. Please refer to the [Privacy Policy](privacy-policy.md) for the latest contact information at any time.
A full revision [history](https://github.com/privacyguides/privacyguides.org/commits/main/docs/about/privacy-policy.md) of this page can be found on GitHub.

View File

@ -121,6 +121,6 @@ The [F-Droid](https://f-droid.org/en/packages) and [IzzyOnDroid](https://apt.izz
<div class="admonition note" markdown>
<p class="admonition-title">F-Droid Basic</p>
In some rare cases, the developer of an app will only distribute it through F-Droid ([Gadgetbridge](https://gadgetbridge.org) is one example of this). If you really need an app like that, we recommend using the newer [F-Droid Basic](https://f-droid.org/en/packages/org.fdroid.basic) client instead of the original F-Droid app to obtain it. F-Droid Basic supports automatic background updates without privileged extension or root, and has a reduced feature set (limiting attack surface).
In some rare cases, the developer of an app will only distribute it through F-Droid ([Gadgetbridge](../health-and-wellness.md#gadgetbridge) is one example of this). If you really need an app like that, we recommend using the newer [F-Droid Basic](https://f-droid.org/en/packages/org.fdroid.basic) client instead of the original F-Droid app to obtain it. F-Droid Basic supports automatic background updates without privileged extension or root, and has a reduced feature set (limiting attack surface).
</div>

View File

@ -108,7 +108,9 @@ This is required to prevent advanced forms of tracking, but does come at the cos
### Mullvad Leta
Mullvad Browser comes with DuckDuckGo set as the default [search engine](search-engines.md), but it also comes pre-installed with **Mullvad Leta**, a search engine which requires an active Mullvad VPN subscription to access. Mullvad Leta queries Google's paid search API directly, which is why it is limited to paying subscribers. However, it is possible for Mullvad to correlate search queries and Mullvad VPN accounts because of this limitation. For this reason we discourage the use of Mullvad Leta, even though Mullvad collects very little information about their VPN subscribers.
Mullvad Browser comes with [**Mullvad Leta**](https://leta.mullvad.net) as the default search engine, which functions as a proxy to either Google or Brave search results (configurable on the Mullvad Leta homepage).
If you are a Mullvad VPN user, there is some risk in using services like Mullvad Leta which are offered by your VPN provider themselves. This is because Mullvad theoretically has access to your true IP address (via their VPN) and your search activity (via Leta), which is information a VPN is typically intended to separate. Even though Mullvad collects very little information about their VPN subscribers or Leta users, you should consider a different [search engine](search-engines.md) if this risk concerns you.
## Firefox

View File

@ -57,6 +57,7 @@ ffsend upload --host https://send.vis.ee/ FILE
- [:fontawesome-brands-windows: Windows](https://onionshare.org/#download)
- [:simple-apple: macOS](https://onionshare.org/#download)
- [:simple-linux: Linux](https://onionshare.org/#download)
- [:simple-flathub: Flathub](https://flathub.org/apps/org.onionshare.OnionShare)
</details>

169
docs/health-and-wellness.md Normal file
View File

@ -0,0 +1,169 @@
---
meta_title: "Privacy Respecting Health and Wellness apps for Android and iOS - Privacy Guides"
title: "Health and Wellness Apps"
icon: material/heart-pulse
description: These applications are what we currently recommend for all health and fitness-related activites on your phone.
cover: health-cover.webp
---
<small>Protects against the following threat(s):</small>
- [:material-server-network: Service Providers](basics/common-threats.md#privacy-from-service-providers){ .pg-teal }
Keep track of your health and fitness-related goals with these apps. Unlike their mainstream alternatives, your personal health information will be kept private.
## Menstrual Cycle Tracking
Popular menstrual trackers like [Flo](https://techcrunch.com/2021/01/13/flo-gets-ftc-slap-for-sharing-user-data-when-it-promised-privacy) are notorious for collecting and sharing your user data. Depending on your jurisdiction, this may lead to [legal consequences](https://forbes.com/sites/abigaildubiniecki/2024/11/14/post-roe-your-period-app-data-could-be-used-against-you) affecting your reproductive autonomy.
### drip.
<div class="admonition recommendation" markdown>
![drip logo](assets/img/health-and-wellness/drip.png){ align=right }
**drip.** is a gender-inclusive and open source menstrual cycle tracker available on all mobile platforms. It relies on the "sympto-thermal method" to predict ovulation. All user data is stored locally on your device and can be protected with a password.
[:octicons-home-16: Homepage](https://bloodyhealth.gitlab.io){ .md-button .md-button--primary }
[:octicons-eye-16:](https://bloodyhealth.gitlab.io/privacy-policy.html){ .card-link title="Privacy Policy" }
[:octicons-info-16:](https://bloodyhealth.gitlab.io/faq){ .card-link title="Documentation" }
[:octicons-code-16:](https://gitlab.com/bloodyhealth/drip){ .card-link title="Source Code" }
<details class="downloads" markdown>
<summary>Downloads</summary>
- [:simple-googleplay: Google Play](https://play.google.com/store/apps/details?id=com.drip)
- [:simple-appstore: App Store](https://apps.apple.com/us/app/drip/id1584564949)
- [:simple-android: Android](https://bloodyhealth.gitlab.io)
</details>
</div>
### Euki
<div class="admonition recommendation" markdown>
![Euki logo](assets/img/health-and-wellness/euki.svg){ align=right }
**Euki** is a nonprofit-backed menstrual cycle tracker that also doubles as a medication tracker and sexual wellness knowledge base. It allows you to schedule the automatic deletion of your personal data in the app. All user data is stored locally on your device and can be protected with a password.
[:octicons-home-16: Homepage](https://eukiapp.org){ .md-button .md-button--primary }
[:octicons-eye-16:](https://eukiapp.org/privacy-policy){ .card-link title="Privacy Policy" }
[:octicons-code-16:](https://github.com/Euki-Inc/Euki-Android){ .card-link title="Source Code" }
[:octicons-heart-16:](https://every.org/euki-app){ .card-link title="Contribute" }
<details class="downloads" markdown>
<summary>Downloads</summary>
- [:simple-googleplay: Google Play](https://play.google.com/store/apps/details?id=com.kollectivemobile.euki)
- [:simple-appstore: App Store](https://apps.apple.com/app/euki/id1469213846)
</details>
</div>
## Fitness Trackers
These general purpose apps can do everything from counting steps and tracking sleep to measuring your heartbeat.
### Apple Health
<div class="admonition recommendation" markdown>
![Apple logo](assets/img/health-and-wellness/apple-health.svg#only-light){ align=right }![Apple logo](assets/img/health-and-wellness/apple-health-dark.svg#only-dark){ align=right }
**Apple Health** is the default health and fitness app for iOS. Apple Health always uses end-to-end encryption when syncing across multiple devices. Additionally, almost all measured data is processed on your device.
[:octicons-home-16: Homepage](https://apple.com/health){ .md-button .md-button--primary }
[:octicons-eye-16:](https://apple.com/legal/privacy/consumer-health-personal-data/en-ww){ .card-link title="Privacy Policy" }
<details class="downloads" markdown>
<summary>Downloads</summary>
- [:simple-appstore: App Store](https://apps.apple.com/app/apple-health/id1242545199)
</details>
</div>
### Gadgetbridge
<div class="admonition recommendation" markdown>
![Gadgetbridge logo](assets/img/health-and-wellness/gadgetbridge.svg#only-light){ align=right }![Gadgetbridge logo](assets/img/health-and-wellness/gadgetbridge-dark.svg#only-dark){ align=right }
**Gadgetbridge** is an open-source Android application which allows you to pair and manage your Bluetooth device without relying on the vendors application. When paired with a compatible smartwatch, it can mimic the health and wellness functionality of these watches without third-party data collection.
[:octicons-home-16: Homepage](https://gadgetbridge.org){ .md-button .md-button--primary }
[:octicons-info-16:](https://gadgetbridge.org/basics){ .card-link title="Documentation" }
[:octicons-code-16:](https://codeberg.org/Freeyourgadget/Gadgetbridge){ .card-link title="Source Code" }
[:octicons-heart-16:](https://liberapay.com/Gadgetbridge/donate){ .card-link title="Contribute" }
<details class="downloads" markdown>
<summary>Downloads</summary>
- [:simple-android: F-Droid](https://f-droid.org/packages/nodomain.freeyourgadget.gadgetbridge)
</details>
</div>
Gadgetbridge's app functionality includes, but is not limited to: step counting, sleep tracking, heart rate monitoring, etc.
Make sure to review the smartwatch [compatibility list](https://gadgetbridge.org/gadgets) before purchasing a device. Some devices require you to download the vendor's app and connect the smartwatch to their servers prior to installing Gadgetbridge.
## Health Records
These apps help you collect and manage personal health data and share it with health providers, organizations, and other apps.
### Apple Health Records
<div class="admonition recommendation" markdown>
![Apple logo](assets/img/health-and-wellness/apple-health.svg#only-light){ align=right }![Apple logo](assets/img/health-and-wellness/apple-health-dark.svg#only-dark){ align=right }
**Apple Health Records** is a built-in feature within [Apple Health](#apple-health) that allows you to view, store, and share your health records. It shares the security and privacy features of Apple Health.
[:octicons-home-16: Homepage](https://apple.com/health){ .md-button .md-button--primary }
[:octicons-eye-16:](https://apple.com/legal/privacy/consumer-health-personal-data/en-ww){ .card-link title="Privacy Policy" }
<details class="downloads" markdown>
<summary>Downloads</summary>
- [:simple-appstore: App Store](https://apps.apple.com/app/apple-health/id1242545199)
</details>
</div>
### CommonHealth
<div class="admonition recommendation" markdown>
![CommonHealth logo](assets/img/health-and-wellness/commonhealth.png){ align=right }
**CommonHealth** is a privacy-respecting Android app that allows people to access their electronic health records and securely share it to providers. All health data is stored on your device and can be protected with a passcode or biometric authentication.
[:octicons-home-16: Homepage](https://commonhealth.org){ .md-button .md-button--primary }
[:octicons-eye-16:](https://commonhealth.org/privacy){ .card-link title="Privacy Policy" }
<details class="downloads" markdown>
<summary>Downloads</summary>
- [:simple-googleplay: Google Play](https://play.google.com/store/apps/details?id=org.thecommonsproject.android.phr)
</details>
</div>
CommonHealth is only available in the United States. Although the app itself is closed source, the [developer SDK is open source](https://github.com/the-commons-project).
## Criteria
**Please note we are not affiliated with any of the projects we recommend.** In addition to [our standard criteria](about/criteria.md), we have developed a clear set of requirements to allow us to provide objective recommendations. We suggest you familiarize yourself with this list before choosing to use a project, and conduct your own research to ensure it's the right choice for you.
### Minimum Requirements
- Must support automatic updates.
- Must not store unencrypted data outside the device.
- Must function offline.

View File

@ -9,7 +9,7 @@ cover: language-tools.webp
- [:material-server-network: Service Providers](basics/common-threats.md#privacy-from-service-providers){ .pg-teal }
- [:material-account-cash: Surveillance Capitalism](basics/common-threats.md#surveillance-as-a-business-model){ .pg-brown }
Text inputted to grammar, spelling, and style checkers, as well as translation services, can contain sensitive information which may be stored on their servers for an indefinite amount of time and sold to third parties. The language tools listed on this page do not send your submitted text to a server, and can be self-hosted and used offline for maximum control of your data.
Text inputted to grammar, spelling, and style checkers, as well as translation services, can contain sensitive information which may be stored on their servers for an indefinite amount of time and sold to third parties. The language tools listed on this page do not store your submitted text to a server, and can be self-hosted and used offline for maximum control of your data.
## LanguageTool
@ -18,7 +18,7 @@ Text inputted to grammar, spelling, and style checkers, as well as translation s
![LanguageTool logo](assets/img/language-tools/languagetool.svg#only-light){ align=right }
![LanguageTool logo](assets/img/language-tools/languagetool-dark.svg#only-dark){ align=right }
**LanguageTool** is a multilingual grammar, style and spell checker that supports more than 20 languages. According to their privacy policy, they do not store any content sent to their service for review, but for higher assurance the software is [self-hostable](https://dev.languagetool.org/http-server).
**LanguageTool** is a multilingual grammar, style, and spell checker that supports more than 20 languages. According to their privacy policy, they do not store any content sent to their service for review, but for higher assurance the software is [self-hostable](https://dev.languagetool.org/http-server).
[:octicons-home-16: Homepage](https://languagetool.org){ .md-button .md-button--primary }
[:octicons-eye-16:](https://languagetool.org/legal/privacy){ .card-link title="Privacy Policy" }

88
docs/maps.md Normal file
View File

@ -0,0 +1,88 @@
---
meta_title: "Recommended Maps and Navigation Apps - Privacy Guides"
title: "Maps and Navigation"
icon: material/map
description: Privacy-respecting map providers and navigation apps which don't build an advertising profile based on your searches and locations.
cover: maps.webp
---
<small>Protects against the following threat(s):</small>
- [:material-account-cash: Surveillance Capitalism](basics/common-threats.md#surveillance-as-a-business-model){ .pg-brown }
Use a **map and navigation app** that doesn't build an advertising profile based on your searches and location history. Instead of using Google Maps, Apple Maps, or Waze, we recommend these privacy-respecting alternatives.
The recommendations here either do not collect any user data or at least do not collect personally identifying information (PII) based on each service's privacy policy. There is **no guarantee** that these privacy policies are honored.
## Organic Maps
<div class="admonition recommendation" markdown>
![Organic Maps logo](assets/img/maps/organic-maps.svg){ align=right }
**Organic Maps** is an open source, community-developed map display and satnav-style navigation app for walkers, drivers, and cyclists. The app offers worldwide offline maps based on OpenStreetMap data, and navigation with privacy — no location tracking, no data collection, and no ads. The app can be used completely offline.
Features include cycling routes, hiking trails and walking paths, turn-by-turn navigation with voice guidance, and public transport route planning (only available in supported regions and cities).
[:octicons-home-16: Homepage](https://organicmaps.app){ .md-button .md-button--primary }
[:octicons-eye-16:](https://organicmaps.app/privacy){ .card-link title="Privacy Policy" }
[:octicons-code-16:](https://github.com/organicmaps/organicmaps){ .card-link title="Source Code" }
<details class="downloads" markdown>
<summary>Downloads</summary>
- [:simple-github: GitHub](https://github.com/organicmaps/organicmaps)
- [:simple-googleplay: Google Play](https://play.google.com/store/apps/details?id=app.organicmaps)
- [:simple-appstore: App Store](https://apps.apple.com/app/organic-maps/id1567437057)
- [:simple-linux: Linux](https://flathub.org/apps/app.organicmaps.desktop)
</details>
</div>
Please note that Organic Maps is a simple, basic app that lacks certain features many users might expect, such as satellite images, street view images, and real-time traffic information.
## OsmAnd
<div class="admonition recommendation" markdown>
![OsmAnd logo](assets/img/maps/osmand.svg){ align=right }
**OsmAnd** is an offline map and navigation application based on OpenStreetMap, offering turn-by-turn navigation for walking, cycling, driving, as well as public transport. It is open-source and does not collect any user data.
[:octicons-home-16: Homepage](https://osmand.net){ .md-button .md-button--primary }
[:octicons-eye-16:](https://osmand.net/docs/legal/privacy-policy){ .card-link title="Privacy Policy" }
[:octicons-info-16:](https://osmand.net/docs/intro){ .card-link title="Documentation" }
[:octicons-code-16:](https://github.com/osmandapp){ .card-link title="Source Code" }
<details class="downloads" markdown>
<summary>Downloads</summary>
- [:simple-googleplay: Google Play](https://play.google.com/store/apps/details?id=net.osmand)
- [:simple-android: Android](https://osmand.net/docs/versions/free-versions)
- [:simple-appstore: App Store](https://apps.apple.com/us/app/osmand-maps-travel-navigate/id934850257)
</details>
</div>
Compared to Organic Maps, OsmAnd has more [features](https://wiki.openstreetmap.org/wiki/OsmAnd#Features) but is also more complicated to use. One noteworthy feature is the ability to overlay or underlay external map data, such as satellite images from Microsoft or [traffic data](https://web.archive.org/web/20211203063453/http://themm.net/public/osmand_traffic) from Google, although the latter is ignored by the automatic route planning. OsmAnd also has an optional integration of street view images provided by [Mapillary](https://mapillary.com).
## Criteria
**Please note we are not affiliated with any of the projects we recommend.** In addition to [our standard criteria](about/criteria.md), we have developed a clear set of requirements to allow us to provide objective recommendations. We suggest you familiarize yourself with this list before choosing to use a project, and conduct your own research to ensure it's the right choice for you.
### Minimum Requirements
- Must not collect PII per their privacy policy.
- Must not require users to create an account with them.
- Must not require users to share location data. If the user opts in to sharing their location, this data must be anonymized.
- Must retain core functionality when offline and allow users to download maps for offline use.
### Best-Case
Our best-case criteria represents what we would like to see from the perfect project in this category. Our recommendations may not include any or all of this functionality, but those which do may rank higher than others on this page.
- Apps should be open source.
- Should have route planning for public transport.
- Should have real-time traffic information for route planning.
- Should support advanced features such as detailed shop/point of interest (POI) information and reviews, topographic maps, and satellite and street view images.

View File

@ -25,6 +25,22 @@ cover: pastebins.webp
</div>
## Paaster
<div class="admonition recommendation" markdown>
![Paaster logo](assets/img/pastebins/paaster.svg){ align=right }
**Paaster** is a secure and user-friendly pastebin application that prioritizes privacy and simplicity. With end-to-end encryption and paste history, Paaster ensures that your pasted code remains confidential and accessible.
[:octicons-home-16: Homepage](https://paaster.io){ .md-button .md-button--primary }
[:octicons-eye-16:](https://paaster.io/privacy-policy){ .card-link title="Privacy Policy" }
[:octicons-info-16:](https://github.com/WardPearce/paaster#security){ .card-link title="Documentation" }
[:octicons-code-16:](https://github.com/WardPearce/paaster){ .card-link title="Source Code" }
[:octicons-heart-16:](https://github.com/sponsors/WardPearce){ .card-link title="Contribute" }
</div>
## Criteria
**Please note we are not affiliated with any of the projects we recommend.** In addition to [our standard criteria](about/criteria.md), we have developed a clear set of requirements to allow us to provide objective recommendations. We suggest you familiarize yourself with this list before choosing to use a project, and conduct your own research to ensure it's the right choice for you.

324
docs/privacy.md Normal file
View File

@ -0,0 +1,324 @@
---
title: "Privacy Policy"
description: We do not sell or share your data with any third-parties.
---
## What is Privacy Guides?
Privacy Guides is a community project operated by a number of active contributors. The public list of team members [can be found on our forum](https://discuss.privacyguides.net/u?group=team&order=solutions&period=all). Privacy Guides is legally administered by [MAGIC Grants](https://magicgrants.org/), a 501(c)(3) public charity acting as our fiscal host.
As a project, we make available to the public:
- [privacyguides.org](https://www.privacyguides.org), this website
- [discuss.privacyguides.net](https://discuss.privacyguides.net), our community forum
- [code.privacyguides.dev](https://code.privacyguides.dev), public source code repositories
This privacy notice covers all Privacy Guides projects authorized and operated by the MAGIC Privacy Guides Fund executive committee.
Please note that when you make a donation to us on [donate.magicgrants.org](https://donate.magicgrants.org/privacyguides), MAGIC Grants has published a [separate privacy policy](https://donate.magicgrants.org/privacy) covering that platform.
## How does Privacy Guides collect data about me?
Privacy Guides collects data about you:
- When you visit our websites
- When you create and use an account on our websites
- When you post, send private messages, and otherwise participate in a community that Privacy Guides hosts
- When you sign up for a mailing list, email notifications, or announcements
- When you make a donation to us on GitHub Sponsors
- When you become a donating member and link your MAGIC Grants account to your Privacy Guides forum account
- When you contribute to our website or other open-source projects
- When you contact us
Privacy Guides does not buy or receive data about you from data brokers.
## Does Privacy Guides sell my personal information?
No. Privacy Guides does not sell personal information. Additionally, Privacy Guides does not share personal information with third parties for the purpose of advertising.
## What personal information does Privacy Guides collect, and why?
### Privacy Guides collects information about visits to its websites
When you visit one of our websites, whether you have an account or not, we use server logs and other methods to collect data about what pages you visit and when.
We use this data to:
- Optimize our websites, so they are quick and easy to use.
- Diagnose and debug technical errors.
- Defend our websites from abuse and technical attacks.
- Compile statistics on page/topic popularity.
- Compile statistics on the type of browser and devices our visitors use.
We generally store the above information for just a few weeks. In special circumstances, such as during an ongoing technical attack or a subsequent investigation, we may preserve some log data longer for analysis.
Privacy Guides stores aggregated statistics for as long as we host our websites, but those statistics do not contain data identifiable to you personally.
### Privacy Guides collects account data
Many features on our forum or other account-based services require an account. For example, you are required to have an account in order to post and reply to topics.
To sign up for an account, Privacy Guides requires your email address, a username, and a password.
We use this account data in order to identify you on the website, and to create pages specific to you, such as your profile page. We publish your account data to your public profile in accordance to your profile's configuration.
Privacy Guides uses your email address to:
- Notify you about posts and other activity on our website.
- Reset your password and help keep your account secure.
- Contact you in special circumstances related to your account.
- Contact you about legal requests, like DMCA takedown requests.
You may optionally provide additional details about your account, like your name, a short biography, your location, or your birthday, on the profile settings page for your account. Privacy Guides makes that information available to others who have access to the forum. You dont have to provide this additional information, and you can erase it at any time.
Privacy Guides stores this account data as long as your account remains open.
### Privacy Guides collects data about posts and other activity on our forum
Privacy Guides collects the content of your posts, plus data about bookmarks, likes, and links you follow in order to share that data with others, through the forum. We also publish this activity to the public.
Privacy Guides also collects data about private messages that you send through the forum. Privacy Guides makes private messages available to senders and their recipients, and also to forum moderators and administrators.
Privacy Guides stores your posts and other activity as long as your account remains open.
### Privacy Guides collects data you give to sign up for mailing lists and announcements
When you fill out and submit a web form to sign up for mailing lists or announcements, Privacy Guides collects the information you put in the form, such as your e-mail address.
Privacy Guides stores this information until you unsubscribe from the mailing list.
### Privacy Guides does not collect sensitive personal information
Privacy Guides does not intentionally collect sensitive personal information, such as government identification numbers, information on racial or ethnic origin, political opinions, genetic data, biometric data, health data, or any of the special categories of personal data specified by the GDPR.
### Privacy Guides collects data about open source contributors
Contributors to Privacy Guides' website may be asked to provide identifying and contact information such as your name and email address.
Privacy Guides uses this information to maintain the integrity of our website, software, and license agreements, both our own licenses and the license between Privacy Guides and our contributors. Privacy Guides stores this information for as long as your contributions are incorporated into our open source software, including this website.
### Privacy Guides collects data when you donate to us
When you donate to us on GitHub Sponsors, we collect your GitHub username and profile picture. Your payment information is also collected by our subprocessors GitHub and Stripe in order to facilitate the transaction.
If you choose to make your donation public during or after the checkout process on GitHub, Privacy Guides will share your username and profile picture on our websites for the purposes of fulfilling your request. You may revoke this consent at any time, and we will no longer share your donation status publicly. It may take until the next website release for your data to be removed from public visibility.
When you donate to us on [donate.magicgrants.org](https://donate.magicgrants.org/privacyguides), a [separate privacy policy](https://donate.magicgrants.org/privacy) applies as noted at the beginning of this document.
However, if you optionally link your `donate.magicgrants.org` account to your Privacy Guides forum account, our forum collects some personal data which is covered by this notice: namely your forum username and whether you have an active membership.
We process that information in order to grant you special perks on the forum. Additionally, if you choose to make this status public by setting a members-only title or flair, we will share the status of your active membership on our websites.
This information is stored for as long as your membership is active, or until you unlink your forum and MAGIC Grants donation accounts in your profile settings. It may take until the next website release for your data to be fully removed from public visibility.
### Privacy Guides collects data when you contact us
When you contact Privacy Guides via email, Signal, or any of our other contact methods, we collect the information you submit to us, and any identifying information associated with the account you use to contact us. For example, when you contact us via Signal we will collect your Signal profile information. When you contact us via email we will collect your email address, name, and mail server IP address.
In this case we limit the processing of any personal data you provide us to what is strictly necessary to communicate with you and organize our messages.
Privacy Guides stores this data for as long as we are in contact with you, or for up to 1 year after your last contact with us. You have the right to request all data related to your private communication with us be deleted at any time, and we will generally do so within 7 days.
### The Privacy Guides website stores local data
Our website uses Local Storage in your browser to store your color scheme preference. This data is only used by client-side JavaScript to change the color scheme of this website according to your preference.
Our website also uses Session Storage to cache the current version number of this website and the number of stars/forks of our GitHub repository. This data is fetched once per session from GitHub, and is only used by client-side JavaScript to display that information at the top of each page.
No locally stored data on this website is transmitted to Privacy Guides, and it can not be used to identify you.
### The Privacy Guides forum uses cookies
Our forum is built on Discourse, which uses the following cookies:
| Name | Essential | Expires | Purpose |
| ------------------- | --------- | -------------- | ------------------------------------------------------------------------------------------------------ |
| email | Yes | Session | remembers your e-mail as you create an account |
| destination_url | Yes | Session | helps redirect you to your requested page after logging in |
| sso_destination_url | Yes | Session | helps redirect you to your request page after single sign on |
| sso_payload | Yes | Session | used during SSO authentication when two-factor authentication is enabled |
| authentication_data | Yes | Next Page View | temporarily stores user information during login flows |
| theme_ids | Yes | 1 year | remembers your theme personalization if you dont tick “Make this my default theme on all my devices” |
| color_scheme_id | Yes | 1 year | remembers your color personalization if you dont tick “Set default color scheme(s) on all my devices” |
| dark_scheme_id | Yes | 1 year | remembers your color personalization if you dont tick “Set default color scheme(s) on all my devices” |
| cn | Yes | Session | temporarily stores notification read state |
| _bypass_cache | Yes | Session | allows the server-side cache to be bypassed during login flows |
| _t | Yes | 1440 Hours | remembers who you are when you log in |
| _forum_session | Yes | Session | associates an ID, and other security-related information, with your browsing session |
| dosp | Yes | Next Page View | enables client denial of service protection, a security protection |
| text_size | Yes | 1 year | remembers default text size when a user wants to change it on only one device |
| cookietest | Yes | Session | checks if cookies are enabled when authentication fails |
| __profilin | No | Session | used by software developers to bypass rack-mini-profiler |
Your web browser can show you the cookies you have for any website and help you manage them.
### Privacy Guides makes regular backups of all data
Privacy Guides keeps automated backups of **all** data it collects. These backups are stored for up to 30 days. Any time you delete personal data from our websites, a copy may be retained in backup archives until those archives are pruned.
## Does Privacy Guides use personal information for marketing purposes?
Privacy Guides may use personal data about our users in order to directly promote our own resources, such as for sharing new resources or when fundraising. We also use the information you give us when signing up for our mailing lists and announcements to send those messages.
You can always opt out of marketing communications from us, and you have the right to object to any processing of your information for marketing purposes.
Privacy Guides never provides or sells your data to third-parties for marketing purposes.
## How can I make choices about data collection?
Your account on our websites has a settings page which provides you with options about how your data is used.
Most web browsers let you make choices about whether to accept cookies, for specific websites or more generally.
Privacy Guides does not respond to the (now deprecated) [Do Not Track HTTP header](https://en.wikipedia.org/wiki/Do_Not_Track).
## Where does Privacy Guides store data about me?
Most data is hosted by [Triplebit](https://www.triplebit.org/) web services in the United States.
Some publicly accessible data may be hosted by Content Delivery Networks with servers in other jurisdictions. For example, your profile picture may be stored on multiple servers around the world in order to improve the performance for visitors to our website.
## Does Privacy Guides comply with the EU General Data Protection Regulation?
Privacy Guides respects rights under the European Unions General Data Protection Regulation (GDPR). Information that GDPR requires Privacy Guides to give can be found throughout this privacy notice, including information on the rights of data subjects.
### What are my rights under the GDPR?
The GDPR provides you with the following rights with respect to personal information about you that we collect or process:
- the right to [access](#where-can-i-access-data-about-me) your personal data
- the right to [rectification](#how-can-i-change-or-erase-data-about-me) of inaccurate or incomplete personal data
- the right to [erasure](#how-can-i-change-or-erase-data-about-me) of your personal data
- the right to [data portability](#where-can-i-access-data-about-me)
- the right to restrict the processing of your personal data
- the right to object to certain processing of your information, including [automated decision-making](#does-privacy-guides-make-automated-decisions-based-on-my-data) and [direct marketing](#does-privacy-guides-use-personal-information-for-marketing-purposes)
- the right to lodge a complaint with a supervisory authority
Information about how to exercise these rights is provided throughout this notice and linked above. We try to make exercising all of these rights easy to do on your own through your account settings, but for more complicated inquiries the best option will be to [contact](#how-can-i-contact-privacy-guides-about-privacy) us.
### What is the lawful basis for data collection and processing?
Privacy Guides generally processes your data using 3 of the 6 lawful bases for processing set out in Article 6 of the GDPR:
- **Consent**: When you give us clear consent for us to process your personal data. This consent can be easily withdrawn at any time in your account settings, or you may always contact us for assistance with privacy-related matters.
- **Contract**: When you give us your personal data in order to participate on services we operate according to our terms of service, or when we require personal data in order to take steps prior to entering a contract or to fulfill a contract.
- **Legitimate interest**: When we process your personal data for fraud prevention, network and information security, or other reasons where the processing is required for our own legitimate interests or for those of a third party we work with.
The lawful basis for our processing determines what rights are available to you under the GDPR. This table may be used as a reference:
| Activity | Data Collected | Lawful Basis | Explanation |
| -------- | -------------- | ------------ | ----------- |
| [Website visits](#privacy-guides-collects-information-about-visits-to-its-websites) | IP Address, User Agent, Pages Visited | **Legitimate interest** | Required for defending our website from abuse and technical attacks, diagnosing and debugging technical errors, optimizing our websites, and compiling aggregated non-personal statistics for long-term analysis |
| [Account data](#privacy-guides-collects-account-data) | Email Address, IP Address | **Legitimate interest** | Required to defend our website against spam and abuse |
| [Account data](#privacy-guides-collects-account-data) | Email Address, Username, Password | **Contract** | Required to make our services available to you according to our terms of service |
| [Account data](#privacy-guides-collects-account-data) | Optional profile information (name, location, etc.) | **Consent** | Required to publish the information you provide to your public or internal profile, according to your preferences |
| [Posts & activity](#privacy-guides-collects-data-about-posts-and-other-activity-on-our-forum) | Content of your posts, activity data like bookmarks, likes, and links you follow | **Contract** | Required to make our services available to you according to our terms of service |
| [Posts & activity](#privacy-guides-collects-data-about-posts-and-other-activity-on-our-forum) | Content of your private messages | **Contract** | Required to make our services available to you according to our terms of service |
| [Posts & activity](#privacy-guides-collects-data-about-posts-and-other-activity-on-our-forum) | Email Address | **Contract** | Our forum is an email-based platform, and email notifications about forum activity are an integral component required to make our services available to you according to our terms of service |
| [Mailing lists](#privacy-guides-collects-data-you-give-to-sign-up-for-mailing-lists-and-announcements) | Email Address | **Consent** | Required for sending you messages you subscribe to |
| [Open source contributions](#privacy-guides-collects-data-about-open-source-contributors) | Email address, name, GitHub profile information, other information provided via Git | **Legitimate interest** | We have a legitimate interest in tracking the provenance of contributions to our open source projects to prevent abuse and ensure intellectual property rights are respected |
| [Donations](#privacy-guides-collects-data-when-you-donate-to-us) | Payment information including billing address and email, GitHub profile information | **Legitimate interest** | We have a legitimate interest in processing this data to prevent payment abuse and fraud, and for facilitating your transaction |
| [Donations](#privacy-guides-collects-data-when-you-donate-to-us) | GitHub profile information | **Consent** | We process this information to display your donation status publicly in accordance to your wishes |
| [Donations](#privacy-guides-collects-data-when-you-donate-to-us) | Forum username and membership status | **Consent** | When you link your forum account to your MAGIC Grants donation account, you can optionally display your membership status to the public |
| [Contacting us](#privacy-guides-collects-data-when-you-contact-us) | Email address, mail server IP, message content | **Legitimate interest** | We have a legitimate interest in processing incoming email information to prevent spam and network abuse |
| [Contacting us](#privacy-guides-collects-data-when-you-contact-us) | Email address, message headers and content | **Contract** | We store your messages and process your data in order to provide a response to your communication |
| [Backups](#privacy-guides-makes-regular-backups-of-all-data) | All personal information we collect | **Legitimate interest** | We store complete backups to ensure organizational continuity and security for up to 30 days |
### Does Privacy Guides make international data transfers?
Currently:
- Privacy Guides [processes personal data on servers outside the European Union](#where-does-privacy-guides-store-data-about-me).
- Privacy Guides uses [subprocessors](#subprocessors-used-by-privacy-guides) with personnel and computers outside the European Union.
- Privacy Guides has [personnel](https://discuss.privacyguides.net/u?group=team&order=solutions&period=all) in the United States, Australia, and other non-EU countries without EU adequacy decisions under GDPR. These people need access to forum personal data in order to keep forums running, address security concerns, respond to privacy-related requests from users, field technical support requests, and otherwise assist users.
- Privacy Guides is very likely subject to section 702 of the Foreign Intelligence Surveillance Act in the United States, a law that the European Court of Justice has found inadequately protects the rights and freedoms of data subjects.
- Privacy Guides has never received any order or request for personal data under FISA 702 or any similar national security or surveillance law of any other country. Privacy Guides is not subject to any court order or legal obligation that would prevent it from disclosing the existence or non-existence of such an order or request.
- Privacy Guides has a policy for how we will respond to those orders and requests, in case we ever receive one. Privacy Guides will suspend processing, notify any affected user, minimize disclosure, and resist disclosure of personal data, all as the law allows.
Because national security and surveillance laws may be in conflict with European data protection rules, Privacy Guides continually reassesses the practical reach of these laws to ensure our data transfers are adequately safeguarded.
## Does Privacy Guides comply with the California Consumer Privacy Act and other US state comprehensive privacy laws?
Privacy Guides is not a "business" for the purposes of the California Consumer Privacy Act (CCPA) or a “controller” directly subject to other US state comprehensive privacy laws.
Privacy Guides **never** sells your personal information.
## Where can I access data about me?
You can see your account data by visiting your profile page on any websites where we offer accounts. Your account profile will also list your posts and other activity on the website.
On the forum, your [profile settings](https://discuss.privacyguides.net/my/preferences/account) include a link to download all of your activity in standard Comma Separated Values format.
If you do not have an account with us but have a data access request, please [contact us](about.md).
## How can I change or erase data about me?
You can change your account data at any time by visiting the profile settings page for your account. You also have the option to delete your profile on the settings page of your account. Utilizing this option begins the process of erasing or anonymizing Privacy Guides' records of data you provided for your account. Forum administrators and moderators also have the option to erase and anonymize accounts.
You may also be able to edit, anonymize, or erase your posts. When you edit posts, Privacy Guides will keep all versions of your posts. These old versions of posts are not public, but may be accessed by forum moderators or administrators.
## Does Privacy Guides make automated decisions based on my data?
### The Privacy Guides forum classifies posts as spam automatically
We use data about your posts and other posts on many forums to make automated decisions about whether your posts to our websites are likely spam.
If you think a post has been wrongfully blocked or removed, please contact a forum moderator who can override this decision.
### The Privacy Guides forum uses data about your posts and activity to set trust levels
We use data about your posts and activity on our forum to award you badges and calculate a trust level for your account. Your trust level may affect how you can participate in the forum, such as whether you can upload images, as well as give you access to moderation and management powers in the forum. Your trust level therefore reflects forum administrators confidence in you, and their willingness to delegate community management functions, like moderation.
If you think your trust level has been set incorrectly, contact an administrator of your forum. They can manually adjust the trust level of your account.
### The Privacy Guides forum uses community flags to take automated actions
Your posts may be automatically hidden, or your ability to post may be automatically suspended, as a result of your posts being flagged by other users.
These decisions are later reviewed by moderators, who can override these decisions at their discretion.
## Does Privacy Guides share data about me with others?
Privacy Guides shares account data with others as described in [the section about account data](#privacy-guides-collects-account-data).
Privacy Guides shares data about your posts and other activity as described in [the section about forum data](#privacy-guides-collects-data-about-posts-and-other-activity-on-our-forum).
### Subprocessors used by Privacy Guides
Privacy Guides uses the following subprocessors, and may share personal data with the service providers we use in order to host our website, deliver content, secure our services, store data, host and manage our open source website, and provide user support.
| Subprocessor | Service | Function | Processing | Links |
| ------------ | ------- | -------- | ---------- | ----- |
| [Bunny.net](https://bunny.net/) (Slovenia) | [Bunny CDN](https://bunny.net/cdn/) | Content Delivery Network services for distributing images and other static assets. | Slovenia, Global | [Privacy Notice](https://bunny.net/privacy/), [GDPR Center](https://bunny.net/gdpr/) |
| [Cloudflare](https://www.cloudflare.com/) (USA) | [Authoritative DNS](https://www.cloudflare.com/application-services/products/dns/) | Authoritative DNS services for our domain names. | USA, Global | [Privacy Notice](https://www.cloudflare.com/privacypolicy/), [GDPR Center](https://www.cloudflare.com/trust-hub/gdpr/) |
| [Fediverse Communications LLC](https://fediverse.us) (USA) | PeerTube | For hosting public videos produced by Privacy Guides which are shared or embedded on this website. | USA | [More information](https://neat.tube/about/instance) |
| [GitHub](https://github.com/) (USA) | Git Repositories | *For visitors to this website*: sharing information with our visitors about the current release, repo star count, etc. | USA | [Privacy Notice](https://docs.github.com/en/site-policy/privacy-policies/github-general-privacy-statement) |
| [GitHub](https://github.com/) (USA) | Git Repositories, Issues, Pull Requests | *For contributors to this website*: hosting our source code and communications platforms such as our issues tracker. | USA | [Privacy Notice](https://docs.github.com/en/site-policy/privacy-policies/github-general-privacy-statement) |
| [GitHub](https://github.com/) (USA) | [Sponsors](https://github.com/sponsors/privacyguides) | For collecting payments for gifts to Privacy Guides | USA | [Privacy Notice](https://docs.github.com/en/site-policy/privacy-policies/github-general-privacy-statement) |
| [Stripe](https://stripe.com) (USA) | Connect | *For certain donations via GitHub Sponsors*: payment processing for donations | USA | [Privacy Notice](https://stripe.com/privacy), [GDPR Center](https://stripe.com/legal/privacy-center) |
| [Triplebit](https://www.triplebit.org/) (USA) | Object Storage | For hosting static websites and static media content, and distributing static content | USA, Poland | [Privacy Notice](https://www.triplebit.org/privacy/) |
| [Triplebit](https://www.triplebit.org/) (USA) | [Umami Statistics](https://stats.triplebit.net/share/S80jBc50hxr5TquS/www.privacyguides.org) | For compiling aggregated statistics of our website visitor data based on server-side visitor info submissions | USA | [Privacy Notice](https://www.triplebit.org/privacy/) |
| [Triplebit](https://www.triplebit.org/) (USA) | Virtual Private Servers | For hosting our dynamic websites, storing and processing personal data. | USA | [Privacy Notice](https://www.triplebit.org/privacy/) |
## Does Privacy Guides delete inactive accounts?
Privacy Guides deletes accounts that have no public activity when they have gone unused for 3 years. If the account has public activity, we will not delete it regardless of inactivity because your profile data is required to continue to publish your activity per your original request.
You can always request the deletion of your data at any time regardless of this policy.
## How can I contact Privacy Guides about privacy?
You can send questions, requests, and complaints via email to us at <team@privacyguides.org>. You may also use Signal or another contact method detailed [here](about.md#contact-us) to contact us more securely.
For complaints under GDPR more generally, you always have the option to lodge complaints with your local data protection supervisory authorities.
## Where do I find out about changes?
This version of Privacy Guides' privacy notice took effect on March 6, 2025.
Privacy Guides will post the next version here: <https://www.privacyguides.org/en/privacy/>.
In future versions, Privacy Guides may change how it announces changes. In the meantime, Privacy Guides may update its contact information without announcing a change. Please refer to <https://www.privacyguides.org/en/privacy/> for the latest contact information at any time.
A full revision [history](https://github.com/privacyguides/privacyguides.org/commits/main/docs/privacy.md) of this page can be found on GitHub.
In the event that a translated copy of this document conflicts with the English copy, the English copy of this document takes precedence.

View File

@ -168,13 +168,13 @@ If you're looking for added **security**, you should always ensure you're connec
---
- [x] **45+ Countries**
- [x] **49+ Countries**
- [x] WireGuard Support
- [x] Monero & Cash Payments
- [ ] No Port Forwarding
- [x] IPv6 Support
[Read Full Review :material-arrow-right-drop-circle:](vpn.md#ivpn)
[Read Full Review :material-arrow-right-drop-circle:](vpn.md#mullvad)
</div>
@ -481,6 +481,21 @@ For encrypting your OS drive, we typically recommend using the encryption tool y
[Learn more :material-arrow-right-drop-circle:](frontends.md)
### Health and Wellness Apps
<div class="grid cards" markdown>
- ![drip. logo](assets/img/health-and-wellness/drip.png){ .twemoji loading=lazy } [drip.](health-and-wellness.md#drip)
- ![Euki logo](assets/img/health-and-wellness/euki.svg){ .twemoji loading=lazy } [Euki](health-and-wellness.md#euki)
- ![Apple Health logo](assets/img/health-and-wellness/apple-health.svg#only-light){ .twemoji loading=lazy } ![Apple Health logo](assets/img/health-and-wellness/apple-health-dark.svg#only-dark){ .twemoji loading=lazy }[Apple Health](health-and-wellness.md#apple-health)
- ![Gadgetbridge logo](assets/img/health-and-wellness/gadgetbridge.svg#only-light){ .twemoji loading=lazy }![Gadgetbridge logo](assets/img/health-and-wellness/gadgetbridge-dark.svg#only-dark){ .twemoji loading=lazy } [Gadgetbridge](health-and-wellness.md#gadgetbridge)
- ![Apple Health logo](assets/img/health-and-wellness/apple-health.svg#only-light){ .twemoji loading=lazy } ![Apple Health logo](assets/img/health-and-wellness/apple-health-dark.svg#only-dark){ .twemoji loading=lazy }[Apple Health Records](health-and-wellness.md#apple-health-records)
- ![CommonHealth logo](assets/img/health-and-wellness/commonhealth.png){ .twemoji loading=lazy } [CommonHealth](health-and-wellness.md#commonhealth)
</div>
[Learn more :material-arrow-right-drop-circle:](health-and-wellness.md)
### Language Tools
<div class="grid cards" markdown>
@ -491,6 +506,17 @@ For encrypting your OS drive, we typically recommend using the encryption tool y
[Learn more :material-arrow-right-drop-circle:](language-tools.md)
### Maps and Navigation Apps
<div class="grid cards" markdown>
- ![Organic Maps logo](assets/img/maps/organic-maps.svg){ .twemoji loading=lazy } [Organic Maps](maps.md#organic-maps)
- ![OsmAnd logo](assets/img/maps/osmand.svg){ .twemoji loading=lazy } [OsmAnd](maps.md#osmand)
</div>
[Learn more :material-arrow-right-drop-circle:](maps.md)
### Multi-Factor Authentication Tools
**Note:** [Hardware security keys](#security-keys) have been moved to their own category.
@ -566,6 +592,7 @@ For encrypting your OS drive, we typically recommend using the encryption tool y
<div class="grid cards" markdown>
- ![PrivateBin logo](assets/img/pastebins/privatebin.svg){ .twemoji loading=lazy } [PrivateBin](pastebins.md#privatebin)
- ![Paaster logo](assets/img/pastebins/paaster.svg){ .twemoji loading=lazy } [Paaster](pastebins.md#paaster)
</div>

View File

@ -121,13 +121,15 @@ All versions are signed using the same signature, so they should be compatible w
</div>
On iOS, Orbot has some limitations that could potentially cause crashes or leaks: iOS does not have an effective OS-level feature to block connections without a VPN like Android does, and iOS has an artificial memory limit for network extensions that makes it challenging to run Tor in Orbot without crashes. Currently, it is always safer to use Tor on a desktop computer compared to a mobile device.
## Onion Browser (iOS)
<div class="admonition recommendation" markdown>
![Onion Browser logo](assets/img/self-contained-networks/onion_browser.svg){ align=right }
**Onion Browser** is an open-source browser that lets you browse the web anonymously over the Tor network on iOS devices and is endorsed by the [Tor Project](https://support.torproject.org/glossary/onion-browser). [:material-star-box: Read our latest Onion Browser review.](/articles/2024/09/18/onion-browser-review)
**Onion Browser** is an open-source browser that lets you browse the web anonymously over the Tor network on iOS devices and is endorsed by the [Tor Project](https://support.torproject.org/glossary/onion-browser). [:material-star-box: Read our latest Onion Browser review.](https://www.privacyguides.org/articles/2024/09/18/onion-browser-review/)
[:octicons-home-16: Homepage](https://onionbrowser.com){ .md-button .md-button--primary }
[:octicons-eye-16:](https://onionbrowser.com/privacy-policy){ .card-link title="Privacy Policy" }
@ -146,4 +148,6 @@ All versions are signed using the same signature, so they should be compatible w
Onion Browser does not provide the same levels of privacy protections as Tor Browser does on desktop platforms. For casual use it is a perfectly fine way to access hidden services, but if you're concerned about being traced or monitored by advanced adversaries you should not rely on this as an anonymity tool.
[Notably](https://github.com/privacyguides/privacyguides.org/issues/2929), Onion Browser does not *guarantee* all requests go through Tor. When using the built-in version of Tor, [your real IP **will** be leaked via WebRTC and audio/video streams](https://onionbrowser.com/faqs) due to limitations of WebKit. It is *safer* to use Onion Browser alongside Orbot, but this still comes with some limitations on iOS (noted in the Orbot section above).
[^1]: The `IsolateDestAddr` setting is discussed on the [Tor mailing list](https://lists.torproject.org/pipermail/tor-talk/2012-May/024403.html) and [Whonix's Stream Isolation documentation](https://whonix.org/wiki/Stream_Isolation), where both projects suggest that it is usually not a good approach for most people.

View File

@ -218,12 +218,12 @@ IVPN clients support two-factor authentication. IVPN also provides "[AntiTracker
</div>
#### :material-check:{ .pg-green } 45 Countries
#### :material-check:{ .pg-green } 49 Countries
Mullvad has [servers in 45 countries](https://mullvad.net/servers).(1) Picking a VPN provider with a server nearest to you will reduce latency of the network traffic you send. This is because of a shorter route (fewer hops) to the destination.
Mullvad has [servers in 49 countries](https://mullvad.net/servers).(1) Picking a VPN provider with a server nearest to you will reduce latency of the network traffic you send. This is because of a shorter route (fewer hops) to the destination.
{ .annotate }
1. Last checked: 2024-08-06
1. Last checked: 2025-03-10
We also think it's better for the security of the VPN provider's private keys if they use [dedicated servers](https://en.wikipedia.org/wiki/Dedicated_hosting_service), instead of cheaper shared solutions (with other customers) such as [virtual private servers](https://en.wikipedia.org/wiki/Virtual_private_server).

93
generate-members.py Normal file
View File

@ -0,0 +1,93 @@
import requests
import os
GITHUB_API_URL = "https://api.github.com/graphql"
GITHUB_TOKEN = os.getenv("GH_TOKEN")
ORG_NAME = "privacyguides"
# Fetch members from the API
members_api_url = "https://discuss.privacyguides.net/g/members/members.json?offset=0&order=added_at&asc=true"
headers = {
"Api-Key": os.getenv("DISCOURSE_API_KEY"),
"Api-Username": "system"
}
members_response = requests.get(members_api_url, headers=headers)
members_data = members_response.json()
if 'members' not in members_data:
raise KeyError("Response JSON does not contain 'members' key")
members = members_data['members']
private_members_count = 0
html_output = ""
for member in members:
flair_name = member.get('flair_name')
title = member.get('title')
if flair_name == "members" or title == "Member":
username = member['username']
avatar_template = member['avatar_template']
avatar_url = f"https://discuss.privacyguides.net{avatar_template.replace('{size}', '128')}"
profile_url = f"https://discuss.privacyguides.net/u/{username}"
html_output += f'<a href="{profile_url}" target="_blank" title="@{username}" class="mdx-donors__item"><img loading="lazy" src="{avatar_url}"></a>'
else:
private_members_count += 1
# print(html_output)
query = """
{
organization(login: "%s") {
sponsorshipsAsMaintainer(first: 100) {
nodes {
sponsorEntity {
... on User {
login
avatarUrl
url
}
... on Organization {
login
avatarUrl
url
}
}
createdAt
}
}
}
}
""" % ORG_NAME
headers = {
"Authorization": f"Bearer {GITHUB_TOKEN}",
"Content-Type": "application/json"
}
response = requests.post(GITHUB_API_URL, json={'query': query}, headers=headers)
data = response.json()
if 'errors' in data:
raise Exception(f"GraphQL query failed with errors: {data['errors']}")
if 'data' not in data:
raise KeyError(f"Response JSON does not contain 'data' key: {data}")
sponsors = data['data']['organization']['sponsorshipsAsMaintainer']['nodes']
# Sort sponsors by the date they began their sponsorship
sponsors.sort(key=lambda x: x['createdAt'])
for sponsor in sponsors:
sponsor_entity = sponsor['sponsorEntity']
login = sponsor_entity['login']
avatar_url = sponsor_entity['avatarUrl']
url = sponsor_entity['url']
html_output += f'<a href="{url}" title="@{login}" rel="ugc nofollow" target="_blank" class="mdx-donors__item"><img loading="lazy" src="{avatar_url}&size=120"></a>'
private_members_count += 6
# Append the count of private members
if private_members_count > 0:
html_output += f'<a href="https://donate.magicgrants.org/privacyguides" class="mdx-donors__item mdx-donors__item--private">+{private_members_count}</a>'
print(html_output)

View File

@ -7,6 +7,7 @@ DESCRIPTION_HOMEPAGE="A socially motivated website which provides information ab
FOOTER_COPYRIGHT_AUTHOR="Privacy Guides and contributors."
FOOTER_INTRO="<b>Privacy Guides</b> is a non-profit, socially motivated website that provides information for protecting your data security and privacy."
FOOTER_NOTE="We do not make money from recommending certain products, and we do not use affiliate links."
FOOTER_PRIVACY_NOTICE="Privacy notice."
HOMEPAGE_CTA_DESCRIPTION="It's important for a website like Privacy Guides to always stay up-to-date. We need our audience to keep an eye on software updates for the applications listed on our site and follow recent news about providers that we recommend. It's hard to keep up with the fast pace of the internet, but we try our best. If you spot an error, think a provider should not be listed, notice a qualified provider is missing, believe a browser plugin is no longer the best choice, or uncover any other issue, please let us know."
HOMEPAGE_DESCRIPTION="A socially motivated website which provides information about protecting your online data privacy and security."
HOMEPAGE_RSS_CHANGELOG_LINK="https://discuss.privacyguides.net/c/site-development/changelog/9.rss"
@ -22,6 +23,7 @@ HOMEPAGE_BUTTON_GET_STARTED_TITLE="The first step of your privacy journey"
HOMEPAGE_BUTTON_TOOLS_NAME="Recommended Tools"
HOMEPAGE_BUTTON_TOOLS_TITLE="Recommended privacy tools, services, and knowledge"
NAV_ABOUT="About"
NAV_ABOUT_POLICIES="Policies"
NAV_ABOUT_TEAM_MEMBERS="Team Members"
NAV_ADVANCED="Advanced"
NAV_ADVANCED_TOPICS="Advanced Topics"

View File

@ -42,7 +42,7 @@ extra:
copyright:
author:
!ENV [FOOTER_COPYRIGHT_AUTHOR, "Privacy Guides and contributors."]
date: !ENV [FOOTER_COPYRIGHT_DATE, "2019-2024"]
date: !ENV [FOOTER_COPYRIGHT_DATE, "2019-2025"]
license:
- fontawesome/brands/creative-commons
- fontawesome/brands/creative-commons-by
@ -206,7 +206,7 @@ markdown_extensions:
tables: {}
footnotes: {}
toc:
toc_depth: 4
toc_depth: 3
nav:
- !ENV [NAV_HOME, "Home"]: /en/

View File

@ -42,7 +42,7 @@ extra:
copyright:
author:
!ENV [FOOTER_COPYRIGHT_AUTHOR, "Privacy Guides and contributors."]
date: !ENV [FOOTER_COPYRIGHT_DATE, "2019-2024"]
date: !ENV [FOOTER_COPYRIGHT_DATE, "2019-2025"]
license:
- fontawesome/brands/creative-commons
- fontawesome/brands/creative-commons-by
@ -129,6 +129,7 @@ plugins:
enabled: !ENV [BUILD_PRIVACY, true]
offline:
enabled: !ENV [BUILD_OFFLINE, false]
minify_html: {}
group:
enabled: !ENV [BUILD_INSIDERS, true]
plugins:

View File

@ -42,7 +42,7 @@ extra:
copyright:
author:
!ENV [FOOTER_COPYRIGHT_AUTHOR, "Privacy Guides and contributors."]
date: !ENV [FOOTER_COPYRIGHT_DATE, "2019-2024"]
date: !ENV [FOOTER_COPYRIGHT_DATE, "2019-2025"]
license:
- fontawesome/brands/creative-commons
- fontawesome/brands/creative-commons-by

View File

@ -51,11 +51,14 @@ extra:
copyright:
author:
!ENV [FOOTER_COPYRIGHT_AUTHOR, "Privacy Guides and contributors."]
date: !ENV [FOOTER_COPYRIGHT_DATE, "2019-2024"]
date: !ENV [FOOTER_COPYRIGHT_DATE, "2019-2025"]
license:
- fontawesome/brands/creative-commons
- fontawesome/brands/creative-commons-by
- fontawesome/brands/creative-commons-sa
links:
- name: !ENV [FOOTER_PRIVACY_NOTICE, "Privacy notice."]
url: https://www.privacyguides.org/en/privacy/
homepage:
description:
!ENV [
@ -284,11 +287,11 @@ theme:
- search.highlight
extra_css:
- assets/stylesheets/extra.css?v=20240802
- assets/stylesheets/extra.css?v=20250306
extra_javascript:
- path: assets/javascripts/randomize-element.js?v=20240801
- path: assets/javascripts/randomize-element.js?v=20250306
defer: true
- path: assets/javascripts/feedback.js?v=20240801
- path: assets/javascripts/feedback.js?v=20250306
defer: true
watch:
@ -421,7 +424,9 @@ nav:
- "encryption.md"
- "file-sharing.md"
- "frontends.md"
- "health-and-wellness.md"
- "language-tools.md"
- "maps.md"
- "multi-factor-authentication.md"
- "news-aggregators.md"
- "notebooks.md"
@ -445,18 +450,22 @@ nav:
- "device-integrity.md"
- !ENV [NAV_BLOG, "Articles"]: "/articles/"
- !ENV [NAV_VIDEOS, "Videos"]: /videos/
- !ENV [NAV_FORUM, "Forum"]:
!ENV [NAV_FORUM_LINK, "https://discuss.privacyguides.net/"]
- !ENV [NAV_ABOUT, "About"]:
- "about.md"
- "about/donate.md"
- !ENV [NAV_ABOUT_TEAM_MEMBERS, "Team Members"]:
https://discuss.privacyguides.net/u?group=team&order=solutions&period=all
- "about/contributors.md"
- !ENV [NAV_ABOUT_POLICIES, "Policies"]:
- "about/criteria.md"
- "about/donation-acceptance-policy.md"
- "about/executive-policy.md"
- "privacy.md"
- "about/notices.md"
- "about/privacy-policy.md"
- "about/jobs.md"
- !ENV [NAV_COMMUNITY, "Community"]:
- "about/jobs.md"
- "about/contributors.md"
- !ENV [NAV_ONLINE_SERVICES, "Online Services"]: "about/services.md"
- !ENV [NAV_CODE_OF_CONDUCT, "Code of Conduct"]: "CODE_OF_CONDUCT.md"
- "about/statistics.md"
@ -470,9 +479,6 @@ nav:
- "meta/uploading-images.md"
- "meta/git-recommendations.md"
- "meta/commit-messages.md"
- !ENV [NAV_DONATE, "Donate"]: https://donate.magicgrants.org/privacyguides
- !ENV [NAV_FORUM, "Forum"]:
!ENV [NAV_FORUM_LINK, "https://discuss.privacyguides.net/"]
validation:
nav:

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@ -0,0 +1 @@
<svg width="128" height="128" version="1.1" viewBox="0 0 33.867 33.867" xmlns="http://www.w3.org/2000/svg"><defs><linearGradient id="SVGID_1_" x1="166.22" x2="166.22" y1="758.59" y2="757.09" gradientTransform="matrix(28 0 0 -24.5 -4594.5 18606)" gradientUnits="userSpaceOnUse"><stop stop-color="#FF61AD" offset="0"/><stop stop-color="#FF2719" offset="1"/></linearGradient></defs><g id="Symbols_1_" transform="matrix(.3763 0 0 .3763 -1.8815 -1.8815)"><path id="Background" class="st3" d="m63.6 5c9 0 13.5 0 18.4 1.5 5.3 1.9 9.5 6.1 11.4 11.4 1.6 4.9 1.6 9.5 1.6 18.5v27.2c0 9 0 13.5-1.5 18.4-1.9 5.3-6.1 9.5-11.4 11.4-5 1.6-9.5 1.6-18.5 1.6h-27.2c-9 0-13.5 0-18.4-1.5-5.4-2-9.5-6.1-11.5-11.5-1.5-4.8-1.5-9.3-1.5-18.4v-27.2c0-9 0-13.5 1.5-18.4 2-5.3 6.1-9.5 11.5-11.4 4.8-1.6 9.3-1.6 18.4-1.6z" fill="#fff"/><path class="st5" d="m80.7 32c0-6.8-5.2-12-11.2-12-4.2 0-7.6 1.4-9.7 4.5-2.1-3.1-5.5-4.5-9-4.5-6.8 0-12 5.2-12 12v0 0c0 10.1 9.7 20.3 21 24.7 8.8-2.9 20.9-14.6 20.9-24.7v0 0z" fill="url(#SVGID_1_)"/></g></svg>

After

Width:  |  Height:  |  Size: 1016 B

View File

@ -0,0 +1 @@
<svg width="128" height="128" version="1.1" viewBox="0 0 33.867 33.867" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><linearGradient id="c-5" x1="512" x2="512" y2="1024" gradientUnits="userSpaceOnUse"><stop stop-color="#313131" offset="0"/><stop stop-color="#141414" offset="1"/></linearGradient><linearGradient id="d-9" x1="674.52" x2="674.52" y1="160.14" y2="596.75" gradientTransform="matrix(.98167 0 0 .98167 -32.187 2.9351)" gradientUnits="userSpaceOnUse"><stop stop-color="#ff5fa9" offset="0"/><stop stop-color="#ff281d" offset="1"/></linearGradient></defs><g transform="matrix(.033073 0 0 .033073 2.25e-6 3.75e-7)"><path d="m1024 703.67c0 12.244 0 24.466-0.092 36.687-0.061 10.307-0.1779 20.614-0.4453 30.9-0.2837 22.534-2.2629 45.016-5.9213 67.253-3.8067 22.262-10.908 43.811-21.081 63.958-20.619 40.481-53.528 73.391-94.007 94.012-20.138 10.16-41.678 17.258-63.911 21.06-22.261 3.6732-44.744 5.6545-67.272 5.9217-10.297 0.2661-20.597 0.4218-30.898 0.4669-12.244 0.0714-24.465 0.0714-36.686 0.0714h-383.37c-12.221 0-24.442 0-36.686-0.061-10.301-0.04-20.6-0.1866-30.898-0.4453-22.541-0.2877-45.029-2.2745-67.272-5.944-22.238-3.7846-43.787-10.908-63.911-21.06-40.474-20.616-73.383-53.518-94.007-93.99-10.17-20.159-17.275-41.724-21.081-63.981-3.6583-22.23-5.6377-44.704-5.9213-67.231-0.26726-10.307-0.40038-20.614-0.44544-30.922-0.092159-12.244-0.092159-24.444-0.092159-36.688v-383.35c0-12.244 0-24.488 0.092159-36.732 0.04096-10.285 0.17817-20.592 0.44544-30.877 0.28365-22.527 2.2633-45.001 5.9213-67.231 3.8066-22.262 10.908-43.811 21.081-63.98 20.619-40.481 53.528-73.391 94.007-94.012 20.132-10.154 41.664-17.252 63.888-21.06 22.261-3.651 44.744-5.6322 67.272-5.9216 10.307-0.26726 20.614-0.40038 30.898-0.44544 12.243-0.07168 24.487-0.07168 36.686-0.07168h383.37c12.243 0 24.487 0 36.708 0.07168 10.301 0.04096 20.6 0.18637 30.898 0.44544 22.528 0.28979 45.011 2.2706 67.25 5.9216 22.261 3.8068 43.787 10.908 63.933 21.06 40.489 20.614 73.407 53.526 94.029 94.012 10.161 20.153 17.259 41.71 21.059 63.958 3.6587 22.237 5.638 44.718 5.9214 67.253 0.2674 10.307 0.4002 20.614 0.4453 30.899 0.092 12.244 0.092 24.466 0.092 36.687z" fill="url(#c-5)"/><path d="m532.07 160.24c-20.075 0-37.294 3.9892-53.083 11.074-15.904 7.1368-29.621 17.248-40.67 28.916-12.332 12.867-21.89 28.307-28.873 46.203-13.486 34.728-13.972 77.488-0.79062 117.4 3.9359 11.918 9.1299 24.125 15.652 36.362 16.713 31.207 40.352 61.701 70.671 91.281 15.16 14.716 31.48 29.03 49.227 43.093 17.748 14.063 36.975 27.775 57.311 41.086 5.0286 3.4017 10.179 6.4335 15.355 9.0957s9.079 3.9922 13.212 3.9922c3.6975 0 7.9349-1.33 13.111-3.9922s10.329-5.694 15.357-9.0957c20.336-13.311 39.528-27.023 57.275-41.086 17.748-14.063 34.202-28.477 49.361-43.193 30.319-29.58 53.934-60.174 70.646-91.381 6.5225-12.237 11.718-24.244 15.654-36.162 6.4458-19.517 9.5156-39.73 9.5156-58.445 0-20.898-3.1513-40.59-10.283-58.955-6.9834-17.896-16.541-33.336-28.873-46.203-11.048-11.668-24.764-21.779-40.668-28.916-15.789-7.0852-33.21-11.129-53.285-11.129-23.268 0-42.45 6.0435-58.867 17.432-6.8489 4.732-14.992 11.847-21.328 19.045-7.5867 8.6189-12.591 16.046-17.617 25.338-5.0266-9.2916-10.029-16.719-17.615-25.338-6.336-7.198-14.681-14.313-21.53-19.045-16.417-11.388-35.599-17.377-58.867-17.377z" fill="url(#d-9)"/></g></svg>

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

View File

@ -0,0 +1 @@
<svg width="128" height="128" version="1.1" viewBox="0 0 33.867 33.867" xmlns="http://www.w3.org/2000/svg"><defs><linearGradient id="paint0_linear_9963_56592" x1="1180" x2="1180" y1="1355" y2="2034" gradientTransform="matrix(.014344 0 0 .014344 -1.4598e-6 -6.59e-7)" gradientUnits="userSpaceOnUse"><stop stop-color="#018464" offset="0"/><stop stop-color="#FA8675" offset="1"/></linearGradient><filter id="filter0_f_9963_56592" x="0" y="0" width="2361" height="2361" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_9963_56592" stdDeviation="200"/></filter></defs><g transform="matrix(.014344 0 0 .014344 -1.4598e-6 -6.59e-7)" filter="url(#filter0_f_9963_56592)"><circle cx="1180.5" cy="1180.5" r="780.5" fill="#c7b9ff"/></g><path d="m16.926 29.176c-0.30395 0-0.6508-0.21774-0.6508-0.5217 0-0.3041 0.05738-0.33824 0.05738-1.2154 0-0.87715-0.60891-1.6176-1.4789-1.7288-1.5457-0.19752-3.0232-0.61293-4.4007-1.2145-2.7754-1.1401-4.7298-3.8699-4.7298-7.0562 0-1.7412 0.58362-3.3461 1.5659-4.6297 1.5288-2.0239 4.6914-4.0272 9.4879-6.0099 0.09539-0.039418 0.20254-0.039275 0.29778 3.849e-4 4.8582 2.023 8.0583 4.0682 9.5999 6.1355 0.90784 1.2619 1.4542 2.819 1.4542 4.5037 0 3.1874-1.9558 5.9181-4.7329 7.0573-1.3778 0.60145-2.8519 1.0161-4.3978 1.2134-0.86998 0.11088-1.4787 0.85104-1.4787 1.728 0 0.87686 0.05738 0.912 0.05738 1.2161 0 0.30395-0.34684 0.5217-0.6508 0.5217z" clip-rule="evenodd" fill="url(#paint0_linear_9963_56592)" fill-rule="evenodd" stroke-width=".014344"/><g fill="#fff" stroke-width=".014344"><path d="m23.459 16.518c0.41813 0 0.63114 0.19723 0.63114 0.60748 0 0.11834-0.02367 0.59959-0.02367 0.68637 0 0.48914 0.09467 0.90727 0.09467 1.3333 0 0.52858-0.10256 0.83627-0.67848 0.83627-0.50492 0-0.61537-0.25246-0.61537-0.72582 0-0.26824 0.071-0.52858 0.071-0.78893 0-0.37869-0.071-0.74948-0.071-1.1282 0-0.41024 0.11045-0.82049 0.5917-0.82049zm0.05523-1.9171c0.43391 0 0.71793 0.29979 0.71793 0.70215 0 0.41813-0.29061 0.78391-0.71793 0.78391-0.45758 0-0.71793-0.32633-0.71793-0.77602 0-0.49703 0.24457-0.71004 0.71793-0.71004z"/><path d="m18.603 16.913c0-0.69426-0.08678-1.2228-0.08678-1.6883 0-0.47336 0.19723-0.76526 0.67848-0.76526 0.38658 0 0.61537 0.25246 0.61537 0.62326 0 0.30768-0.05523 0.61537-0.06312 0.92305-0.01578 0.4418-0.0079 0.8836-0.01578 1.3175 0.45758-0.3708 0.8126-0.95461 1.3017-1.2702 0.11834-0.071 0.26035-0.12623 0.39447-0.12623 0.29979 0 0.56014 0.27613 0.56014 0.56014 0 0.55225-1.4359 1.2465-1.4359 1.357 0 0.09467 0.67848 0.63904 0.78104 0.72582 0.30768 0.2209 0.82049 0.3708 0.82049 0.80471 0 0.38658-0.2919 0.5917-0.65481 0.5917-0.41813 0-0.71004-0.38658-0.9625-0.6627-0.29979-0.33135-0.56014-0.69426-0.84416-1.0256 0.01578 0.36291 0.06312 0.72582 0.06312 1.0887 0 0.43391-0.18146 0.63114-0.62326 0.63114-0.3708 0-0.60748-0.26035-0.60748-0.63114 0-0.41024 0.0079-0.78893 0.03156-1.2071 0.03156-0.41813 0.04734-0.82838 0.04734-1.2465z"/><path d="m15.283 16.534c0 0.52069-0.11045 0.73371-0.11045 1.428 0 0.51281 0.16568 0.92305 0.65481 0.92305 0.62326 0 0.71004-0.76526 0.71004-1.1992 0-0.34713-0.06311-0.67059-0.06311-1.0177 0-0.43391 0.12623-0.71793 0.60748-0.71793s0.62326 0.32346 0.62326 0.74948c0 0.4418-0.10256 0.86782-0.10256 1.3175 0 0.69426 0.15779 1.1518 0.15779 1.4674 0 0.36291-0.30768 0.53647-0.64692 0.53647-0.50492 0-0.58381-0.47336-0.67059-0.47336-0.1499 0-0.29979 0.46547-1.0572 0.46547-1.0493 0-1.3175-0.84416-1.3175-1.7041 0-0.19723 0.02368-0.49703 0.02368-0.68637 0-0.30768-0.06313-0.64692-0.06313-0.95461 0-0.45758 0.18145-0.69426 0.62324-0.69426 0.27613 0 0.63114 0.11834 0.63114 0.56014z"/><path d="m12.426 14.68c0.38658 0 0.85205 0.09467 0.85205 0.57592 0 0.31557-0.17356 0.5917-0.52069 0.5917-0.41813 0-0.89149-0.08678-1.3175-0.08678-0.40236 0-0.63903 0.05523-0.63903 0.5207 0 0.36291 0.13412 0.46547 0.49703 0.46547 0.30768 0 0.6627-0.08678 0.97827-0.08678 0.35502 0 0.64692 0.12623 0.64692 0.52858 0 0.56014-0.29979 0.64692-0.78893 0.64692-0.26824 0-0.59959-0.03945-0.85994-0.03945-0.32346 0-0.46547 0.1499-0.46547 0.47336 0 0.4418 0.18934 0.60748 0.62326 0.60748 0.46547 0 1.0256-0.15778 1.4911-0.15778 0.34713 0 0.45758 0.24457 0.45758 0.56803 0 0.62326-0.50492 0.68637-1.0098 0.69426-0.22879 0-0.6627-0.03945-0.78893-0.03945-0.35502 0-0.56803 0.03156-0.92305 0.03156-0.78893 0-1.0019-0.53647-1.0019-1.3096 0-0.40236 0.063114-0.82049 0.063114-1.2307 0-0.48914-0.094672-0.94672-0.094672-1.4359 0-0.43391 0.078893-1.0493 0.57592-1.2071 0.23668-0.071 0.69426-0.07889 1.0729-0.07889 0.61537 0 0.8836-0.03156 1.1518-0.03156z"/></g></svg>

After

Width:  |  Height:  |  Size: 4.6 KiB

View File

@ -0,0 +1 @@
<svg width="128" height="128" version="1.1" viewBox="0 0 33.867 33.867" xmlns="http://www.w3.org/2000/svg"><g transform="matrix(.21651 0 0 .21651 5.1234 .00096615)"><path d="m84.356 149.9 0.272 6.517h-59.316l0.6575-6.927c0.9371 0.327 1.9458 0.505 2.9967 0.505h54.069c0.4489 0 0.8901-0.032 1.3213-0.095zm-0.7769-31.889c1.4753-12.043 7.8724-23.1 13.804-33.351 4.0523-7.0033 7.8863-13.631 9.7863-19.941-1.525 1.4561-3.508 4.4294-5.83 7.9112-5.974 8.9575-14.193 21.281-22.635 19.796-6.5388-2.1963-8.6025-5.274-11.253-10.858-8.7844 1.7113-15.766-3.479-18.301-9.7439l0.5045 25.308-11.448-32.834c-8.9473-2.8953-17.154-16.632-8.9312-15.059l14.764 2.8251c10.108 2.1275 15.8-11.543 6.7529-18.638-1.9246-1.3642-21.227-10.373-24.859-11.397-3.2588-0.9191-7.1371 0.373-9.6249 3.2065l-15.037 27.926c-1.5616 2.1541-1.5698 4.4081-0.64812 6.3917l27.517 55.218c0.4017 0.758 0.531 1.985 0.5532 3.228 0.0904-3e-3 0.1812-4e-3 0.2722-4e-3h54.069c0.1828 0 0.3643 5e-3 0.5444 0.016zm16.008-76.442c3.8132-4.5627 13.052 11.175 8.0642 16.832l-19.763 26.183c-0.4562 0.5989-0.8139 0.9323-1.4085 1.4865-0.0457 0.0426-0.0929 0.0866-0.1415 0.132-7.7411 5.5399-18.638-3.3444-11.416-12.333zm-16.14-16.588c0.9927-0.3809 8.487 5.1386 12.155 8.9417 1.0624 1.3104 1.4896 3.323 0.2287 4.9524l-28.656 37.032c-0.6941 0.6458-1.0892 0.8609-2.2031 1.1885-8.0897 0.8494-16.427-7.7713-9.0137-15.002zm-17.49-13.456c0.9401-1.2144 13.043 8.5418 13.316 10.444l-28.922 38.044c-2.8419 3.7382-12-1.3584-13.532-6.274 12.226 6.9846 32.822-4.9606 15.176-24.175zm-21.504-11.107c4.7603-1.814 15.311 2.4618 17.969 8.0878l-14.103 18.363-18.966-7.8415z" fill="#fff"/><path d="m31.845 122h47.31c4.3326 0 7.8448 2.964 7.8448 6.621v10.758c0 3.657-3.5122 6.621-7.8448 6.621h-47.31c-4.3326 0-7.8448-2.964-7.8448-6.621v-10.758c0-3.657 3.5122-6.621 7.8448-6.621zm11.593 3.064h24.325c2.8165 0 5.0997 2.284 5.0997 5.1v8.287c0 2.816-2.2832 5.1-5.0997 5.1h-24.325c-2.8165 0-5.0997-2.284-5.0997-5.1v-8.287c0-2.816 2.2832-5.1 5.0997-5.1z" clip-rule="evenodd" fill="#ff5000" fill-rule="evenodd"/></g></svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@ -0,0 +1 @@
<svg width="128" height="128" version="1.1" viewBox="0 0 33.867 33.867" xmlns="http://www.w3.org/2000/svg"><g transform="matrix(.21651 0 0 .21651 5.1234 .00096615)"><path d="m84.356 149.9 0.272 6.517h-59.316l0.6575-6.927c0.9371 0.327 1.9458 0.505 2.9967 0.505h54.069c0.4489 0 0.8901-0.032 1.3213-0.095zm-0.7769-31.889c1.4753-12.043 7.8724-23.1 13.804-33.351 4.0523-7.0033 7.8863-13.631 9.7863-19.941-1.525 1.4561-3.508 4.4294-5.83 7.9112-5.974 8.9575-14.193 21.281-22.635 19.796-6.5388-2.1963-8.6025-5.274-11.253-10.858-8.7844 1.7113-15.766-3.479-18.301-9.7439l0.5045 25.308-11.448-32.834c-8.9473-2.8953-17.154-16.632-8.9312-15.059l14.764 2.8251c10.108 2.1275 15.8-11.543 6.7529-18.638-1.9246-1.3642-21.227-10.373-24.859-11.397-3.2588-0.9191-7.1371 0.373-9.6249 3.2065l-15.037 27.926c-1.5616 2.1541-1.5698 4.4081-0.64812 6.3917l27.517 55.218c0.4017 0.758 0.531 1.985 0.5532 3.228 0.0904-3e-3 0.1812-4e-3 0.2722-4e-3h54.069c0.1828 0 0.3643 5e-3 0.5444 0.016zm16.008-76.442c3.8132-4.5627 13.052 11.175 8.0642 16.832l-19.763 26.183c-0.4562 0.5989-0.8139 0.9323-1.4085 1.4865-0.0457 0.0426-0.0929 0.0866-0.1415 0.132-7.7411 5.5399-18.638-3.3444-11.416-12.333zm-16.14-16.588c0.9927-0.3809 8.487 5.1386 12.155 8.9417 1.0624 1.3104 1.4896 3.323 0.2287 4.9524l-28.656 37.032c-0.6941 0.6458-1.0892 0.8609-2.2031 1.1885-8.0897 0.8494-16.427-7.7713-9.0137-15.002zm-17.49-13.456c0.9401-1.2144 13.043 8.5418 13.316 10.444l-28.922 38.044c-2.8419 3.7382-12-1.3584-13.532-6.274 12.226 6.9846 32.822-4.9606 15.176-24.175zm-21.504-11.107c4.7603-1.814 15.311 2.4618 17.969 8.0878l-14.103 18.363-18.966-7.8415z"/><path d="m31.845 122h47.31c4.3326 0 7.8448 2.964 7.8448 6.621v10.758c0 3.657-3.5122 6.621-7.8448 6.621h-47.31c-4.3326 0-7.8448-2.964-7.8448-6.621v-10.758c0-3.657 3.5122-6.621 7.8448-6.621zm11.593 3.064h24.325c2.8165 0 5.0997 2.284 5.0997 5.1v8.287c0 2.816-2.2832 5.1-5.0997 5.1h-24.325c-2.8165 0-5.0997-2.284-5.0997-5.1v-8.287c0-2.816 2.2832-5.1 5.0997-5.1z" clip-rule="evenodd" fill="#ff5000" fill-rule="evenodd"/></g></svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg version="1.1" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg"><path d="m861.36 256.91c18.221 48.437-79.259 166.2-172.18 196.42-168.08-58.215-173.55 39.55-311.11 132.43 162.61 112.43 332.97 24.886 329.78-85.767-128 73.325-208.17 81.324-254.17 79.103 154.87-30.664 322.04-125.76 357.07-165.76 0.032202 1.775 0.049863 3.5523 0.049863 5.3346 0 191.09-295.17 474.61-295.17 474.61s-154.51-147.95-239.95-302.47c-11.944-0.16144-83.823 25.963-110.33-9.0514-29.608-39.105 80.169-170.2 175.37-209.31 170.36 77.326 263.74-123.1 317.03-134.21-158.97-94.214-316.12-55.549-333.88 84.435 88.368-50.217 196.78-78.658 246.88-76.435-140.76 28.762-302 132.88-350.28 172.43 0-159.04 132.15-287.97 295.17-287.97 96.402 0 182.01 45.086 235.87 114.83 0.00335 0 96.188-31.283 109.85 11.379zm-33.706 14.219c-12.661-17.229-56.734 2.8937-56.734 2.8937 6.1678 10.345 11.7 21.096 16.535 32.208 4.8995 11.262 9.0867 22.895 12.504 34.838 0 0 45.004-46.386 27.694-69.94zm-629.57 294.38c13.686 18.619 61.326-3.1309 61.326-3.1309-6.6717-11.18-12.648-22.803-17.876-34.814-5.2966-12.173-9.8214-24.745-13.517-37.655 0 0-48.643 50.14-29.933 75.599z" fill="#006c35"/></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 999.98 999.98" xmlns="http://www.w3.org/2000/svg"><linearGradient id="a" x1="502.06" x2="499.52" y1="5e-6" y2="1000.2" gradientUnits="userSpaceOnUse"><stop stop-color="#ffa033" offset="0"/><stop stop-color="#f80" offset="1"/></linearGradient><path d="m598.33 913.71-84.95 80.979a19.593 19.593 0 0 1-26.784 0l-84.947-80.978c-207.9-45.1-363.67-230.09-363.67-451.55 0-255.24 206.85-462.15 462.01-462.15s462.01 206.92 462.01 462.15c0 221.47-155.77 406.45-363.67 451.55zm-98.318-715.65c-145.79 0-263.97 118.21-263.97 264.04s118.18 264.04 263.97 264.04 263.98-118.22 263.98-264.04-118.19-264.04-263.98-264.04z" fill="url(#a)" fill-rule="evenodd"/></svg>

After

Width:  |  Height:  |  Size: 705 B

View File

@ -1,2 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="127.99" height="128" version="1.1" viewBox="0 0 33.864 33.867" xmlns="http://www.w3.org/2000/svg"><g transform="translate(-48.383 -89.279)"><g transform="matrix(.083544 0 0 .083551 36.799 77.694)"><path d="m220.51 504.06 120.82 39.937 1.2e-4 4e-5 -143.92-5e-5zm323.49-162.73c0 111.93-90.737 202.67-202.67 202.67-111.93-1e-5 -202.67-90.737-202.67-202.67s90.737-202.67 202.67-202.67c111.93 0 202.67 90.737 202.67 202.67z" fill="#7663f0"/><g transform="translate(-5.1601e-6,-4.0973)"><circle cx="341" cy="433.47" r="23.536" fill="#f9f8fe" stroke-width=".64448"/><circle cx="439.19" cy="375.64" r="23.536" fill="#aaa4ce" stroke-width=".64448"/><circle cx="242.81" cy="375.64" r="23.536" fill="#cba1fe" stroke-width=".64447"/><g stroke-width=".64448"><circle cx="439.19" cy="433.47" r="23.536" fill="#f9f8fe"/><circle cx="439.19" cy="317.82" r="23.536" fill="#aacdf4"/><circle cx="242.81" cy="260" r="23.536" fill="#4b0f9f"/></g><circle cx="242.81" cy="317.82" r="23.536" fill="#aaa4ce" stroke-width=".64447"/><g stroke-width=".64448"><circle cx="242.81" cy="433.47" r="23.536" fill="#f9f8fe"/><circle cx="341" cy="317.82" r="23.536" fill="#4b0f9f"/><circle cx="341" cy="375.64" r="23.536" fill="#aacdf4"/></g><circle cx="439.19" cy="260" r="23.536" fill="#4b0f9f" stroke-width=".64447"/></g></g></g></svg>
<svg width="470" height="470" viewBox="0 0 470 470" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_274_276)">
<path d="M240.667 0.0671319C109.04 -3.0483 1.10113 101.345 -1.6504e-05 232.999C-0.470016 288.956 18.6523 340.414 50.8674 381.009L21.8214 431.809C12.0857 448.823 24.3728 470 43.9786 470H233.053C363.767 470 471.423 363.041 469.96 232.328C468.577 105.669 366.949 3.0617 240.667 0.0671319Z" fill="url(#paint0_linear_274_276)"/>
<path d="M133.628 179.379C151.405 179.379 165.816 164.968 165.816 147.191C165.816 129.413 151.405 115.002 133.628 115.002C115.851 115.002 101.439 129.413 101.439 147.191C101.439 164.968 115.851 179.379 133.628 179.379Z" fill="#A98DFF"/>
<path d="M336.547 179.379C354.324 179.379 368.735 164.968 368.735 147.191C368.735 129.413 354.324 115.002 336.547 115.002C318.77 115.002 304.359 129.413 304.359 147.191C304.359 164.968 318.77 179.379 336.547 179.379Z" fill="#A98DFF"/>
<path d="M133.628 267.188C151.405 267.188 165.816 252.777 165.816 235C165.816 217.223 151.405 202.812 133.628 202.812C115.851 202.812 101.439 217.223 101.439 235C101.439 252.777 115.851 267.188 133.628 267.188Z" fill="#CABAFF"/>
<path d="M336.547 267.188C354.324 267.188 368.735 252.777 368.735 235C368.735 217.223 354.324 202.812 336.547 202.812C318.77 202.812 304.359 217.223 304.359 235C304.359 252.777 318.77 267.188 336.547 267.188Z" fill="#CABAFF"/>
<path d="M133.628 354.998C151.405 354.998 165.816 340.587 165.816 322.809C165.816 305.032 151.405 290.621 133.628 290.621C115.851 290.621 101.439 305.032 101.439 322.809C101.439 340.587 115.851 354.998 133.628 354.998Z" fill="white"/>
<path d="M336.547 354.998C354.324 354.998 368.735 340.587 368.735 322.809C368.735 305.032 354.324 290.621 336.547 290.621C318.77 290.621 304.359 305.032 304.359 322.809C304.359 340.587 318.77 354.998 336.547 354.998Z" fill="white"/>
<path d="M235 267.188C252.777 267.188 267.188 252.777 267.188 235C267.188 217.223 252.777 202.812 235 202.812C217.223 202.812 202.812 217.223 202.812 235C202.812 252.777 217.223 267.188 235 267.188Z" fill="#CABAFF"/>
<path d="M235 354.998C252.777 354.998 267.188 340.587 267.188 322.809C267.188 305.032 252.777 290.621 235 290.621C217.223 290.621 202.812 305.032 202.812 322.809C202.812 340.587 217.223 354.998 235 354.998Z" fill="white"/>
</g>
<defs>
<linearGradient id="paint0_linear_274_276" x1="395.494" y1="513.011" x2="74.4582" y2="-42.9782" gradientUnits="userSpaceOnUse">
<stop offset="0.13" stop-color="#553BFF"/>
<stop offset="0.86" stop-color="#9064FF"/>
</linearGradient>
<clipPath id="clip0_274_276">
<rect width="470" height="470" fill="white"/>
</clipPath>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

@ -0,0 +1 @@
<svg width="128" height="128" version="1.1" viewBox="0 0 33.867 33.867" xmlns="http://www.w3.org/2000/svg"><g transform="matrix(.99949 0 0 .99949 0 -4.3461e-6)" stroke-width=".17657"><path d="m18.887 33.875h-18.887v-33.884h33.867v33.884h-14.98m-11.23-6.4496v2.2541c0.52144-0.0234 0.91072-0.0407 1.3471-0.0603v-3.7967-3.7795c0.41355 0 0.72916 5.3e-4 1.0448-8e-5 2.8536-5e-3 5.7092 0.0554 8.5603-0.0316 4.4217-0.13491 7.8995-3.3228 8.4823-7.6524 0.5747-4.2695-1.9094-8.0926-6.177-9.378-0.97178-0.29269-2.0196-0.43877-3.036-0.45784-3.1467-0.059-6.2952-0.0252-9.443-0.0239-0.2281 9e-5 -0.45618 0.0282-0.77834 0.0495 0 7.5979 0 15.15-1.6e-5 22.877z" fill="#1a1824"/><path d="m7.657 27.338c8e-6 -7.6394 8e-6 -15.191 8e-6 -22.789 0.32216-0.0213 0.55024-0.0494 0.77834-0.0495 3.1478-1e-3 6.2963-0.0351 9.443 0.0239 1.0164 0.0191 2.0642 0.16514 3.036 0.45783 4.2676 1.2854 6.7517 5.1085 6.177 9.378-0.58279 4.3296-4.0606 7.5175-8.4823 7.6524-2.8511 0.087-5.7067 0.0263-8.5603 0.0316-0.31561 5.2e-4 -0.63122 8e-5 -1.0448 8e-5v3.7795 3.7967c-0.43638 0.0195-0.82566 0.0369-1.3471 0.0603 0-0.80413 0-1.5291 8e-6 -2.3416m5.6677-6.6578c1.7344-8e-3 3.4703 0.0274 5.2029-0.0332 3.9836-0.1393 7.0762-3.1038 7.2512-6.8959 0.18838-4.0816-2.4594-7.4006-6.5589-7.7594-3.1812-0.27844-6.4002-0.1252-9.6025-0.15673-0.19145-2e-3 -0.38352 0.0593-0.55944 0.0886v14.757h4.2667z" fill="#bdb9ba"/><path d="m13.236 20.68h-4.1784v-14.757c0.17592-0.0292 0.36799-0.0904 0.55944-0.0886 3.2023 0.0316 6.4214-0.12172 9.6025 0.15673 4.0994 0.35881 6.7472 3.6778 6.5589 7.7594-0.17502 3.792-3.2676 6.7566-7.2512 6.8959-1.7326 0.0606-3.4685 0.025-5.2912 0.0332z" fill="#1a1825"/></g></svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

Some files were not shown because too many files have changed in this diff Show More