From c268ca7ff36f420d733d3128cb996dfab1f5517b Mon Sep 17 00:00:00 2001
From: GoodBoi19 <181642507+Thebloxers998@users.noreply.github.com>
Date: Tue, 4 Feb 2025 18:38:47 +0000
Subject: [PATCH 01/20] Update extensions.json
---
extensions/extensions.json | 1 +
1 file changed, 1 insertion(+)
diff --git a/extensions/extensions.json b/extensions/extensions.json
index 9027c00ac9..35fc83ec23 100644
--- a/extensions/extensions.json
+++ b/extensions/extensions.json
@@ -96,5 +96,6 @@
"itchio",
"gamejolt",
"obviousAlexC/newgroundsIO",
+ "Thebloxers998/oauthExtension",
"Lily/McUtils" // McUtils should always be the last item.
]
From 6aa50d91b0bbd68823f684c21c5c482bdb27e3fe Mon Sep 17 00:00:00 2001
From: GoodBoi19 <181642507+Thebloxers998@users.noreply.github.com>
Date: Tue, 4 Feb 2025 18:41:05 +0000
Subject: [PATCH 02/20] Create oauth.js
---
extensions/Thebloxers998/oauth.js | 191 ++++++++++++++++++++++++++++++
1 file changed, 191 insertions(+)
create mode 100644 extensions/Thebloxers998/oauth.js
diff --git a/extensions/Thebloxers998/oauth.js b/extensions/Thebloxers998/oauth.js
new file mode 100644
index 0000000000..777a354a63
--- /dev/null
+++ b/extensions/Thebloxers998/oauth.js
@@ -0,0 +1,191 @@
+// Name: OAuth Extension
+// ID: oauthExtension
+// Description: Provides OAuth login functionality for various services (Google, Microsoft, Discord, Twitter, GitHub, Facebook, LinkedIn, Spotify).
+// By: Thebloxers998
+// License: MPL-2.0
+
+class OAuthExtension {
+ constructor() {
+ this.tokens = {};
+ this.clients = {
+ google: {
+ clientId: '',
+ clientSecret: '',
+ redirectUri: '',
+ authUrl: 'https://accounts.google.com/o/oauth2/auth',
+ tokenUrl: 'https://oauth2.googleapis.com/token',
+ scope: 'https://www.googleapis.com/auth/userinfo.profile',
+ },
+ microsoft: {
+ clientId: '',
+ clientSecret: '',
+ redirectUri: '',
+ authUrl: 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize',
+ tokenUrl: 'https://login.microsoftonline.com/common/oauth2/v2.0/token',
+ scope: 'https://graph.microsoft.com/User.Read',
+ },
+ discord: {
+ clientId: '',
+ clientSecret: '',
+ redirectUri: '',
+ authUrl: 'https://discord.com/api/oauth2/authorize',
+ tokenUrl: 'https://discord.com/api/oauth2/token',
+ scope: 'identify',
+ },
+ twitter: {
+ clientId: '',
+ clientSecret: '',
+ redirectUri: '',
+ authUrl: 'https://api.twitter.com/oauth/authorize',
+ tokenUrl: 'https://api.twitter.com/oauth/access_token',
+ },
+ github: {
+ clientId: '',
+ clientSecret: '',
+ redirectUri: '',
+ authUrl: 'https://github.com/login/oauth/authorize',
+ tokenUrl: 'https://github.com/login/oauth/access_token',
+ scope: 'user',
+ },
+ facebook: {
+ clientId: '',
+ clientSecret: '',
+ redirectUri: '',
+ authUrl: 'https://www.facebook.com/v10.0/dialog/oauth',
+ tokenUrl: 'https://graph.facebook.com/v10.0/oauth/access_token',
+ scope: 'public_profile',
+ },
+ linkedin: {
+ clientId: '',
+ clientSecret: '',
+ redirectUri: '',
+ authUrl: 'https://www.linkedin.com/oauth/v2/authorization',
+ tokenUrl: 'https://www.linkedin.com/oauth/v2/accessToken',
+ scope: 'r_liteprofile',
+ },
+ spotify: {
+ clientId: '',
+ clientSecret: '',
+ redirectUri: '',
+ authUrl: 'https://accounts.spotify.com/authorize',
+ tokenUrl: 'https://accounts.spotify.com/api/token',
+ scope: 'user-read-private',
+ },
+ };
+ }
+
+ getInfo() {
+ return {
+ id: 'oauthExtension',
+ name: 'OAuth Extension',
+ blocks: [
+ {
+ opcode: 'login',
+ text: 'Log in with [SERVICE]',
+ blockType: Scratch.BlockType.COMMAND,
+ arguments: {
+ SERVICE: { type: Scratch.ArgumentType.STRING, menu: 'SERVICE' },
+ },
+ },
+ {
+ opcode: 'isLoggedIn',
+ text: 'Is user logged in with [SERVICE]?',
+ blockType: Scratch.BlockType.BOOLEAN,
+ arguments: {
+ SERVICE: { type: Scratch.ArgumentType.STRING, menu: 'SERVICE' },
+ },
+ },
+ {
+ opcode: 'setClientId',
+ text: 'Set client ID for [SERVICE] to [CLIENT_ID]',
+ blockType: Scratch.BlockType.COMMAND,
+ arguments: {
+ SERVICE: { type: Scratch.ArgumentType.STRING, menu: 'SERVICE' },
+ CLIENT_ID: { type: Scratch.ArgumentType.STRING, defaultValue: '' },
+ },
+ },
+ {
+ opcode: 'setClientSecret',
+ text: 'Set client secret for [SERVICE] to [CLIENT_SECRET]',
+ blockType: Scratch.BlockType.COMMAND,
+ arguments: {
+ SERVICE: { type: Scratch.ArgumentType.STRING, menu: 'SERVICE' },
+ CLIENT_SECRET: { type: Scratch.ArgumentType.STRING, defaultValue: '' },
+ },
+ },
+ {
+ opcode: 'setRedirectUri',
+ text: 'Set redirect URI for [SERVICE] to [REDIRECT_URI]',
+ blockType: Scratch.BlockType.COMMAND,
+ arguments: {
+ SERVICE: { type: Scratch.ArgumentType.STRING, menu: 'SERVICE' },
+ REDIRECT_URI: { type: Scratch.ArgumentType.STRING, defaultValue: '' },
+ },
+ },
+ ],
+ menus: {
+ SERVICE: {
+ items: [
+ { text: 'Google', value: 'google' },
+ { text: 'Microsoft', value: 'microsoft' },
+ { text: 'Discord', value: 'discord' },
+ { text: 'Twitter', value: 'twitter' },
+ { text: 'GitHub', value: 'github' },
+ { text: 'Facebook', value: 'facebook' },
+ { text: 'LinkedIn', value: 'linkedin' },
+ { text: 'Spotify', value: 'spotify' },
+ ],
+ },
+ },
+ };
+ }
+
+ setClientId(args) {
+ const service = args.SERVICE;
+ this.clients[service].clientId = args.CLIENT_ID;
+ }
+
+ setClientSecret(args) {
+ const service = args.SERVICE;
+ this.clients[service].clientSecret = args.CLIENT_SECRET;
+ }
+
+ setRedirectUri(args) {
+ const service = args.SERVICE;
+ this.clients[service].redirectUri = args.REDIRECT_URI;
+ }
+
+ async login(args) {
+ const service = args.SERVICE;
+ const client = this.clients[service];
+ const authUrl = `${client.authUrl}?response_type=code&client_id=${client.clientId}&redirect_uri=${client.redirectUri}&scope=${encodeURIComponent(client.scope)}`;
+
+ // Open a new tab for the user to authorize the app
+ Scratch.openWindow(authUrl, '_blank');
+
+ // Listen for message with authorization code (assuming your app handles this securely)
+ window.addEventListener('message', async (event) => {
+ if (event.origin !== window.location.origin) return;
+
+ const authorizationCode = event.data.code;
+
+ const tokenResponse = await fetch(client.tokenUrl, {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/x-www-form-urlencoded',
+ },
+ body: `code=${authorizationCode}&client_id=${client.clientId}&client_secret=${client.clientSecret}&redirect_uri=${client.redirectUri}&grant_type=authorization_code`,
+ });
+
+ const tokens = await tokenResponse.json();
+ this.tokens[service] = tokens;
+ }, { once: true });
+ }
+
+ isLoggedIn(args) {
+ const service = args.SERVICE;
+ return !!this.tokens[service];
+ }
+}
+
+Scratch.extensions.register(new OAuthExtension());
From 5c05c47727bb4c02ffd7f85784a058960165e757 Mon Sep 17 00:00:00 2001
From: GoodBoi19 <181642507+Thebloxers998@users.noreply.github.com>
Date: Tue, 4 Feb 2025 18:42:49 +0000
Subject: [PATCH 03/20] Create oauth.md
---
docs/Thebloxers998/oauth.md | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
create mode 100644 docs/Thebloxers998/oauth.md
diff --git a/docs/Thebloxers998/oauth.md b/docs/Thebloxers998/oauth.md
new file mode 100644
index 0000000000..4439726003
--- /dev/null
+++ b/docs/Thebloxers998/oauth.md
@@ -0,0 +1,24 @@
+# OAuth Extension
+
+## Description
+
+This extension allows users to log in with various OAuth providers (Google, Microsoft, Discord, Twitter, GitHub, Facebook, LinkedIn, Spotify) and check their login status.
+
+## Usage
+
+1. Set the client ID, client secret, and redirect URI for the desired service using the provided blocks.
+2. Use the login block to initiate the OAuth flow.
+3. Use the isLoggedIn block to check if the user is logged in.
+
+## Installation
+
+1. Fork and clone the TurboWarp extensions repository.
+2. Add this extension to the repository and create a pull request.
+
+## Example Blocks
+
+- Set client ID
+- Set client secret
+- Set redirect URI
+- Log in
+- Check login status
From 8093f59aaef8f5cac36a31b538536cdb1ece9933 Mon Sep 17 00:00:00 2001
From: GoodBoi19 <181642507+Thebloxers998@users.noreply.github.com>
Date: Tue, 4 Feb 2025 18:52:08 +0000
Subject: [PATCH 04/20] Add OAuth Icon
---
images/R (2).svg | 5 +++++
1 file changed, 5 insertions(+)
create mode 100644 images/R (2).svg
diff --git a/images/R (2).svg b/images/R (2).svg
new file mode 100644
index 0000000000..10268f2358
--- /dev/null
+++ b/images/R (2).svg
@@ -0,0 +1,5 @@
+
+
From 3d8da58ce4302dbdcf5443c71149fc430d0e0ef5 Mon Sep 17 00:00:00 2001
From: GoodBoi19 <181642507+Thebloxers998@users.noreply.github.com>
Date: Tue, 4 Feb 2025 18:54:06 +0000
Subject: [PATCH 05/20] Rename images/R (2).svg to
images/Thebloxers998/oauth.svg
---
images/{R (2).svg => Thebloxers998/oauth.svg} | 0
1 file changed, 0 insertions(+), 0 deletions(-)
rename images/{R (2).svg => Thebloxers998/oauth.svg} (100%)
diff --git a/images/R (2).svg b/images/Thebloxers998/oauth.svg
similarity index 100%
rename from images/R (2).svg
rename to images/Thebloxers998/oauth.svg
From 3fed29b9333544e4148fa7b69f00a969d0c0dd9e Mon Sep 17 00:00:00 2001
From: GoodBoi19 <181642507+Thebloxers998@users.noreply.github.com>
Date: Tue, 4 Feb 2025 19:18:11 +0000
Subject: [PATCH 06/20] Update oauth.js
---
extensions/Thebloxers998/oauth.js | 3 +++
1 file changed, 3 insertions(+)
diff --git a/extensions/Thebloxers998/oauth.js b/extensions/Thebloxers998/oauth.js
index 777a354a63..b89133e71f 100644
--- a/extensions/Thebloxers998/oauth.js
+++ b/extensions/Thebloxers998/oauth.js
@@ -15,6 +15,7 @@ class OAuthExtension {
authUrl: 'https://accounts.google.com/o/oauth2/auth',
tokenUrl: 'https://oauth2.googleapis.com/token',
scope: 'https://www.googleapis.com/auth/userinfo.profile',
+ icon: 'data:image/svg+xml;base64,PLACEHOLDER_FOR_GOOGLE_ICON'
},
microsoft: {
clientId: '',
@@ -78,6 +79,8 @@ class OAuthExtension {
return {
id: 'oauthExtension',
name: 'OAuth Extension',
+ blockIconURI: 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI1NiIgaGVpZ2h0PSIyNTYiPgo8cGF0aCBkPSJNMCAwIEMyMi4wMzg1MjY1MiAxOC44MTE1OTg1NiAzNi40NjU3OTMzNCA0MS4wNjM3MzM3NyA0NC4zNTE1NjI1IDY4LjkxMDE1NjI1IEM0NC42OTMxNjQwNiA3MC4wODgzNTkzNyA0NS4wMzQ3NjU2MyA3MS4yNjY1NjI1IDQ1LjM4NjcxODc1IDcyLjQ4MDQ2ODc1IEM1MS41OTA5Mjc1NSA5OC43NDAxNDMyMiA0OC4xMTkzNTU5NyAxMjguNDA3NTUzODkgMzcuMzUxNTYyNSAxNTIuOTEwMTU2MjUgQzM2LjkyNjY1NTI3IDE1My44OTE0NTUwOCAzNi45MjY2NTUyNyAxNTMuODkxNDU1MDggMzYuNDkzMTY0MDYgMTU0Ljg5MjU3ODEyIEMyNi41NTAxNTk0MyAxNzcuNDE1NDA2MzEgOS4zNjgzODI4MiAxOTcuMDgzNzE0NDMgLTExLjY0ODQzNzUgMjA5LjkxMDE1NjI1IEMtMTIuNzIwOTM3NSAyMTAuNTkzMzU5MzggLTEzLjc5MzQzNzUgMjExLjI3NjU2MjUgLTE0Ljg5ODQzNzUgMjExLjk4MDQ2ODc1IEMtNDIuNzU5MjI3OTQgMjI4Ljk0MjAxNDc4IC03OC4yNTA2MTE4OSAyMzMuOTI2NDg1NDUgLTExMC4wMzAyNzM0NCAyMjYuNzQ3MDcwMzEgQy0xMTcuODE5NDE3MjkgMjI0Ljc3NzM2MzU3IC0xMjUuMjk4MDI2MiAyMjIuMTQwMzMxOTUgLTEzMi42NDg0Mzc1IDIxOC45MTAxNTYyNSBDLTEzMy4zMDI2MzY3MiAyMTguNjI2ODg0NzcgLTEzMy45NTY4MzU5NCAyMTguMzQzNjEzMjggLTEzNC42MzA4NTkzOCAyMTguMDUxNzU3ODEgQy0xNjQuNzI1OTMyMzQgMjA0Ljc2NTg4NDE0IC0xODguNDMyNjIzMzkgMTc5LjE4ODU5MzM5IC0yMDAuNTE5NTMxMjUgMTQ4LjcxMzg2NzE5IEMtMjAyLjQ3ODkwMDc3IDE0My41MTUyMTc0MiAtMjA0LjEzNTA4MjUgMTM4LjI1NDE1Mjc0IC0yMDUuNjQ4NDM3NSAxMzIuOTEwMTU2MjUgQy0yMDUuOTkwMDM5MDYgMTMxLjczMTk1MzEyIC0yMDYuMzMxNjQwNjMgMTMwLjU1Mzc1IC0yMDYuNjgzNTkzNzUgMTI5LjMzOTg0Mzc1IEMtMjE0LjIxNzQzOTk4IDk3LjQ1MjQwMTU3IC0yMDcuODM1NTc0NTYgNjEuNDM0NjUxNjEgLTE5MS4wMDc4MTI1IDMzLjYwNTQ2ODc1IEMtMTcyLjcxOTMxMzkzIDQuNTE1NjA4MTggLTE0NS40NzI3MDQ5NSAtMTQuNzk0NDA5MjYgLTExMi42NDg0Mzc1IC0yNC4wODk4NDM3NSBDLTExMS40NzAyMzQzOCAtMjQuNDMxNDQ1MzEgLTExMC4yOTIwMzEyNSAtMjQuNzczMDQ2ODcgLTEwOS4wNzgxMjUgLTI1LjEyNSBDLTcxLjkxMjE2MjA0IC0zMy45MDU5NjkyNyAtMjkuNDM4MzUxODQgLTI0LjE0NjUyMjQyIDAgMCBaIE0tMTU2LjY0ODQzNzUgMzguOTEwMTU2MjUgQy0xNzIuNjc2OTQzNTIgNTguMDg4NzczMjggLTE4MC4zOTY0OTAzOCA4NC41ODg4MzUyMyAtMTc4LjM3MTA5Mzc1IDEwOS4yOTI5Njg3NSBDLTE3NS40NzE3NjMxNSAxMzUuNzQ1OTA4ODUgLTE2Mi45NTU1MTQxMyAxNTkuNTg0NTMzMDggLTE0Mi42NDg0Mzc1IDE3Ni45MTAxNTYyNSBDLTEyNi41NDMxNjcwNSAxODkuNjk5NjM1NzIgLTEwNi4zMjExMTA2MiAxOTguMDkxNzg4ODEgLTg1LjY0ODQzNzUgMTk4LjkxMDE1NjI1IEMtODQuODg5MTc5NjkgMTk4Ljk1MDExNzE5IC04NC4xMjk5MjE4NyAxOTguOTkwMDc4MTIgLTgzLjM0NzY1NjI1IDE5OS4wMzEyNSBDLTU2LjU4MDI3NzA5IDE5OS43NzYwMDUyMyAtMzEuNDM2MTQxNzYgMTg4LjgxNjI3MjU4IC0xMi4wNTQ0NDMzNiAxNzAuNzY1NjI1IEM1LjI3MjM5MDEyIDE1NC4wMTA3MzQ1MiAxNi4zOTQyODMxMyAxMzAuMDkxODY1NjUgMTcuMzUxNTYyNSAxMDUuOTEwMTU2MjUgQzE3LjM5MTUyMzQ0IDEwNS4xNTA4OTg0NCAxNy40MzE0ODQzNyAxMDQuMzkxNjQwNjIgMTcuNDcyNjU2MjUgMTAzLjYwOTM3NSBDMTguMjE3NDExNDggNzYuODQxOTk1ODQgNy4yNTc2Nzg4MyA1MS42OTc4NjA1MSAtMTAuNzkyOTY4NzUgMzIuMzE2MTYyMTEgQy0yNy41NDc4NTkyMyAxNC45ODkzMjg2MyAtNTEuNDY2NzI4MSAzLjg2NzQzNTYyIC03NS42NDg0Mzc1IDIuOTEwMTU2MjUgQy03Ni43ODczMjQyMiAyLjg1MDIxNDg0IC03Ni43ODczMjQyMiAyLjg1MDIxNDg0IC03Ny45NDkyMTg3NSAyLjc4OTA2MjUgQy0xMDguODU5OTYwMDYgMS45MjkwMjU1MSAtMTM2LjI0OTk3Njk4IDE2LjQzMzI0OTk3IC0xNTYuNjQ4NDM3NSAzOC45MTAxNTYyNSBaICIgZmlsbD0iIzlFOUU5RSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjA4LjY0ODQzNzUsMjcuMDg5ODQzNzUpIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuNzc5NDM0NjYgMC4wMDIyMjA2MSAxLjU1ODg2OTMyIDAuMDA0NDQxMjIgMi4zNjE5MjMyMiAwLjAwNjcyOTEzIEMzLjI0Mjc2MDc3IDAuMDA2ODA0NjYgNC4xMjM1OTgzMyAwLjAwNjg4MDE5IDUuMDMxMTI3OTMgMC4wMDY5NTgwMSBDNS45ODg0MTI5MyAwLjAxMjExOTI5IDYuOTQ1Njk3OTQgMC4wMTcyODA1OCA3LjkzMTk5MTU4IDAuMDIyNTk4MjcgQzkuMzk0ODA4MTIgMC4wMjQ3MjA2OSA5LjM5NDgwODEyIDAuMDI0NzIwNjkgMTAuODg3MTc2NTEgMC4wMjY4ODU5OSBDMTQuMDE1NDI2NzUgMC4wMzI1MDMxOSAxNy4xNDM2MDY1NiAwLjA0NTA1ODU5IDIwLjI3MTgzNTMzIDAuMDU3NzU0NTIgQzIyLjM4NzA2ODY3IDAuMDYyNzY3MyAyNC41MDIzMDMxMyAwLjA2NzMzMDU5IDI2LjYxNzUzODQ1IDAuMDcxNDI2MzkgQzMxLjgxNDgyODI5IDAuMDgyNDc4MiAzNy4wMTIwNzY3OCAwLjA5OTIzMzA1IDQyLjIwOTMzNTMzIDAuMTIwMjU0NTIgQzQ0Ljk5MTE0MDUxIDYuMjUxMzU5MTEgNDcuNTc5MTE3NDUgMTIuNDM1MDc1MzMgNTAuMDM3NDYwMzMgMTguNzAyMjg1NzcgQzUwLjM5MDE1OTkxIDE5LjU5NjU0NzcgNTAuNzQyODU5NSAyMC40OTA4MDk2MyA1MS4xMDYyNDY5NSAyMS40MTIxNzA0MSBDNTIuMjI1NzczMjEgMjQuMjUxNjQ4MTQgNTMuMzQyNjgwOCAyNy4wOTIxNDYzOCA1NC40NTkzMzUzMyAyOS45MzI3NTQ1MiBDNTUuNTU3NzAyMTUgMzIuNzIyNDMxMiA1Ni42NTY2Mzk1MiAzNS41MTE4ODE3NCA1Ny43NTYwODgyNiAzOC4zMDExMzIyIEM1OC40ODMyNDk1MSA0MC4xNDY2MDUxNSA1OS4yMDk1NzI4OCA0MS45OTI0MDg0OCA1OS45MzUwNDMzMyA0My44Mzg1NDY3NSBDNjEuNzc4MzM5NjQgNDguNTIyNzUzMjQgNjMuNjQxMjU5NzcgNTMuMTk3NzI3NjUgNjUuNTM5NDEzNDUgNTcuODYwMDAwNjEgQzY1LjkxMTc3MTI0IDU4Ljc3Nzg2ODUgNjYuMjg0MTI5MDMgNTkuNjk1NzM2MzkgNjYuNjY3NzcwMzkgNjAuNjQxNDE4NDYgQzY3LjM3NzQxMTc2IDYyLjM4NzQ1NzM3IDY4LjA5MTI4MzIxIDY0LjEzMTc4NDgzIDY4LjgwOTk4MjMgNjUuODc0MTE0OTkgQzY5LjEyNTc4MjQ3IDY2LjY1MjMyMTAxIDY5LjQ0MTU4MjY0IDY3LjQzMDUyNzA0IDY5Ljc2Njk1MjUxIDY4LjIzMjMxNTA2IEM3MC4wNDY0MTcyNCA2OC45MTMyNzc0NCA3MC4zMjU4ODE5NiA2OS41OTQyMzk4MSA3MC42MTM4MTUzMSA3MC4yOTU4Mzc0IEM3MS4yMDkzMzUzMyA3Mi4xMjAyNTQ1MiA3MS4yMDkzMzUzMyA3Mi4xMjAyNTQ1MiA3MS4yMDkzMzUzMyA3NS4xMjAyNTQ1MiBDNzkuNDU5MzM1MzMgNzUuMTIwMjU0NTIgODcuNzA5MzM1MzMgNzUuMTIwMjU0NTIgOTYuMjA5MzM1MzMgNzUuMTIwMjU0NTIgQzk2LjIwOTMzNTMzIDgwLjA3MDI1NDUyIDk2LjIwOTMzNTMzIDg1LjAyMDI1NDUyIDk2LjIwOTMzNTMzIDkwLjEyMDI1NDUyIEM5MC4yNjkzMzUzMyA5MC4xMjAyNTQ1MiA4NC4zMjkzMzUzMyA5MC4xMjAyNTQ1MiA3OC4yMDkzMzUzMyA5MC4xMjAyNTQ1MiBDNzkuMTk5MzM1MzMgOTMuNTg1MjU0NTIgNzkuMTk5MzM1MzMgOTMuNTg1MjU0NTIgODAuMjA5MzM1MzMgOTcuMTIwMjU0NTIgQzg1LjQ4OTMzNTMzIDk3LjEyMDI1NDUyIDkwLjc2OTMzNTMzIDk3LjEyMDI1NDUyIDk2LjIwOTMzNTMzIDk3LjEyMDI1NDUyIEM5Ni4yMDkzMzUzMyAxMDIuMDcwMjU0NTIgOTYuMjA5MzM1MzMgMTA3LjAyMDI1NDUyIDk2LjIwOTMzNTMzIDExMi4xMjAyNTQ1MiBDOTEuNzU0MzM1MzMgMTEyLjYxNTI1NDUyIDkxLjc1NDMzNTMzIDExMi42MTUyNTQ1MiA4Ny4yMDkzMzUzMyAxMTMuMTIwMjU0NTIgQzg3LjcxNDY0NzgzIDExNC4zODQ4MjQ4MyA4OC4yMTk5NjAzMyAxMTUuNjQ5Mzk1MTQgODguNzQwNTg1MzMgMTE2Ljk1MjI4NTc3IEM4OS4zOTcxMDI1MiAxMTguNjEyMzM2MzcgOTAuMDUzMzM3ODkgMTIwLjI3MjQ5ODQ1IDkwLjcwOTMzNTMzIDEyMS45MzI3NTQ1MiBDOTEuMjEwMTM2MTEgMTIzLjE4MjgyMjg4IDkxLjIxMDEzNjExIDEyMy4xODI4MjI4OCA5MS43MjEwNTQwOCAxMjQuNDU4MTQ1MTQgQzkyLjE5NDc4NDU1IDEyNS42NjE4MDcyNSA5Mi4xOTQ3ODQ1NSAxMjUuNjYxODA3MjUgOTIuNjc4MDg1MzMgMTI2Ljg4OTc4NTc3IEM5Mi45NzEzNDcwNSAxMjcuNjI4MTc2ODggOTMuMjY0NjA4NzYgMTI4LjM2NjU2Nzk5IDkzLjU2Njc1NzIgMTI5LjEyNzMzNDU5IEM5NC4yMDkzMzUzMyAxMzEuMTIwMjU0NTIgOTQuMjA5MzM1MzMgMTMxLjEyMDI1NDUyIDk0LjIwOTMzNTMzIDEzNC4xMjAyNTQ1MiBDODEuOTk5MzM1MzMgMTM0LjEyMDI1NDUyIDY5Ljc4OTMzNTMzIDEzNC4xMjAyNTQ1MiA1Ny4yMDkzMzUzMyAxMzQuMTIwMjU0NTIgQzUyLjIwOTMzNTMzIDEyMi4xMjAyNTQ1MiA1Mi4yMDkzMzUzMyAxMjIuMTIwMjU0NTIgNDkuMjA5MzM1MzMgMTEyLjEyMDI1NDUyIEMzMC4wNjkzMzUzMyAxMTIuMTIwMjU0NTIgMTAuOTI5MzM1MzMgMTEyLjEyMDI1NDUyIC04Ljc5MDY2NDY3IDExMi4xMjAyNTQ1MiBDLTkuNzgwNjY0NjcgMTE1LjQyMDI1NDUyIC0xMC43NzA2NjQ2NyAxMTguNzIwMjU0NTIgLTExLjc5MDY2NDY3IDEyMi4xMjAyNTQ1MiBDLTEzLjQ0MDY2NDY3IDEyNi4wODAyNTQ1MiAtMTUuMDkwNjY0NjcgMTMwLjA0MDI1NDUyIC0xNi43OTA2NjQ2NyAxMzQuMTIwMjU0NTIgQy0yOS4wMDA2NjQ2NyAxMzQuMTIwMjU0NTIgLTQxLjIxMDY2NDY3IDEzNC4xMjAyNTQ1MiAtNTMuNzkwNjY0NjcgMTM0LjEyMDI1NDUyIEMtNTMuMTI2NDQxNjkgMTMwLjc5OTEzOTYgLTUyLjU1MzU4NjExIDEyOC4yMDE5NDI1MyAtNTEuMzgwNTA4NDIgMTI1LjEzMTk3MzI3IEMtNTAuOTc5Mjg3NzIgMTI0LjA3MzMzMDY5IC01MC45NzkyODc3MiAxMjQuMDczMzMwNjkgLTUwLjU2OTk2MTU1IDEyMi45OTMzMDEzOSBDLTUwLjI5MjE2ODU4IDEyMi4yNzIwNzA5MiAtNTAuMDE0Mzc1NjEgMTIxLjU1MDg0MDQ1IC00OS43MjgxNjQ2NyAxMjAuODA3NzU0NTIgQy00OS4zMDU2NzQ0NCAxMTkuNjk2OTA0OTEgLTQ5LjMwNTY3NDQ0IDExOS42OTY5MDQ5MSAtNDguODc0NjQ5MDUgMTE4LjU2MzYxMzg5IEMtNDguMTgzNDc4OTIgMTE2Ljc0NzgyNzk2IC00Ny40ODc1NDc3OSAxMTQuOTMzODU1NTIgLTQ2Ljc5MDY2NDY3IDExMy4xMjAyNTQ1MiBDLTQ5Ljc2MDY2NDY3IDExMi43OTAyNTQ1MiAtNTIuNzMwNjY0NjcgMTEyLjQ2MDI1NDUyIC01NS43OTA2NjQ2NyAxMTIuMTIwMjU0NTIgQy01NS43OTA2NjQ2NyAxMDcuMTcwMjU0NTIgLTU1Ljc5MDY2NDY3IDEwMi4yMjAyNTQ1MiAtNTUuNzkwNjY0NjcgOTcuMTIwMjU0NTIgQy01MC41MTA2NjQ2NyA5Ny4xMjAyNTQ1MiAtNDUuMjMwNjY0NjcgOTcuMTIwMjU0NTIgLTM5Ljc5MDY2NDY3IDk3LjEyMDI1NDUyIEMtMzkuMTMwNjY0NjcgOTQuODEwMjU0NTIgLTM4LjQ3MDY2NDY3IDkyLjUwMDI1NDUyIC0zNy43OTA2NjQ2NyA5MC4xMjAyNTQ1MiBDLTQzLjczMDY2NDY3IDkwLjEyMDI1NDUyIC00OS42NzA2NjQ2NyA5MC4xMjAyNTQ1MiAtNTUuNzkwNjY0NjcgOTAuMTIwMjU0NTIgQy01NS43OTA2NjQ2NyA4NS4xNzAyNTQ1MiAtNTUuNzkwNjY0NjcgODAuMjIwMjU0NTIgLTU1Ljc5MDY2NDY3IDc1LjEyMDI1NDUyIEMtNDcuNTQwNjY0NjcgNzUuMTIwMjU0NTIgLTM5LjI5MDY2NDY3IDc1LjEyMDI1NDUyIC0zMC43OTA2NjQ2NyA3NS4xMjAyNTQ1MiBDLTMwLjQ2MDY2NDY3IDczLjQ3MDI1NDUyIC0zMC4xMzA2NjQ2NyA3MS44MjAyNTQ1MiAtMjkuNzkwNjY0NjcgNzAuMTIwMjU0NTIgQy0yOS4zNTY1NzU4MyA2OC44MTI0MDQ1NiAtMjguODg3MjM5MjEgNjcuNTE1NzA5OTggLTI4LjM4Mjk0OTgzIDY2LjIzMzI5MTYzIEMtMjcuOTU1MjcwNjEgNjUuMTM2NzU1MTQgLTI3Ljk1NTI3MDYxIDY1LjEzNjc1NTE0IC0yNy41MTg5NTE0MiA2NC4wMTgwNjY0MSBDLTI3LjIwOTAwNzQyIDYzLjIzNTgxMTkyIC0yNi44OTkwNjM0MiA2Mi40NTM1NTc0MyAtMjYuNTc5NzI3MTcgNjEuNjQ3NTk4MjcgQy0yNi4wOTMyMzk1MiA2MC40MDUyNzE4NCAtMjYuMDkzMjM5NTIgNjAuNDA1MjcxODQgLTI1LjU5NjkyMzgzIDU5LjEzNzg0NzkgQy0yNC41NDA0OTM5NyA1Ni40NDI4OTc0OSAtMjMuNDc4MjE0MDQgNTMuNzUwMjk3MzYgLTIyLjQxNTY2NDY3IDUxLjA1Nzc1NDUyIEMtMjEuNjg4NjgwNTUgNDkuMjA3NjI3NzYgLTIwLjk2MjAzODM5IDQ3LjM1NzM2NjU5IC0yMC4yMzU3MzMwMyA0NS41MDY5NzMyNyBDLTE4Ljc3OTY4MzY3IDQxLjc5ODk3MzEgLTE3LjMyMTM4MjQ0IDM4LjA5MTg3MDIyIC0xNS44NjE0NjU0NSAzNC4zODUzOTEyNCBDLTE0LjAwMzg3MjU1IDI5LjY2NjY4MzE1IC0xMi4xNTg0NzMxNyAyNC45NDMzMjA2NSAtMTAuMzE4MDA4NDIgMjAuMjE3OTEwNzcgQy05LjgwNjIzMTMyIDE4LjkwNjEwMjQ1IC05LjI5NDM1Mzc3IDE3LjU5NDMzMzMyIC04Ljc4MjM2Mzg5IDE2LjI4MjYwODAzIEMtNy44NDYzMDQ5OSAxMy44ODM5MzcxMSAtNi45MTE2ODAwOCAxMS40ODQ3MDU5NyAtNS45Nzg2NTI5NSA5LjA4NDg1NDEzIEMtNS41NjcyODA4OCA4LjAzNDM0ODc1IC01LjE1NTkwODgxIDYuOTgzODQzMzggLTQuNzMyMDcwOTIgNS45MDE1MDQ1MiBDLTQuMzc4MzAzODMgNC45OTQ2NDkwNSAtNC4wMjQ1MzY3NCA0LjA4Nzc5MzU4IC0zLjY2MDA0OTQ0IDMuMTUzNDU3NjQgQy0yLjM3OTk5Mzk4IDAuMTU5ODMxNzMgLTIuMzc5OTkzOTggMC4xNTk4MzE3MyAwIDAgWiBNMjAuMjA5MzM1MzMgMzQuMTIwMjU0NTIgQzE2LjgxMTU1MDQyIDQxLjQ0MTY3MiAxMy45NzAzMDk5MyA0OC45Mjk2MjIxMiAxMS4yMDc4NzA0OCA1Ni41MDY3MjkxMyBDMTAuNDUxMzgyMzUgNTguNTc5NTQ2MDkgOS42ODgwNjYyNSA2MC42NDk3NjM3OSA4LjkyNDE3OTA4IDYyLjcxOTg2Mzg5IEM4LjQ0MDY5OTkyIDY0LjAzOTM3NjU3IDcuOTU3NjEyMjcgNjUuMzU5MDMyNzggNy40NzQ5NjAzMyA2Ni42Nzg4NDgyNyBDNy4wMzk1Nzk0NyA2Ny44Njc5Mjc4NiA2LjYwNDE5ODYxIDY5LjA1NzAwNzQ1IDYuMTU1NjI0MzkgNzAuMjgyMTE5NzUgQzUuMTAzOTAxNTkgNzIuOTM3ODUxOCA1LjEwMzkwMTU5IDcyLjkzNzg1MTggNS4yMDkzMzUzMyA3NS4xMjAyNTQ1MiBDMTUuMTA5MzM1MzMgNzUuMTIwMjU0NTIgMjUuMDA5MzM1MzMgNzUuMTIwMjU0NTIgMzUuMjA5MzM1MzMgNzUuMTIwMjU0NTIgQzMzLjQxMTgzNzk3IDY5LjEyODU5NjY3IDMxLjYyMDI3MzkyIDYzLjIzNDQ4Mzc4IDI5LjUxMDExNjU4IDU3LjM2MjQ0MjAyIEMyOS4yNzAyMDQ5MyA1Ni42ODg1MTQxIDI5LjAzMDI5MzI3IDU2LjAxNDU4NjE4IDI4Ljc4MzExMTU3IDU1LjMyMDIzNjIxIEMyOC4wMzE2Nzg1NiA1My4yMTEwNzA1NyAyNy4yNzY4MzI1IDUxLjEwMzE0NjU4IDI2LjUyMTgzNTMzIDQ4Ljk5NTI1NDUyIEMyNi4wMDUzMzA1NCA0Ny41NDc0MTk0MyAyNS40ODkwNTI4MSA0Ni4wOTk1MDMzMyAyNC45NzMwMDcyIDQ0LjY1MTUwNDUyIEMyMy43MjEwNjM0NyA0MS4xNDAxNTA4OCAyMi40NjYwNjAxOSAzNy42Mjk5MDAyNSAyMS4yMDkzMzUzMyAzNC4xMjAyNTQ1MiBDMjAuODc5MzM1MzMgMzQuMTIwMjU0NTIgMjAuNTQ5MzM1MzMgMzQuMTIwMjU0NTIgMjAuMjA5MzM1MzMgMzQuMTIwMjU0NTIgWiBNLTAuNzkwNjY0NjcgOTAuMTIwMjU0NTIgQy0xLjQ1MDY2NDY3IDkyLjQzMDI1NDUyIC0yLjExMDY2NDY3IDk0Ljc0MDI1NDUyIC0yLjc5MDY2NDY3IDk3LjEyMDI1NDUyIEMxMi4zODkzMzUzMyA5Ny4xMjAyNTQ1MiAyNy41NjkzMzUzMyA5Ny4xMjAyNTQ1MiA0My4yMDkzMzUzMyA5Ny4xMjAyNTQ1MiBDNDIuNTQ5MzM1MzMgOTQuODEwMjU0NTIgNDEuODg5MzM1MzMgOTIuNTAwMjU0NTIgNDEuMjA5MzM1MzMgOTAuMTIwMjU0NTIgQzI3LjM0OTMzNTMzIDkwLjEyMDI1NDUyIDEzLjQ4OTMzNTMzIDkwLjEyMDI1NDUyIC0wLjc5MDY2NDY3IDkwLjEyMDI1NDUyIFogIiBmaWxsPSIjOUU5RTlFIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMDcuNzkwNjY0NjcyODUxNTYsNDUuODc5NzQ1NDgzMzk4NDQpIi8+Cjwvc3ZnPgo=',
+ menuIconURI: 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI1NiIgaGVpZ2h0PSIyNTYiPgo8cGF0aCBkPSJNMCAwIEMyMi4wMzg1MjY1MiAxOC44MTE1OTg1NiAzNi40NjU3OTMzNCA0MS4wNjM3MzM3NyA0NC4zNTE1NjI1IDY4LjkxMDE1NjI1IEM0NC42OTMxNjQwNiA3MC4wODgzNTkzNyA0NS4wMzQ3NjU2MyA3MS4yNjY1NjI1IDQ1LjM4NjcxODc1IDcyLjQ4MDQ2ODc1IEM1MS41OTA5Mjc1NSA5OC43NDAxNDMyMiA0OC4xMTkzNTU5NyAxMjguNDA3NTUzODkgMzcuMzUxNTYyNSAxNTIuOTEwMTU2MjUgQzM2LjkyNjY1NTI3IDE1My44OTE0NTUwOCAzNi45MjY2NTUyNyAxNTMuODkxNDU1MDggMzYuNDkzMTY0MDYgMTU0Ljg5MjU3ODEyIEMyNi41NTAxNTk0MyAxNzcuNDE1NDA2MzEgOS4zNjgzODI4MiAxOTcuMDgzNzE0NDMgLTExLjY0ODQzNzUgMjA5LjkxMDE1NjI1IEMtMTIuNzIwOTM3NSAyMTAuNTkzMzU5MzggLTEzLjc5MzQzNzUgMjExLjI3NjU2MjUgLTE0Ljg5ODQzNzUgMjExLjk4MDQ2ODc1IEMtNDIuNzU5MjI3OTQgMjI4Ljk0MjAxNDc4IC03OC4yNTA2MTE4OSAyMzMuOTI2NDg1NDUgLTExMC4wMzAyNzM0NCAyMjYuNzQ3MDcwMzEgQy0xMTcuODE5NDE3MjkgMjI0Ljc3NzM2MzU3IC0xMjUuMjk4MDI2MiAyMjIuMTQwMzMxOTUgLTEzMi42NDg0Mzc1IDIxOC45MTAxNTYyNSBDLTEzMy4zMDI2MzY3MiAyMTguNjI2ODg0NzcgLTEzMy45NTY4MzU5NCAyMTguMzQzNjEzMjggLTEzNC42MzA4NTkzOCAyMTguMDUxNzU3ODEgQy0xNjQuNzI1OTMyMzQgMjA0Ljc2NTg4NDE0IC0xODguNDMyNjIzMzkgMTc5LjE4ODU5MzM5IC0yMDAuNTE5NTMxMjUgMTQ4LjcxMzg2NzE5IEMtMjAyLjQ3ODkwMDc3IDE0My41MTUyMTc0MiAtMjA0LjEzNTA4MjUgMTM4LjI1NDE1Mjc0IC0yMDUuNjQ4NDM3NSAxMzIuOTEwMTU2MjUgQy0yMDUuOTkwMDM5MDYgMTMxLjczMTk1MzEyIC0yMDYuMzMxNjQwNjMgMTMwLjU1Mzc1IC0yMDYuNjgzNTkzNzUgMTI5LjMzOTg0Mzc1IEMtMjE0LjIxNzQzOTk4IDk3LjQ1MjQwMTU3IC0yMDcuODM1NTc0NTYgNjEuNDM0NjUxNjEgLTE5MS4wMDc4MTI1IDMzLjYwNTQ2ODc1IEMtMTcyLjcxOTMxMzkzIDQuNTE1NjA4MTggLTE0NS40NzI3MDQ5NSAtMTQuNzk0NDA5MjYgLTExMi42NDg0Mzc1IC0yNC4wODk4NDM3NSBDLTExMS40NzAyMzQzOCAtMjQuNDMxNDQ1MzEgLTExMC4yOTIwMzEyNSAtMjQuNzczMDQ2ODcgLTEwOS4wNzgxMjUgLTI1LjEyNSBDLTcxLjkxMjE2MjA0IC0zMy45MDU5NjkyNyAtMjkuNDM4MzUxODQgLTI0LjE0NjUyMjQyIDAgMCBaIE0tMTU2LjY0ODQzNzUgMzguOTEwMTU2MjUgQy0xNzIuNjc2OTQzNTIgNTguMDg4NzczMjggLTE4MC4zOTY0OTAzOCA4NC41ODg4MzUyMyAtMTc4LjM3MTA5Mzc1IDEwOS4yOTI5Njg3NSBDLTE3NS40NzE3NjMxNSAxMzUuNzQ1OTA4ODUgLTE2Mi45NTU1MTQxMyAxNTkuNTg0NTMzMDggLTE0Mi42NDg0Mzc1IDE3Ni45MTAxNTYyNSBDLTEyNi41NDMxNjcwNSAxODkuNjk5NjM1NzIgLTEwNi4zMjExMTA2MiAxOTguMDkxNzg4ODEgLTg1LjY0ODQzNzUgMTk4LjkxMDE1NjI1IEMtODQuODg5MTc5NjkgMTk4Ljk1MDExNzE5IC04NC4xMjk5MjE4NyAxOTguOTkwMDc4MTIgLTgzLjM0NzY1NjI1IDE5OS4wMzEyNSBDLTU2LjU4MDI3NzA5IDE5OS43NzYwMDUyMyAtMzEuNDM2MTQxNzYgMTg4LjgxNjI3MjU4IC0xMi4wNTQ0NDMzNiAxNzAuNzY1NjI1IEM1LjI3MjM5MDEyIDE1NC4wMTA3MzQ1MiAxNi4zOTQyODMxMyAxMzAuMDkxODY1NjUgMTcuMzUxNTYyNSAxMDUuOTEwMTU2MjUgQzE3LjM5MTUyMzQ0IDEwNS4xNTA4OTg0NCAxNy40MzE0ODQzNyAxMDQuMzkxNjQwNjIgMTcuNDcyNjU2MjUgMTAzLjYwOTM3NSBDMTguMjE3NDExNDggNzYuODQxOTk1ODQgNy4yNTc2Nzg4MyA1MS42OTc4NjA1MSAtMTAuNzkyOTY4NzUgMzIuMzE2MTYyMTEgQy0yNy41NDc4NTkyMyAxNC45ODkzMjg2MyAtNTEuNDY2NzI4MSAzLjg2NzQzNTYyIC03NS42NDg0Mzc1IDIuOTEwMTU2MjUgQy03Ni43ODczMjQyMiAyLjg1MDIxNDg0IC03Ni43ODczMjQyMiAyLjg1MDIxNDg0IC03Ny45NDkyMTg3NSAyLjc4OTA2MjUgQy0xMDguODU5OTYwMDYgMS45MjkwMjU1MSAtMTM2LjI0OTk3Njk4IDE2LjQzMzI0OTk3IC0xNTYuNjQ4NDM3NSAzOC45MTAxNTYyNSBaICIgZmlsbD0iIzlFOUU5RSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjA4LjY0ODQzNzUsMjcuMDg5ODQzNzUpIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuNzc5NDM0NjYgMC4wMDIyMjA2MSAxLjU1ODg2OTMyIDAuMDA0NDQxMjIgMi4zNjE5MjMyMiAwLjAwNjcyOTEzIEMzLjI0Mjc2MDc3IDAuMDA2ODA0NjYgNC4xMjM1OTgzMyAwLjAwNjg4MDE5IDUuMDMxMTI3OTMgMC4wMDY5NTgwMSBDNS45ODg0MTI5MyAwLjAxMjExOTI5IDYuOTQ1Njk3OTQgMC4wMTcyODA1OCA3LjkzMTk5MTU4IDAuMDIyNTk4MjcgQzkuMzk0ODA4MTIgMC4wMjQ3MjA2OSA5LjM5NDgwODEyIDAuMDI0NzIwNjkgMTAuODg3MTc2NTEgMC4wMjY4ODU5OSBDMTQuMDE1NDI2NzUgMC4wMzI1MDMxOSAxNy4xNDM2MDY1NiAwLjA0NTA1ODU5IDIwLjI3MTgzNTMzIDAuMDU3NzU0NTIgQzIyLjM4NzA2ODY3IDAuMDYyNzY3MyAyNC41MDIzMDMxMyAwLjA2NzMzMDU5IDI2LjYxNzUzODQ1IDAuMDcxNDI2MzkgQzMxLjgxNDgyODI5IDAuMDgyNDc4MiAzNy4wMTIwNzY3OCAwLjA5OTIzMzA1IDQyLjIwOTMzNTMzIDAuMTIwMjU0NTIgQzQ0Ljk5MTE0MDUxIDYuMjUxMzU5MTEgNDcuNTc5MTE3NDUgMTIuNDM1MDc1MzMgNTAuMDM3NDYwMzMgMTguNzAyMjg1NzcgQzUwLjM5MDE1OTkxIDE5LjU5NjU0NzcgNTAuNzQyODU5NSAyMC40OTA4MDk2MyA1MS4xMDYyNDY5NSAyMS40MTIxNzA0MSBDNTIuMjI1NzczMjEgMjQuMjUxNjQ4MTQgNTMuMzQyNjgwOCAyNy4wOTIxNDYzOCA1NC40NTkzMzUzMyAyOS45MzI3NTQ1MiBDNTUuNTU3NzAyMTUgMzIuNzIyNDMxMiA1Ni42NTY2Mzk1MiAzNS41MTE4ODE3NCA1Ny43NTYwODgyNiAzOC4zMDExMzIyIEM1OC40ODMyNDk1MSA0MC4xNDY2MDUxNSA1OS4yMDk1NzI4OCA0MS45OTI0MDg0OCA1OS45MzUwNDMzMyA0My44Mzg1NDY3NSBDNjEuNzc4MzM5NjQgNDguNTIyNzUzMjQgNjMuNjQxMjU5NzcgNTMuMTk3NzI3NjUgNjUuNTM5NDEzNDUgNTcuODYwMDAwNjEgQzY1LjkxMTc3MTI0IDU4Ljc3Nzg2ODUgNjYuMjg0MTI5MDMgNTkuNjk1NzM2MzkgNjYuNjY3NzcwMzkgNjAuNjQxNDE4NDYgQzY3LjM3NzQxMTc2IDYyLjM4NzQ1NzM3IDY4LjA5MTI4MzIxIDY0LjEzMTc4NDgzIDY4LjgwOTk4MjMgNjUuODc0MTE0OTkgQzY5LjEyNTc4MjQ3IDY2LjY1MjMyMTAxIDY5LjQ0MTU4MjY0IDY3LjQzMDUyNzA0IDY5Ljc2Njk1MjUxIDY4LjIzMjMxNTA2IEM3MC4wNDY0MTcyNCA2OC45MTMyNzc0NCA3MC4zMjU4ODE5NiA2OS41OTQyMzk4MSA3MC42MTM4MTUzMSA3MC4yOTU4Mzc0IEM3MS4yMDkzMzUzMyA3Mi4xMjAyNTQ1MiA3MS4yMDkzMzUzMyA3Mi4xMjAyNTQ1MiA3MS4yMDkzMzUzMyA3NS4xMjAyNTQ1MiBDNzkuNDU5MzM1MzMgNzUuMTIwMjU0NTIgODcuNzA5MzM1MzMgNzUuMTIwMjU0NTIgOTYuMjA5MzM1MzMgNzUuMTIwMjU0NTIgQzk2LjIwOTMzNTMzIDgwLjA3MDI1NDUyIDk2LjIwOTMzNTMzIDg1LjAyMDI1NDUyIDk2LjIwOTMzNTMzIDkwLjEyMDI1NDUyIEM5MC4yNjkzMzUzMyA5MC4xMjAyNTQ1MiA4NC4zMjkzMzUzMyA5MC4xMjAyNTQ1MiA3OC4yMDkzMzUzMyA5MC4xMjAyNTQ1MiBDNzkuMTk5MzM1MzMgOTMuNTg1MjU0NTIgNzkuMTk5MzM1MzMgOTMuNTg1MjU0NTIgODAuMjA5MzM1MzMgOTcuMTIwMjU0NTIgQzg1LjQ4OTMzNTMzIDk3LjEyMDI1NDUyIDkwLjc2OTMzNTMzIDk3LjEyMDI1NDUyIDk2LjIwOTMzNTMzIDk3LjEyMDI1NDUyIEM5Ni4yMDkzMzUzMyAxMDIuMDcwMjU0NTIgOTYuMjA5MzM1MzMgMTA3LjAyMDI1NDUyIDk2LjIwOTMzNTMzIDExMi4xMjAyNTQ1MiBDOTEuNzU0MzM1MzMgMTEyLjYxNTI1NDUyIDkxLjc1NDMzNTMzIDExMi42MTUyNTQ1MiA4Ny4yMDkzMzUzMyAxMTMuMTIwMjU0NTIgQzg3LjcxNDY0NzgzIDExNC4zODQ4MjQ4MyA4OC4yMTk5NjAzMyAxMTUuNjQ5Mzk1MTQgODguNzQwNTg1MzMgMTE2Ljk1MjI4NTc3IEM4OS4zOTcxMDI1MiAxMTguNjEyMzM2MzcgOTAuMDUzMzM3ODkgMTIwLjI3MjQ5ODQ1IDkwLjcwOTMzNTMzIDEyMS45MzI3NTQ1MiBDOTEuMjEwMTM2MTEgMTIzLjE4MjgyMjg4IDkxLjIxMDEzNjExIDEyMy4xODI4MjI4OCA5MS43MjEwNTQwOCAxMjQuNDU4MTQ1MTQgQzkyLjE5NDc4NDU1IDEyNS42NjE4MDcyNSA5Mi4xOTQ3ODQ1NSAxMjUuNjYxODA3MjUgOTIuNjc4MDg1MzMgMTI2Ljg4OTc4NTc3IEM5Mi45NzEzNDcwNSAxMjcuNjI4MTc2ODggOTMuMjY0NjA4NzYgMTI4LjM2NjU2Nzk5IDkzLjU2Njc1NzIgMTI5LjEyNzMzNDU5IEM5NC4yMDkzMzUzMyAxMzEuMTIwMjU0NTIgOTQuMjA5MzM1MzMgMTMxLjEyMDI1NDUyIDk0LjIwOTMzNTMzIDEzNC4xMjAyNTQ1MiBDODEuOTk5MzM1MzMgMTM0LjEyMDI1NDUyIDY5Ljc4OTMzNTMzIDEzNC4xMjAyNTQ1MiA1Ny4yMDkzMzUzMyAxMzQuMTIwMjU0NTIgQzUyLjIwOTMzNTMzIDEyMi4xMjAyNTQ1MiA1Mi4yMDkzMzUzMyAxMjIuMTIwMjU0NTIgNDkuMjA5MzM1MzMgMTEyLjEyMDI1NDUyIEMzMC4wNjkzMzUzMyAxMTIuMTIwMjU0NTIgMTAuOTI5MzM1MzMgMTEyLjEyMDI1NDUyIC04Ljc5MDY2NDY3IDExMi4xMjAyNTQ1MiBDLTkuNzgwNjY0NjcgMTE1LjQyMDI1NDUyIC0xMC43NzA2NjQ2NyAxMTguNzIwMjU0NTIgLTExLjc5MDY2NDY3IDEyMi4xMjAyNTQ1MiBDLTEzLjQ0MDY2NDY3IDEyNi4wODAyNTQ1MiAtMTUuMDkwNjY0NjcgMTMwLjA0MDI1NDUyIC0xNi43OTA2NjQ2NyAxMzQuMTIwMjU0NTIgQy0yOS4wMDA2NjQ2NyAxMzQuMTIwMjU0NTIgLTQxLjIxMDY2NDY3IDEzNC4xMjAyNTQ1MiAtNTMuNzkwNjY0NjcgMTM0LjEyMDI1NDUyIEMtNTMuMTI2NDQxNjkgMTMwLjc5OTEzOTYgLTUyLjU1MzU4NjExIDEyOC4yMDE5NDI1MyAtNTEuMzgwNTA4NDIgMTI1LjEzMTk3MzI3IEMtNTAuOTc5Mjg3NzIgMTI0LjA3MzMzMDY5IC01MC45NzkyODc3MiAxMjQuMDczMzMwNjkgLTUwLjU2OTk2MTU1IDEyMi45OTMzMDEzOSBDLTUwLjI5MjE2ODU4IDEyMi4yNzIwNzA5MiAtNTAuMDE0Mzc1NjEgMTIxLjU1MDg0MDQ1IC00OS43MjgxNjQ2NyAxMjAuODA3NzU0NTIgQy00OS4zMDU2NzQ0NCAxMTkuNjk2OTA0OTEgLTQ5LjMwNTY3NDQ0IDExOS42OTY5MDQ5MSAtNDguODc0NjQ5MDUgMTE4LjU2MzYxMzg5IEMtNDguMTgzNDc4OTIgMTE2Ljc0NzgyNzk2IC00Ny40ODc1NDc3OSAxMTQuOTMzODU1NTIgLTQ2Ljc5MDY2NDY3IDExMy4xMjAyNTQ1MiBDLTQ5Ljc2MDY2NDY3IDExMi43OTAyNTQ1MiAtNTIuNzMwNjY0NjcgMTEyLjQ2MDI1NDUyIC01NS43OTA2NjQ2NyAxMTIuMTIwMjU0NTIgQy01NS43OTA2NjQ2NyAxMDcuMTcwMjU0NTIgLTU1Ljc5MDY2NDY3IDEwMi4yMjAyNTQ1MiAtNTUuNzkwNjY0NjcgOTcuMTIwMjU0NTIgQy01MC41MTA2NjQ2NyA5Ny4xMjAyNTQ1MiAtNDUuMjMwNjY0NjcgOTcuMTIwMjU0NTIgLTM5Ljc5MDY2NDY3IDk3LjEyMDI1NDUyIEMtMzkuMTMwNjY0NjcgOTQuODEwMjU0NTIgLTM4LjQ3MDY2NDY3IDkyLjUwMDI1NDUyIC0zNy43OTA2NjQ2NyA5MC4xMjAyNTQ1MiBDLTQzLjczMDY2NDY3IDkwLjEyMDI1NDUyIC00OS42NzA2NjQ2NyA5MC4xMjAyNTQ1MiAtNTUuNzkwNjY0NjcgOTAuMTIwMjU0NTIgQy01NS43OTA2NjQ2NyA4NS4xNzAyNTQ1MiAtNTUuNzkwNjY0NjcgODAuMjIwMjU0NTIgLTU1Ljc5MDY2NDY3IDc1LjEyMDI1NDUyIEMtNDcuNTQwNjY0NjcgNzUuMTIwMjU0NTIgLTM5LjI5MDY2NDY3IDc1LjEyMDI1NDUyIC0zMC43OTA2NjQ2NyA3NS4xMjAyNTQ1MiBDLTMwLjQ2MDY2NDY3IDczLjQ3MDI1NDUyIC0zMC4xMzA2NjQ2NyA3MS44MjAyNTQ1MiAtMjkuNzkwNjY0NjcgNzAuMTIwMjU0NTIgQy0yOS4zNTY1NzU4MyA2OC44MTI0MDQ1NiAtMjguODg3MjM5MjEgNjcuNTE1NzA5OTggLTI4LjM4Mjk0OTgzIDY2LjIzMzI5MTYzIEMtMjcuOTU1MjcwNjEgNjUuMTM2NzU1MTQgLTI3Ljk1NTI3MDYxIDY1LjEzNjc1NTE0IC0yNy41MTg5NTE0MiA2NC4wMTgwNjY0MSBDLTI3LjIwOTAwNzQyIDYzLjIzNTgxMTkyIC0yNi44OTkwNjM0MiA2Mi40NTM1NTc0MyAtMjYuNTc5NzI3MTcgNjEuNjQ3NTk4MjcgQy0yNi4wOTMyMzk1MiA2MC40MDUyNzE4NCAtMjYuMDkzMjM5NTIgNjAuNDA1MjcxODQgLTI1LjU5NjkyMzgzIDU5LjEzNzg0NzkgQy0yNC41NDA0OTM5NyA1Ni40NDI4OTc0OSAtMjMuNDc4MjE0MDQgNTMuNzUwMjk3MzYgLTIyLjQxNTY2NDY3IDUxLjA1Nzc1NDUyIEMtMjEuNjg4NjgwNTUgNDkuMjA3NjI3NzYgLTIwLjk2MjAzODM5IDQ3LjM1NzM2NjU5IC0yMC4yMzU3MzMwMyA0NS41MDY5NzMyNyBDLTE4Ljc3OTY4MzY3IDQxLjc5ODk3MzEgLTE3LjMyMTM4MjQ0IDM4LjA5MTg3MDIyIC0xNS44NjE0NjU0NSAzNC4zODUzOTEyNCBDLTE0LjAwMzg3MjU1IDI5LjY2NjY4MzE1IC0xMi4xNTg0NzMxNyAyNC45NDMzMjA2NSAtMTAuMzE4MDA4NDIgMjAuMjE3OTEwNzcgQy05LjgwNjIzMTMyIDE4LjkwNjEwMjQ1IC05LjI5NDM1Mzc3IDE3LjU5NDMzMzMyIC04Ljc4MjM2Mzg5IDE2LjI4MjYwODAzIEMtNy44NDYzMDQ5OSAxMy44ODM5MzcxMSAtNi45MTE2ODAwOCAxMS40ODQ3MDU5NyAtNS45Nzg2NTI5NSA5LjA4NDg1NDEzIEMtNS41NjcyODA4OCA4LjAzNDM0ODc1IC01LjE1NTkwODgxIDYuOTgzODQzMzggLTQuNzMyMDcwOTIgNS45MDE1MDQ1MiBDLTQuMzc4MzAzODMgNC45OTQ2NDkwNSAtNC4wMjQ1MzY3NCA0LjA4Nzc5MzU4IC0zLjY2MDA0OTQ0IDMuMTUzNDU3NjQgQy0yLjM3OTk5Mzk4IDAuMTU5ODMxNzMgLTIuMzc5OTkzOTggMC4xNTk4MzE3MyAwIDAgWiBNMjAuMjA5MzM1MzMgMzQuMTIwMjU0NTIgQzE2LjgxMTU1MDQyIDQxLjQ0MTY3MiAxMy45NzAzMDk5MyA0OC45Mjk2MjIxMiAxMS4yMDc4NzA0OCA1Ni41MDY3MjkxMyBDMTAuNDUxMzgyMzUgNTguNTc5NTQ2MDkgOS42ODgwNjYyNSA2MC42NDk3NjM3OSA4LjkyNDE3OTA4IDYyLjcxOTg2Mzg5IEM4LjQ0MDY5OTkyIDY0LjAzOTM3NjU3IDcuOTU3NjEyMjcgNjUuMzU5MDMyNzggNy40NzQ5NjAzMyA2Ni42Nzg4NDgyNyBDNy4wMzk1Nzk0NyA2Ny44Njc5Mjc4NiA2LjYwNDE5ODYxIDY5LjA1NzAwNzQ1IDYuMTU1NjI0MzkgNzAuMjgyMTE5NzUgQzUuMTAzOTAxNTkgNzIuOTM3ODUxOCA1LjEwMzkwMTU5IDcyLjkzNzg1MTggNS4yMDkzMzUzMyA3NS4xMjAyNTQ1MiBDMTUuMTA5MzM1MzMgNzUuMTIwMjU0NTIgMjUuMDA5MzM1MzMgNzUuMTIwMjU0NTIgMzUuMjA5MzM1MzMgNzUuMTIwMjU0NTIgQzMzLjQxMTgzNzk3IDY5LjEyODU5NjY3IDMxLjYyMDI3MzkyIDYzLjIzNDQ4Mzc4IDI5LjUxMDExNjU4IDU3LjM2MjQ0MjAyIEMyOS4yNzAyMDQ5MyA1Ni42ODg1MTQxIDI5LjAzMDI5MzI3IDU2LjAxNDU4NjE4IDI4Ljc4MzExMTU3IDU1LjMyMDIzNjIxIEMyOC4wMzE2Nzg1NiA1My4yMTEwNzA1NyAyNy4yNzY4MzI1IDUxLjEwMzE0NjU4IDI2LjUyMTgzNTMzIDQ4Ljk5NTI1NDUyIEMyNi4wMDUzMzA1NCA0Ny41NDc0MTk0MyAyNS40ODkwNTI4MSA0Ni4wOTk1MDMzMyAyNC45NzMwMDcyIDQ0LjY1MTUwNDUyIEMyMy43MjEwNjM0NyA0MS4xNDAxNTA4OCAyMi40NjYwNjAxOSAzNy42Mjk5MDAyNSAyMS4yMDkzMzUzMyAzNC4xMjAyNTQ1MiBDMjAuODc5MzM1MzMgMzQuMTIwMjU0NTIgMjAuNTQ5MzM1MzMgMzQuMTIwMjU0NTIgMjAuMjA5MzM1MzMgMzQuMTIwMjU0NTIgWiBNLTAuNzkwNjY0NjcgOTAuMTIwMjU0NTIgQy0xLjQ1MDY2NDY3IDkyLjQzMDI1NDUyIC0yLjExMDY2NDY3IDk0Ljc0MDI1NDUyIC0yLjc5MDY2NDY3IDk3LjEyMDI1NDUyIEMxMi4zODkzMzUzMyA5Ny4xMjAyNTQ1MiAyNy41NjkzMzUzMyA5Ny4xMjAyNTQ1MiA0My4yMDkzMzUzMyA5Ny4xMjAyNTQ1MiBDNDIuNTQ5MzM1MzMgOTQuODEwMjU0NTIgNDEuODg5MzM1MzMgOTIuNTAwMjU0NTIgNDEuMjA5MzM1MzMgOTAuMTIwMjU0NTIgQzI3LjM0OTMzNTMzIDkwLjEyMDI1NDUyIDEzLjQ4OTMzNTMzIDkwLjEyMDI1NDUyIC0wLjc5MDY2NDY3IDkwLjEyMDI1NDUyIFogIiBmaWxsPSIjOUU5RTlFIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMDcuNzkwNjY0NjcyODUxNTYsNDUuODc5NzQ1NDgzMzk4NDQpIi8+Cjwvc3ZnPgo=',
blocks: [
{
opcode: 'login',
From 972a4c883de9c8e24eeb3ac9acd555792e11ca1c Mon Sep 17 00:00:00 2001
From: GoodBoi19 <181642507+Thebloxers998@users.noreply.github.com>
Date: Tue, 4 Feb 2025 19:26:12 +0000
Subject: [PATCH 07/20] Update oauth.js
---
extensions/Thebloxers998/oauth.js | 3 +++
1 file changed, 3 insertions(+)
diff --git a/extensions/Thebloxers998/oauth.js b/extensions/Thebloxers998/oauth.js
index b89133e71f..8f8a1e0645 100644
--- a/extensions/Thebloxers998/oauth.js
+++ b/extensions/Thebloxers998/oauth.js
@@ -79,6 +79,9 @@ class OAuthExtension {
return {
id: 'oauthExtension',
name: 'OAuth Extension',
+ color1: '#FFAB19', // Primary color
+ color2: '#FF8C00', // Secondary color
+ color3: '#E76F00', // Tertiary color
blockIconURI: 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI1NiIgaGVpZ2h0PSIyNTYiPgo8cGF0aCBkPSJNMCAwIEMyMi4wMzg1MjY1MiAxOC44MTE1OTg1NiAzNi40NjU3OTMzNCA0MS4wNjM3MzM3NyA0NC4zNTE1NjI1IDY4LjkxMDE1NjI1IEM0NC42OTMxNjQwNiA3MC4wODgzNTkzNyA0NS4wMzQ3NjU2MyA3MS4yNjY1NjI1IDQ1LjM4NjcxODc1IDcyLjQ4MDQ2ODc1IEM1MS41OTA5Mjc1NSA5OC43NDAxNDMyMiA0OC4xMTkzNTU5NyAxMjguNDA3NTUzODkgMzcuMzUxNTYyNSAxNTIuOTEwMTU2MjUgQzM2LjkyNjY1NTI3IDE1My44OTE0NTUwOCAzNi45MjY2NTUyNyAxNTMuODkxNDU1MDggMzYuNDkzMTY0MDYgMTU0Ljg5MjU3ODEyIEMyNi41NTAxNTk0MyAxNzcuNDE1NDA2MzEgOS4zNjgzODI4MiAxOTcuMDgzNzE0NDMgLTExLjY0ODQzNzUgMjA5LjkxMDE1NjI1IEMtMTIuNzIwOTM3NSAyMTAuNTkzMzU5MzggLTEzLjc5MzQzNzUgMjExLjI3NjU2MjUgLTE0Ljg5ODQzNzUgMjExLjk4MDQ2ODc1IEMtNDIuNzU5MjI3OTQgMjI4Ljk0MjAxNDc4IC03OC4yNTA2MTE4OSAyMzMuOTI2NDg1NDUgLTExMC4wMzAyNzM0NCAyMjYuNzQ3MDcwMzEgQy0xMTcuODE5NDE3MjkgMjI0Ljc3NzM2MzU3IC0xMjUuMjk4MDI2MiAyMjIuMTQwMzMxOTUgLTEzMi42NDg0Mzc1IDIxOC45MTAxNTYyNSBDLTEzMy4zMDI2MzY3MiAyMTguNjI2ODg0NzcgLTEzMy45NTY4MzU5NCAyMTguMzQzNjEzMjggLTEzNC42MzA4NTkzOCAyMTguMDUxNzU3ODEgQy0xNjQuNzI1OTMyMzQgMjA0Ljc2NTg4NDE0IC0xODguNDMyNjIzMzkgMTc5LjE4ODU5MzM5IC0yMDAuNTE5NTMxMjUgMTQ4LjcxMzg2NzE5IEMtMjAyLjQ3ODkwMDc3IDE0My41MTUyMTc0MiAtMjA0LjEzNTA4MjUgMTM4LjI1NDE1Mjc0IC0yMDUuNjQ4NDM3NSAxMzIuOTEwMTU2MjUgQy0yMDUuOTkwMDM5MDYgMTMxLjczMTk1MzEyIC0yMDYuMzMxNjQwNjMgMTMwLjU1Mzc1IC0yMDYuNjgzNTkzNzUgMTI5LjMzOTg0Mzc1IEMtMjE0LjIxNzQzOTk4IDk3LjQ1MjQwMTU3IC0yMDcuODM1NTc0NTYgNjEuNDM0NjUxNjEgLTE5MS4wMDc4MTI1IDMzLjYwNTQ2ODc1IEMtMTcyLjcxOTMxMzkzIDQuNTE1NjA4MTggLTE0NS40NzI3MDQ5NSAtMTQuNzk0NDA5MjYgLTExMi42NDg0Mzc1IC0yNC4wODk4NDM3NSBDLTExMS40NzAyMzQzOCAtMjQuNDMxNDQ1MzEgLTExMC4yOTIwMzEyNSAtMjQuNzczMDQ2ODcgLTEwOS4wNzgxMjUgLTI1LjEyNSBDLTcxLjkxMjE2MjA0IC0zMy45MDU5NjkyNyAtMjkuNDM4MzUxODQgLTI0LjE0NjUyMjQyIDAgMCBaIE0tMTU2LjY0ODQzNzUgMzguOTEwMTU2MjUgQy0xNzIuNjc2OTQzNTIgNTguMDg4NzczMjggLTE4MC4zOTY0OTAzOCA4NC41ODg4MzUyMyAtMTc4LjM3MTA5Mzc1IDEwOS4yOTI5Njg3NSBDLTE3NS40NzE3NjMxNSAxMzUuNzQ1OTA4ODUgLTE2Mi45NTU1MTQxMyAxNTkuNTg0NTMzMDggLTE0Mi42NDg0Mzc1IDE3Ni45MTAxNTYyNSBDLTEyNi41NDMxNjcwNSAxODkuNjk5NjM1NzIgLTEwNi4zMjExMTA2MiAxOTguMDkxNzg4ODEgLTg1LjY0ODQzNzUgMTk4LjkxMDE1NjI1IEMtODQuODg5MTc5NjkgMTk4Ljk1MDExNzE5IC04NC4xMjk5MjE4NyAxOTguOTkwMDc4MTIgLTgzLjM0NzY1NjI1IDE5OS4wMzEyNSBDLTU2LjU4MDI3NzA5IDE5OS43NzYwMDUyMyAtMzEuNDM2MTQxNzYgMTg4LjgxNjI3MjU4IC0xMi4wNTQ0NDMzNiAxNzAuNzY1NjI1IEM1LjI3MjM5MDEyIDE1NC4wMTA3MzQ1MiAxNi4zOTQyODMxMyAxMzAuMDkxODY1NjUgMTcuMzUxNTYyNSAxMDUuOTEwMTU2MjUgQzE3LjM5MTUyMzQ0IDEwNS4xNTA4OTg0NCAxNy40MzE0ODQzNyAxMDQuMzkxNjQwNjIgMTcuNDcyNjU2MjUgMTAzLjYwOTM3NSBDMTguMjE3NDExNDggNzYuODQxOTk1ODQgNy4yNTc2Nzg4MyA1MS42OTc4NjA1MSAtMTAuNzkyOTY4NzUgMzIuMzE2MTYyMTEgQy0yNy41NDc4NTkyMyAxNC45ODkzMjg2MyAtNTEuNDY2NzI4MSAzLjg2NzQzNTYyIC03NS42NDg0Mzc1IDIuOTEwMTU2MjUgQy03Ni43ODczMjQyMiAyLjg1MDIxNDg0IC03Ni43ODczMjQyMiAyLjg1MDIxNDg0IC03Ny45NDkyMTg3NSAyLjc4OTA2MjUgQy0xMDguODU5OTYwMDYgMS45MjkwMjU1MSAtMTM2LjI0OTk3Njk4IDE2LjQzMzI0OTk3IC0xNTYuNjQ4NDM3NSAzOC45MTAxNTYyNSBaICIgZmlsbD0iIzlFOUU5RSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjA4LjY0ODQzNzUsMjcuMDg5ODQzNzUpIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuNzc5NDM0NjYgMC4wMDIyMjA2MSAxLjU1ODg2OTMyIDAuMDA0NDQxMjIgMi4zNjE5MjMyMiAwLjAwNjcyOTEzIEMzLjI0Mjc2MDc3IDAuMDA2ODA0NjYgNC4xMjM1OTgzMyAwLjAwNjg4MDE5IDUuMDMxMTI3OTMgMC4wMDY5NTgwMSBDNS45ODg0MTI5MyAwLjAxMjExOTI5IDYuOTQ1Njk3OTQgMC4wMTcyODA1OCA3LjkzMTk5MTU4IDAuMDIyNTk4MjcgQzkuMzk0ODA4MTIgMC4wMjQ3MjA2OSA5LjM5NDgwODEyIDAuMDI0NzIwNjkgMTAuODg3MTc2NTEgMC4wMjY4ODU5OSBDMTQuMDE1NDI2NzUgMC4wMzI1MDMxOSAxNy4xNDM2MDY1NiAwLjA0NTA1ODU5IDIwLjI3MTgzNTMzIDAuMDU3NzU0NTIgQzIyLjM4NzA2ODY3IDAuMDYyNzY3MyAyNC41MDIzMDMxMyAwLjA2NzMzMDU5IDI2LjYxNzUzODQ1IDAuMDcxNDI2MzkgQzMxLjgxNDgyODI5IDAuMDgyNDc4MiAzNy4wMTIwNzY3OCAwLjA5OTIzMzA1IDQyLjIwOTMzNTMzIDAuMTIwMjU0NTIgQzQ0Ljk5MTE0MDUxIDYuMjUxMzU5MTEgNDcuNTc5MTE3NDUgMTIuNDM1MDc1MzMgNTAuMDM3NDYwMzMgMTguNzAyMjg1NzcgQzUwLjM5MDE1OTkxIDE5LjU5NjU0NzcgNTAuNzQyODU5NSAyMC40OTA4MDk2MyA1MS4xMDYyNDY5NSAyMS40MTIxNzA0MSBDNTIuMjI1NzczMjEgMjQuMjUxNjQ4MTQgNTMuMzQyNjgwOCAyNy4wOTIxNDYzOCA1NC40NTkzMzUzMyAyOS45MzI3NTQ1MiBDNTUuNTU3NzAyMTUgMzIuNzIyNDMxMiA1Ni42NTY2Mzk1MiAzNS41MTE4ODE3NCA1Ny43NTYwODgyNiAzOC4zMDExMzIyIEM1OC40ODMyNDk1MSA0MC4xNDY2MDUxNSA1OS4yMDk1NzI4OCA0MS45OTI0MDg0OCA1OS45MzUwNDMzMyA0My44Mzg1NDY3NSBDNjEuNzc4MzM5NjQgNDguNTIyNzUzMjQgNjMuNjQxMjU5NzcgNTMuMTk3NzI3NjUgNjUuNTM5NDEzNDUgNTcuODYwMDAwNjEgQzY1LjkxMTc3MTI0IDU4Ljc3Nzg2ODUgNjYuMjg0MTI5MDMgNTkuNjk1NzM2MzkgNjYuNjY3NzcwMzkgNjAuNjQxNDE4NDYgQzY3LjM3NzQxMTc2IDYyLjM4NzQ1NzM3IDY4LjA5MTI4MzIxIDY0LjEzMTc4NDgzIDY4LjgwOTk4MjMgNjUuODc0MTE0OTkgQzY5LjEyNTc4MjQ3IDY2LjY1MjMyMTAxIDY5LjQ0MTU4MjY0IDY3LjQzMDUyNzA0IDY5Ljc2Njk1MjUxIDY4LjIzMjMxNTA2IEM3MC4wNDY0MTcyNCA2OC45MTMyNzc0NCA3MC4zMjU4ODE5NiA2OS41OTQyMzk4MSA3MC42MTM4MTUzMSA3MC4yOTU4Mzc0IEM3MS4yMDkzMzUzMyA3Mi4xMjAyNTQ1MiA3MS4yMDkzMzUzMyA3Mi4xMjAyNTQ1MiA3MS4yMDkzMzUzMyA3NS4xMjAyNTQ1MiBDNzkuNDU5MzM1MzMgNzUuMTIwMjU0NTIgODcuNzA5MzM1MzMgNzUuMTIwMjU0NTIgOTYuMjA5MzM1MzMgNzUuMTIwMjU0NTIgQzk2LjIwOTMzNTMzIDgwLjA3MDI1NDUyIDk2LjIwOTMzNTMzIDg1LjAyMDI1NDUyIDk2LjIwOTMzNTMzIDkwLjEyMDI1NDUyIEM5MC4yNjkzMzUzMyA5MC4xMjAyNTQ1MiA4NC4zMjkzMzUzMyA5MC4xMjAyNTQ1MiA3OC4yMDkzMzUzMyA5MC4xMjAyNTQ1MiBDNzkuMTk5MzM1MzMgOTMuNTg1MjU0NTIgNzkuMTk5MzM1MzMgOTMuNTg1MjU0NTIgODAuMjA5MzM1MzMgOTcuMTIwMjU0NTIgQzg1LjQ4OTMzNTMzIDk3LjEyMDI1NDUyIDkwLjc2OTMzNTMzIDk3LjEyMDI1NDUyIDk2LjIwOTMzNTMzIDk3LjEyMDI1NDUyIEM5Ni4yMDkzMzUzMyAxMDIuMDcwMjU0NTIgOTYuMjA5MzM1MzMgMTA3LjAyMDI1NDUyIDk2LjIwOTMzNTMzIDExMi4xMjAyNTQ1MiBDOTEuNzU0MzM1MzMgMTEyLjYxNTI1NDUyIDkxLjc1NDMzNTMzIDExMi42MTUyNTQ1MiA4Ny4yMDkzMzUzMyAxMTMuMTIwMjU0NTIgQzg3LjcxNDY0NzgzIDExNC4zODQ4MjQ4MyA4OC4yMTk5NjAzMyAxMTUuNjQ5Mzk1MTQgODguNzQwNTg1MzMgMTE2Ljk1MjI4NTc3IEM4OS4zOTcxMDI1MiAxMTguNjEyMzM2MzcgOTAuMDUzMzM3ODkgMTIwLjI3MjQ5ODQ1IDkwLjcwOTMzNTMzIDEyMS45MzI3NTQ1MiBDOTEuMjEwMTM2MTEgMTIzLjE4MjgyMjg4IDkxLjIxMDEzNjExIDEyMy4xODI4MjI4OCA5MS43MjEwNTQwOCAxMjQuNDU4MTQ1MTQgQzkyLjE5NDc4NDU1IDEyNS42NjE4MDcyNSA5Mi4xOTQ3ODQ1NSAxMjUuNjYxODA3MjUgOTIuNjc4MDg1MzMgMTI2Ljg4OTc4NTc3IEM5Mi45NzEzNDcwNSAxMjcuNjI4MTc2ODggOTMuMjY0NjA4NzYgMTI4LjM2NjU2Nzk5IDkzLjU2Njc1NzIgMTI5LjEyNzMzNDU5IEM5NC4yMDkzMzUzMyAxMzEuMTIwMjU0NTIgOTQuMjA5MzM1MzMgMTMxLjEyMDI1NDUyIDk0LjIwOTMzNTMzIDEzNC4xMjAyNTQ1MiBDODEuOTk5MzM1MzMgMTM0LjEyMDI1NDUyIDY5Ljc4OTMzNTMzIDEzNC4xMjAyNTQ1MiA1Ny4yMDkzMzUzMyAxMzQuMTIwMjU0NTIgQzUyLjIwOTMzNTMzIDEyMi4xMjAyNTQ1MiA1Mi4yMDkzMzUzMyAxMjIuMTIwMjU0NTIgNDkuMjA5MzM1MzMgMTEyLjEyMDI1NDUyIEMzMC4wNjkzMzUzMyAxMTIuMTIwMjU0NTIgMTAuOTI5MzM1MzMgMTEyLjEyMDI1NDUyIC04Ljc5MDY2NDY3IDExMi4xMjAyNTQ1MiBDLTkuNzgwNjY0NjcgMTE1LjQyMDI1NDUyIC0xMC43NzA2NjQ2NyAxMTguNzIwMjU0NTIgLTExLjc5MDY2NDY3IDEyMi4xMjAyNTQ1MiBDLTEzLjQ0MDY2NDY3IDEyNi4wODAyNTQ1MiAtMTUuMDkwNjY0NjcgMTMwLjA0MDI1NDUyIC0xNi43OTA2NjQ2NyAxMzQuMTIwMjU0NTIgQy0yOS4wMDA2NjQ2NyAxMzQuMTIwMjU0NTIgLTQxLjIxMDY2NDY3IDEzNC4xMjAyNTQ1MiAtNTMuNzkwNjY0NjcgMTM0LjEyMDI1NDUyIEMtNTMuMTI2NDQxNjkgMTMwLjc5OTEzOTYgLTUyLjU1MzU4NjExIDEyOC4yMDE5NDI1MyAtNTEuMzgwNTA4NDIgMTI1LjEzMTk3MzI3IEMtNTAuOTc5Mjg3NzIgMTI0LjA3MzMzMDY5IC01MC45NzkyODc3MiAxMjQuMDczMzMwNjkgLTUwLjU2OTk2MTU1IDEyMi45OTMzMDEzOSBDLTUwLjI5MjE2ODU4IDEyMi4yNzIwNzA5MiAtNTAuMDE0Mzc1NjEgMTIxLjU1MDg0MDQ1IC00OS43MjgxNjQ2NyAxMjAuODA3NzU0NTIgQy00OS4zMDU2NzQ0NCAxMTkuNjk2OTA0OTEgLTQ5LjMwNTY3NDQ0IDExOS42OTY5MDQ5MSAtNDguODc0NjQ5MDUgMTE4LjU2MzYxMzg5IEMtNDguMTgzNDc4OTIgMTE2Ljc0NzgyNzk2IC00Ny40ODc1NDc3OSAxMTQuOTMzODU1NTIgLTQ2Ljc5MDY2NDY3IDExMy4xMjAyNTQ1MiBDLTQ5Ljc2MDY2NDY3IDExMi43OTAyNTQ1MiAtNTIuNzMwNjY0NjcgMTEyLjQ2MDI1NDUyIC01NS43OTA2NjQ2NyAxMTIuMTIwMjU0NTIgQy01NS43OTA2NjQ2NyAxMDcuMTcwMjU0NTIgLTU1Ljc5MDY2NDY3IDEwMi4yMjAyNTQ1MiAtNTUuNzkwNjY0NjcgOTcuMTIwMjU0NTIgQy01MC41MTA2NjQ2NyA5Ny4xMjAyNTQ1MiAtNDUuMjMwNjY0NjcgOTcuMTIwMjU0NTIgLTM5Ljc5MDY2NDY3IDk3LjEyMDI1NDUyIEMtMzkuMTMwNjY0NjcgOTQuODEwMjU0NTIgLTM4LjQ3MDY2NDY3IDkyLjUwMDI1NDUyIC0zNy43OTA2NjQ2NyA5MC4xMjAyNTQ1MiBDLTQzLjczMDY2NDY3IDkwLjEyMDI1NDUyIC00OS42NzA2NjQ2NyA5MC4xMjAyNTQ1MiAtNTUuNzkwNjY0NjcgOTAuMTIwMjU0NTIgQy01NS43OTA2NjQ2NyA4NS4xNzAyNTQ1MiAtNTUuNzkwNjY0NjcgODAuMjIwMjU0NTIgLTU1Ljc5MDY2NDY3IDc1LjEyMDI1NDUyIEMtNDcuNTQwNjY0NjcgNzUuMTIwMjU0NTIgLTM5LjI5MDY2NDY3IDc1LjEyMDI1NDUyIC0zMC43OTA2NjQ2NyA3NS4xMjAyNTQ1MiBDLTMwLjQ2MDY2NDY3IDczLjQ3MDI1NDUyIC0zMC4xMzA2NjQ2NyA3MS44MjAyNTQ1MiAtMjkuNzkwNjY0NjcgNzAuMTIwMjU0NTIgQy0yOS4zNTY1NzU4MyA2OC44MTI0MDQ1NiAtMjguODg3MjM5MjEgNjcuNTE1NzA5OTggLTI4LjM4Mjk0OTgzIDY2LjIzMzI5MTYzIEMtMjcuOTU1MjcwNjEgNjUuMTM2NzU1MTQgLTI3Ljk1NTI3MDYxIDY1LjEzNjc1NTE0IC0yNy41MTg5NTE0MiA2NC4wMTgwNjY0MSBDLTI3LjIwOTAwNzQyIDYzLjIzNTgxMTkyIC0yNi44OTkwNjM0MiA2Mi40NTM1NTc0MyAtMjYuNTc5NzI3MTcgNjEuNjQ3NTk4MjcgQy0yNi4wOTMyMzk1MiA2MC40MDUyNzE4NCAtMjYuMDkzMjM5NTIgNjAuNDA1MjcxODQgLTI1LjU5NjkyMzgzIDU5LjEzNzg0NzkgQy0yNC41NDA0OTM5NyA1Ni40NDI4OTc0OSAtMjMuNDc4MjE0MDQgNTMuNzUwMjk3MzYgLTIyLjQxNTY2NDY3IDUxLjA1Nzc1NDUyIEMtMjEuNjg4NjgwNTUgNDkuMjA3NjI3NzYgLTIwLjk2MjAzODM5IDQ3LjM1NzM2NjU5IC0yMC4yMzU3MzMwMyA0NS41MDY5NzMyNyBDLTE4Ljc3OTY4MzY3IDQxLjc5ODk3MzEgLTE3LjMyMTM4MjQ0IDM4LjA5MTg3MDIyIC0xNS44NjE0NjU0NSAzNC4zODUzOTEyNCBDLTE0LjAwMzg3MjU1IDI5LjY2NjY4MzE1IC0xMi4xNTg0NzMxNyAyNC45NDMzMjA2NSAtMTAuMzE4MDA4NDIgMjAuMjE3OTEwNzcgQy05LjgwNjIzMTMyIDE4LjkwNjEwMjQ1IC05LjI5NDM1Mzc3IDE3LjU5NDMzMzMyIC04Ljc4MjM2Mzg5IDE2LjI4MjYwODAzIEMtNy44NDYzMDQ5OSAxMy44ODM5MzcxMSAtNi45MTE2ODAwOCAxMS40ODQ3MDU5NyAtNS45Nzg2NTI5NSA5LjA4NDg1NDEzIEMtNS41NjcyODA4OCA4LjAzNDM0ODc1IC01LjE1NTkwODgxIDYuOTgzODQzMzggLTQuNzMyMDcwOTIgNS45MDE1MDQ1MiBDLTQuMzc4MzAzODMgNC45OTQ2NDkwNSAtNC4wMjQ1MzY3NCA0LjA4Nzc5MzU4IC0zLjY2MDA0OTQ0IDMuMTUzNDU3NjQgQy0yLjM3OTk5Mzk4IDAuMTU5ODMxNzMgLTIuMzc5OTkzOTggMC4xNTk4MzE3MyAwIDAgWiBNMjAuMjA5MzM1MzMgMzQuMTIwMjU0NTIgQzE2LjgxMTU1MDQyIDQxLjQ0MTY3MiAxMy45NzAzMDk5MyA0OC45Mjk2MjIxMiAxMS4yMDc4NzA0OCA1Ni41MDY3MjkxMyBDMTAuNDUxMzgyMzUgNTguNTc5NTQ2MDkgOS42ODgwNjYyNSA2MC42NDk3NjM3OSA4LjkyNDE3OTA4IDYyLjcxOTg2Mzg5IEM4LjQ0MDY5OTkyIDY0LjAzOTM3NjU3IDcuOTU3NjEyMjcgNjUuMzU5MDMyNzggNy40NzQ5NjAzMyA2Ni42Nzg4NDgyNyBDNy4wMzk1Nzk0NyA2Ny44Njc5Mjc4NiA2LjYwNDE5ODYxIDY5LjA1NzAwNzQ1IDYuMTU1NjI0MzkgNzAuMjgyMTE5NzUgQzUuMTAzOTAxNTkgNzIuOTM3ODUxOCA1LjEwMzkwMTU5IDcyLjkzNzg1MTggNS4yMDkzMzUzMyA3NS4xMjAyNTQ1MiBDMTUuMTA5MzM1MzMgNzUuMTIwMjU0NTIgMjUuMDA5MzM1MzMgNzUuMTIwMjU0NTIgMzUuMjA5MzM1MzMgNzUuMTIwMjU0NTIgQzMzLjQxMTgzNzk3IDY5LjEyODU5NjY3IDMxLjYyMDI3MzkyIDYzLjIzNDQ4Mzc4IDI5LjUxMDExNjU4IDU3LjM2MjQ0MjAyIEMyOS4yNzAyMDQ5MyA1Ni42ODg1MTQxIDI5LjAzMDI5MzI3IDU2LjAxNDU4NjE4IDI4Ljc4MzExMTU3IDU1LjMyMDIzNjIxIEMyOC4wMzE2Nzg1NiA1My4yMTEwNzA1NyAyNy4yNzY4MzI1IDUxLjEwMzE0NjU4IDI2LjUyMTgzNTMzIDQ4Ljk5NTI1NDUyIEMyNi4wMDUzMzA1NCA0Ny41NDc0MTk0MyAyNS40ODkwNTI4MSA0Ni4wOTk1MDMzMyAyNC45NzMwMDcyIDQ0LjY1MTUwNDUyIEMyMy43MjEwNjM0NyA0MS4xNDAxNTA4OCAyMi40NjYwNjAxOSAzNy42Mjk5MDAyNSAyMS4yMDkzMzUzMyAzNC4xMjAyNTQ1MiBDMjAuODc5MzM1MzMgMzQuMTIwMjU0NTIgMjAuNTQ5MzM1MzMgMzQuMTIwMjU0NTIgMjAuMjA5MzM1MzMgMzQuMTIwMjU0NTIgWiBNLTAuNzkwNjY0NjcgOTAuMTIwMjU0NTIgQy0xLjQ1MDY2NDY3IDkyLjQzMDI1NDUyIC0yLjExMDY2NDY3IDk0Ljc0MDI1NDUyIC0yLjc5MDY2NDY3IDk3LjEyMDI1NDUyIEMxMi4zODkzMzUzMyA5Ny4xMjAyNTQ1MiAyNy41NjkzMzUzMyA5Ny4xMjAyNTQ1MiA0My4yMDkzMzUzMyA5Ny4xMjAyNTQ1MiBDNDIuNTQ5MzM1MzMgOTQuODEwMjU0NTIgNDEuODg5MzM1MzMgOTIuNTAwMjU0NTIgNDEuMjA5MzM1MzMgOTAuMTIwMjU0NTIgQzI3LjM0OTMzNTMzIDkwLjEyMDI1NDUyIDEzLjQ4OTMzNTMzIDkwLjEyMDI1NDUyIC0wLjc5MDY2NDY3IDkwLjEyMDI1NDUyIFogIiBmaWxsPSIjOUU5RTlFIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMDcuNzkwNjY0NjcyODUxNTYsNDUuODc5NzQ1NDgzMzk4NDQpIi8+Cjwvc3ZnPgo=',
menuIconURI: 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI1NiIgaGVpZ2h0PSIyNTYiPgo8cGF0aCBkPSJNMCAwIEMyMi4wMzg1MjY1MiAxOC44MTE1OTg1NiAzNi40NjU3OTMzNCA0MS4wNjM3MzM3NyA0NC4zNTE1NjI1IDY4LjkxMDE1NjI1IEM0NC42OTMxNjQwNiA3MC4wODgzNTkzNyA0NS4wMzQ3NjU2MyA3MS4yNjY1NjI1IDQ1LjM4NjcxODc1IDcyLjQ4MDQ2ODc1IEM1MS41OTA5Mjc1NSA5OC43NDAxNDMyMiA0OC4xMTkzNTU5NyAxMjguNDA3NTUzODkgMzcuMzUxNTYyNSAxNTIuOTEwMTU2MjUgQzM2LjkyNjY1NTI3IDE1My44OTE0NTUwOCAzNi45MjY2NTUyNyAxNTMuODkxNDU1MDggMzYuNDkzMTY0MDYgMTU0Ljg5MjU3ODEyIEMyNi41NTAxNTk0MyAxNzcuNDE1NDA2MzEgOS4zNjgzODI4MiAxOTcuMDgzNzE0NDMgLTExLjY0ODQzNzUgMjA5LjkxMDE1NjI1IEMtMTIuNzIwOTM3NSAyMTAuNTkzMzU5MzggLTEzLjc5MzQzNzUgMjExLjI3NjU2MjUgLTE0Ljg5ODQzNzUgMjExLjk4MDQ2ODc1IEMtNDIuNzU5MjI3OTQgMjI4Ljk0MjAxNDc4IC03OC4yNTA2MTE4OSAyMzMuOTI2NDg1NDUgLTExMC4wMzAyNzM0NCAyMjYuNzQ3MDcwMzEgQy0xMTcuODE5NDE3MjkgMjI0Ljc3NzM2MzU3IC0xMjUuMjk4MDI2MiAyMjIuMTQwMzMxOTUgLTEzMi42NDg0Mzc1IDIxOC45MTAxNTYyNSBDLTEzMy4zMDI2MzY3MiAyMTguNjI2ODg0NzcgLTEzMy45NTY4MzU5NCAyMTguMzQzNjEzMjggLTEzNC42MzA4NTkzOCAyMTguMDUxNzU3ODEgQy0xNjQuNzI1OTMyMzQgMjA0Ljc2NTg4NDE0IC0xODguNDMyNjIzMzkgMTc5LjE4ODU5MzM5IC0yMDAuNTE5NTMxMjUgMTQ4LjcxMzg2NzE5IEMtMjAyLjQ3ODkwMDc3IDE0My41MTUyMTc0MiAtMjA0LjEzNTA4MjUgMTM4LjI1NDE1Mjc0IC0yMDUuNjQ4NDM3NSAxMzIuOTEwMTU2MjUgQy0yMDUuOTkwMDM5MDYgMTMxLjczMTk1MzEyIC0yMDYuMzMxNjQwNjMgMTMwLjU1Mzc1IC0yMDYuNjgzNTkzNzUgMTI5LjMzOTg0Mzc1IEMtMjE0LjIxNzQzOTk4IDk3LjQ1MjQwMTU3IC0yMDcuODM1NTc0NTYgNjEuNDM0NjUxNjEgLTE5MS4wMDc4MTI1IDMzLjYwNTQ2ODc1IEMtMTcyLjcxOTMxMzkzIDQuNTE1NjA4MTggLTE0NS40NzI3MDQ5NSAtMTQuNzk0NDA5MjYgLTExMi42NDg0Mzc1IC0yNC4wODk4NDM3NSBDLTExMS40NzAyMzQzOCAtMjQuNDMxNDQ1MzEgLTExMC4yOTIwMzEyNSAtMjQuNzczMDQ2ODcgLTEwOS4wNzgxMjUgLTI1LjEyNSBDLTcxLjkxMjE2MjA0IC0zMy45MDU5NjkyNyAtMjkuNDM4MzUxODQgLTI0LjE0NjUyMjQyIDAgMCBaIE0tMTU2LjY0ODQzNzUgMzguOTEwMTU2MjUgQy0xNzIuNjc2OTQzNTIgNTguMDg4NzczMjggLTE4MC4zOTY0OTAzOCA4NC41ODg4MzUyMyAtMTc4LjM3MTA5Mzc1IDEwOS4yOTI5Njg3NSBDLTE3NS40NzE3NjMxNSAxMzUuNzQ1OTA4ODUgLTE2Mi45NTU1MTQxMyAxNTkuNTg0NTMzMDggLTE0Mi42NDg0Mzc1IDE3Ni45MTAxNTYyNSBDLTEyNi41NDMxNjcwNSAxODkuNjk5NjM1NzIgLTEwNi4zMjExMTA2MiAxOTguMDkxNzg4ODEgLTg1LjY0ODQzNzUgMTk4LjkxMDE1NjI1IEMtODQuODg5MTc5NjkgMTk4Ljk1MDExNzE5IC04NC4xMjk5MjE4NyAxOTguOTkwMDc4MTIgLTgzLjM0NzY1NjI1IDE5OS4wMzEyNSBDLTU2LjU4MDI3NzA5IDE5OS43NzYwMDUyMyAtMzEuNDM2MTQxNzYgMTg4LjgxNjI3MjU4IC0xMi4wNTQ0NDMzNiAxNzAuNzY1NjI1IEM1LjI3MjM5MDEyIDE1NC4wMTA3MzQ1MiAxNi4zOTQyODMxMyAxMzAuMDkxODY1NjUgMTcuMzUxNTYyNSAxMDUuOTEwMTU2MjUgQzE3LjM5MTUyMzQ0IDEwNS4xNTA4OTg0NCAxNy40MzE0ODQzNyAxMDQuMzkxNjQwNjIgMTcuNDcyNjU2MjUgMTAzLjYwOTM3NSBDMTguMjE3NDExNDggNzYuODQxOTk1ODQgNy4yNTc2Nzg4MyA1MS42OTc4NjA1MSAtMTAuNzkyOTY4NzUgMzIuMzE2MTYyMTEgQy0yNy41NDc4NTkyMyAxNC45ODkzMjg2MyAtNTEuNDY2NzI4MSAzLjg2NzQzNTYyIC03NS42NDg0Mzc1IDIuOTEwMTU2MjUgQy03Ni43ODczMjQyMiAyLjg1MDIxNDg0IC03Ni43ODczMjQyMiAyLjg1MDIxNDg0IC03Ny45NDkyMTg3NSAyLjc4OTA2MjUgQy0xMDguODU5OTYwMDYgMS45MjkwMjU1MSAtMTM2LjI0OTk3Njk4IDE2LjQzMzI0OTk3IC0xNTYuNjQ4NDM3NSAzOC45MTAxNTYyNSBaICIgZmlsbD0iIzlFOUU5RSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjA4LjY0ODQzNzUsMjcuMDg5ODQzNzUpIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuNzc5NDM0NjYgMC4wMDIyMjA2MSAxLjU1ODg2OTMyIDAuMDA0NDQxMjIgMi4zNjE5MjMyMiAwLjAwNjcyOTEzIEMzLjI0Mjc2MDc3IDAuMDA2ODA0NjYgNC4xMjM1OTgzMyAwLjAwNjg4MDE5IDUuMDMxMTI3OTMgMC4wMDY5NTgwMSBDNS45ODg0MTI5MyAwLjAxMjExOTI5IDYuOTQ1Njk3OTQgMC4wMTcyODA1OCA3LjkzMTk5MTU4IDAuMDIyNTk4MjcgQzkuMzk0ODA4MTIgMC4wMjQ3MjA2OSA5LjM5NDgwODEyIDAuMDI0NzIwNjkgMTAuODg3MTc2NTEgMC4wMjY4ODU5OSBDMTQuMDE1NDI2NzUgMC4wMzI1MDMxOSAxNy4xNDM2MDY1NiAwLjA0NTA1ODU5IDIwLjI3MTgzNTMzIDAuMDU3NzU0NTIgQzIyLjM4NzA2ODY3IDAuMDYyNzY3MyAyNC41MDIzMDMxMyAwLjA2NzMzMDU5IDI2LjYxNzUzODQ1IDAuMDcxNDI2MzkgQzMxLjgxNDgyODI5IDAuMDgyNDc4MiAzNy4wMTIwNzY3OCAwLjA5OTIzMzA1IDQyLjIwOTMzNTMzIDAuMTIwMjU0NTIgQzQ0Ljk5MTE0MDUxIDYuMjUxMzU5MTEgNDcuNTc5MTE3NDUgMTIuNDM1MDc1MzMgNTAuMDM3NDYwMzMgMTguNzAyMjg1NzcgQzUwLjM5MDE1OTkxIDE5LjU5NjU0NzcgNTAuNzQyODU5NSAyMC40OTA4MDk2MyA1MS4xMDYyNDY5NSAyMS40MTIxNzA0MSBDNTIuMjI1NzczMjEgMjQuMjUxNjQ4MTQgNTMuMzQyNjgwOCAyNy4wOTIxNDYzOCA1NC40NTkzMzUzMyAyOS45MzI3NTQ1MiBDNTUuNTU3NzAyMTUgMzIuNzIyNDMxMiA1Ni42NTY2Mzk1MiAzNS41MTE4ODE3NCA1Ny43NTYwODgyNiAzOC4zMDExMzIyIEM1OC40ODMyNDk1MSA0MC4xNDY2MDUxNSA1OS4yMDk1NzI4OCA0MS45OTI0MDg0OCA1OS45MzUwNDMzMyA0My44Mzg1NDY3NSBDNjEuNzc4MzM5NjQgNDguNTIyNzUzMjQgNjMuNjQxMjU5NzcgNTMuMTk3NzI3NjUgNjUuNTM5NDEzNDUgNTcuODYwMDAwNjEgQzY1LjkxMTc3MTI0IDU4Ljc3Nzg2ODUgNjYuMjg0MTI5MDMgNTkuNjk1NzM2MzkgNjYuNjY3NzcwMzkgNjAuNjQxNDE4NDYgQzY3LjM3NzQxMTc2IDYyLjM4NzQ1NzM3IDY4LjA5MTI4MzIxIDY0LjEzMTc4NDgzIDY4LjgwOTk4MjMgNjUuODc0MTE0OTkgQzY5LjEyNTc4MjQ3IDY2LjY1MjMyMTAxIDY5LjQ0MTU4MjY0IDY3LjQzMDUyNzA0IDY5Ljc2Njk1MjUxIDY4LjIzMjMxNTA2IEM3MC4wNDY0MTcyNCA2OC45MTMyNzc0NCA3MC4zMjU4ODE5NiA2OS41OTQyMzk4MSA3MC42MTM4MTUzMSA3MC4yOTU4Mzc0IEM3MS4yMDkzMzUzMyA3Mi4xMjAyNTQ1MiA3MS4yMDkzMzUzMyA3Mi4xMjAyNTQ1MiA3MS4yMDkzMzUzMyA3NS4xMjAyNTQ1MiBDNzkuNDU5MzM1MzMgNzUuMTIwMjU0NTIgODcuNzA5MzM1MzMgNzUuMTIwMjU0NTIgOTYuMjA5MzM1MzMgNzUuMTIwMjU0NTIgQzk2LjIwOTMzNTMzIDgwLjA3MDI1NDUyIDk2LjIwOTMzNTMzIDg1LjAyMDI1NDUyIDk2LjIwOTMzNTMzIDkwLjEyMDI1NDUyIEM5MC4yNjkzMzUzMyA5MC4xMjAyNTQ1MiA4NC4zMjkzMzUzMyA5MC4xMjAyNTQ1MiA3OC4yMDkzMzUzMyA5MC4xMjAyNTQ1MiBDNzkuMTk5MzM1MzMgOTMuNTg1MjU0NTIgNzkuMTk5MzM1MzMgOTMuNTg1MjU0NTIgODAuMjA5MzM1MzMgOTcuMTIwMjU0NTIgQzg1LjQ4OTMzNTMzIDk3LjEyMDI1NDUyIDkwLjc2OTMzNTMzIDk3LjEyMDI1NDUyIDk2LjIwOTMzNTMzIDk3LjEyMDI1NDUyIEM5Ni4yMDkzMzUzMyAxMDIuMDcwMjU0NTIgOTYuMjA5MzM1MzMgMTA3LjAyMDI1NDUyIDk2LjIwOTMzNTMzIDExMi4xMjAyNTQ1MiBDOTEuNzU0MzM1MzMgMTEyLjYxNTI1NDUyIDkxLjc1NDMzNTMzIDExMi42MTUyNTQ1MiA4Ny4yMDkzMzUzMyAxMTMuMTIwMjU0NTIgQzg3LjcxNDY0NzgzIDExNC4zODQ4MjQ4MyA4OC4yMTk5NjAzMyAxMTUuNjQ5Mzk1MTQgODguNzQwNTg1MzMgMTE2Ljk1MjI4NTc3IEM4OS4zOTcxMDI1MiAxMTguNjEyMzM2MzcgOTAuMDUzMzM3ODkgMTIwLjI3MjQ5ODQ1IDkwLjcwOTMzNTMzIDEyMS45MzI3NTQ1MiBDOTEuMjEwMTM2MTEgMTIzLjE4MjgyMjg4IDkxLjIxMDEzNjExIDEyMy4xODI4MjI4OCA5MS43MjEwNTQwOCAxMjQuNDU4MTQ1MTQgQzkyLjE5NDc4NDU1IDEyNS42NjE4MDcyNSA5Mi4xOTQ3ODQ1NSAxMjUuNjYxODA3MjUgOTIuNjc4MDg1MzMgMTI2Ljg4OTc4NTc3IEM5Mi45NzEzNDcwNSAxMjcuNjI4MTc2ODggOTMuMjY0NjA4NzYgMTI4LjM2NjU2Nzk5IDkzLjU2Njc1NzIgMTI5LjEyNzMzNDU5IEM5NC4yMDkzMzUzMyAxMzEuMTIwMjU0NTIgOTQuMjA5MzM1MzMgMTMxLjEyMDI1NDUyIDk0LjIwOTMzNTMzIDEzNC4xMjAyNTQ1MiBDODEuOTk5MzM1MzMgMTM0LjEyMDI1NDUyIDY5Ljc4OTMzNTMzIDEzNC4xMjAyNTQ1MiA1Ny4yMDkzMzUzMyAxMzQuMTIwMjU0NTIgQzUyLjIwOTMzNTMzIDEyMi4xMjAyNTQ1MiA1Mi4yMDkzMzUzMyAxMjIuMTIwMjU0NTIgNDkuMjA5MzM1MzMgMTEyLjEyMDI1NDUyIEMzMC4wNjkzMzUzMyAxMTIuMTIwMjU0NTIgMTAuOTI5MzM1MzMgMTEyLjEyMDI1NDUyIC04Ljc5MDY2NDY3IDExMi4xMjAyNTQ1MiBDLTkuNzgwNjY0NjcgMTE1LjQyMDI1NDUyIC0xMC43NzA2NjQ2NyAxMTguNzIwMjU0NTIgLTExLjc5MDY2NDY3IDEyMi4xMjAyNTQ1MiBDLTEzLjQ0MDY2NDY3IDEyNi4wODAyNTQ1MiAtMTUuMDkwNjY0NjcgMTMwLjA0MDI1NDUyIC0xNi43OTA2NjQ2NyAxMzQuMTIwMjU0NTIgQy0yOS4wMDA2NjQ2NyAxMzQuMTIwMjU0NTIgLTQxLjIxMDY2NDY3IDEzNC4xMjAyNTQ1MiAtNTMuNzkwNjY0NjcgMTM0LjEyMDI1NDUyIEMtNTMuMTI2NDQxNjkgMTMwLjc5OTEzOTYgLTUyLjU1MzU4NjExIDEyOC4yMDE5NDI1MyAtNTEuMzgwNTA4NDIgMTI1LjEzMTk3MzI3IEMtNTAuOTc5Mjg3NzIgMTI0LjA3MzMzMDY5IC01MC45NzkyODc3MiAxMjQuMDczMzMwNjkgLTUwLjU2OTk2MTU1IDEyMi45OTMzMDEzOSBDLTUwLjI5MjE2ODU4IDEyMi4yNzIwNzA5MiAtNTAuMDE0Mzc1NjEgMTIxLjU1MDg0MDQ1IC00OS43MjgxNjQ2NyAxMjAuODA3NzU0NTIgQy00OS4zMDU2NzQ0NCAxMTkuNjk2OTA0OTEgLTQ5LjMwNTY3NDQ0IDExOS42OTY5MDQ5MSAtNDguODc0NjQ5MDUgMTE4LjU2MzYxMzg5IEMtNDguMTgzNDc4OTIgMTE2Ljc0NzgyNzk2IC00Ny40ODc1NDc3OSAxMTQuOTMzODU1NTIgLTQ2Ljc5MDY2NDY3IDExMy4xMjAyNTQ1MiBDLTQ5Ljc2MDY2NDY3IDExMi43OTAyNTQ1MiAtNTIuNzMwNjY0NjcgMTEyLjQ2MDI1NDUyIC01NS43OTA2NjQ2NyAxMTIuMTIwMjU0NTIgQy01NS43OTA2NjQ2NyAxMDcuMTcwMjU0NTIgLTU1Ljc5MDY2NDY3IDEwMi4yMjAyNTQ1MiAtNTUuNzkwNjY0NjcgOTcuMTIwMjU0NTIgQy01MC41MTA2NjQ2NyA5Ny4xMjAyNTQ1MiAtNDUuMjMwNjY0NjcgOTcuMTIwMjU0NTIgLTM5Ljc5MDY2NDY3IDk3LjEyMDI1NDUyIEMtMzkuMTMwNjY0NjcgOTQuODEwMjU0NTIgLTM4LjQ3MDY2NDY3IDkyLjUwMDI1NDUyIC0zNy43OTA2NjQ2NyA5MC4xMjAyNTQ1MiBDLTQzLjczMDY2NDY3IDkwLjEyMDI1NDUyIC00OS42NzA2NjQ2NyA5MC4xMjAyNTQ1MiAtNTUuNzkwNjY0NjcgOTAuMTIwMjU0NTIgQy01NS43OTA2NjQ2NyA4NS4xNzAyNTQ1MiAtNTUuNzkwNjY0NjcgODAuMjIwMjU0NTIgLTU1Ljc5MDY2NDY3IDc1LjEyMDI1NDUyIEMtNDcuNTQwNjY0NjcgNzUuMTIwMjU0NTIgLTM5LjI5MDY2NDY3IDc1LjEyMDI1NDUyIC0zMC43OTA2NjQ2NyA3NS4xMjAyNTQ1MiBDLTMwLjQ2MDY2NDY3IDczLjQ3MDI1NDUyIC0zMC4xMzA2NjQ2NyA3MS44MjAyNTQ1MiAtMjkuNzkwNjY0NjcgNzAuMTIwMjU0NTIgQy0yOS4zNTY1NzU4MyA2OC44MTI0MDQ1NiAtMjguODg3MjM5MjEgNjcuNTE1NzA5OTggLTI4LjM4Mjk0OTgzIDY2LjIzMzI5MTYzIEMtMjcuOTU1MjcwNjEgNjUuMTM2NzU1MTQgLTI3Ljk1NTI3MDYxIDY1LjEzNjc1NTE0IC0yNy41MTg5NTE0MiA2NC4wMTgwNjY0MSBDLTI3LjIwOTAwNzQyIDYzLjIzNTgxMTkyIC0yNi44OTkwNjM0MiA2Mi40NTM1NTc0MyAtMjYuNTc5NzI3MTcgNjEuNjQ3NTk4MjcgQy0yNi4wOTMyMzk1MiA2MC40MDUyNzE4NCAtMjYuMDkzMjM5NTIgNjAuNDA1MjcxODQgLTI1LjU5NjkyMzgzIDU5LjEzNzg0NzkgQy0yNC41NDA0OTM5NyA1Ni40NDI4OTc0OSAtMjMuNDc4MjE0MDQgNTMuNzUwMjk3MzYgLTIyLjQxNTY2NDY3IDUxLjA1Nzc1NDUyIEMtMjEuNjg4NjgwNTUgNDkuMjA3NjI3NzYgLTIwLjk2MjAzODM5IDQ3LjM1NzM2NjU5IC0yMC4yMzU3MzMwMyA0NS41MDY5NzMyNyBDLTE4Ljc3OTY4MzY3IDQxLjc5ODk3MzEgLTE3LjMyMTM4MjQ0IDM4LjA5MTg3MDIyIC0xNS44NjE0NjU0NSAzNC4zODUzOTEyNCBDLTE0LjAwMzg3MjU1IDI5LjY2NjY4MzE1IC0xMi4xNTg0NzMxNyAyNC45NDMzMjA2NSAtMTAuMzE4MDA4NDIgMjAuMjE3OTEwNzcgQy05LjgwNjIzMTMyIDE4LjkwNjEwMjQ1IC05LjI5NDM1Mzc3IDE3LjU5NDMzMzMyIC04Ljc4MjM2Mzg5IDE2LjI4MjYwODAzIEMtNy44NDYzMDQ5OSAxMy44ODM5MzcxMSAtNi45MTE2ODAwOCAxMS40ODQ3MDU5NyAtNS45Nzg2NTI5NSA5LjA4NDg1NDEzIEMtNS41NjcyODA4OCA4LjAzNDM0ODc1IC01LjE1NTkwODgxIDYuOTgzODQzMzggLTQuNzMyMDcwOTIgNS45MDE1MDQ1MiBDLTQuMzc4MzAzODMgNC45OTQ2NDkwNSAtNC4wMjQ1MzY3NCA0LjA4Nzc5MzU4IC0zLjY2MDA0OTQ0IDMuMTUzNDU3NjQgQy0yLjM3OTk5Mzk4IDAuMTU5ODMxNzMgLTIuMzc5OTkzOTggMC4xNTk4MzE3MyAwIDAgWiBNMjAuMjA5MzM1MzMgMzQuMTIwMjU0NTIgQzE2LjgxMTU1MDQyIDQxLjQ0MTY3MiAxMy45NzAzMDk5MyA0OC45Mjk2MjIxMiAxMS4yMDc4NzA0OCA1Ni41MDY3MjkxMyBDMTAuNDUxMzgyMzUgNTguNTc5NTQ2MDkgOS42ODgwNjYyNSA2MC42NDk3NjM3OSA4LjkyNDE3OTA4IDYyLjcxOTg2Mzg5IEM4LjQ0MDY5OTkyIDY0LjAzOTM3NjU3IDcuOTU3NjEyMjcgNjUuMzU5MDMyNzggNy40NzQ5NjAzMyA2Ni42Nzg4NDgyNyBDNy4wMzk1Nzk0NyA2Ny44Njc5Mjc4NiA2LjYwNDE5ODYxIDY5LjA1NzAwNzQ1IDYuMTU1NjI0MzkgNzAuMjgyMTE5NzUgQzUuMTAzOTAxNTkgNzIuOTM3ODUxOCA1LjEwMzkwMTU5IDcyLjkzNzg1MTggNS4yMDkzMzUzMyA3NS4xMjAyNTQ1MiBDMTUuMTA5MzM1MzMgNzUuMTIwMjU0NTIgMjUuMDA5MzM1MzMgNzUuMTIwMjU0NTIgMzUuMjA5MzM1MzMgNzUuMTIwMjU0NTIgQzMzLjQxMTgzNzk3IDY5LjEyODU5NjY3IDMxLjYyMDI3MzkyIDYzLjIzNDQ4Mzc4IDI5LjUxMDExNjU4IDU3LjM2MjQ0MjAyIEMyOS4yNzAyMDQ5MyA1Ni42ODg1MTQxIDI5LjAzMDI5MzI3IDU2LjAxNDU4NjE4IDI4Ljc4MzExMTU3IDU1LjMyMDIzNjIxIEMyOC4wMzE2Nzg1NiA1My4yMTEwNzA1NyAyNy4yNzY4MzI1IDUxLjEwMzE0NjU4IDI2LjUyMTgzNTMzIDQ4Ljk5NTI1NDUyIEMyNi4wMDUzMzA1NCA0Ny41NDc0MTk0MyAyNS40ODkwNTI4MSA0Ni4wOTk1MDMzMyAyNC45NzMwMDcyIDQ0LjY1MTUwNDUyIEMyMy43MjEwNjM0NyA0MS4xNDAxNTA4OCAyMi40NjYwNjAxOSAzNy42Mjk5MDAyNSAyMS4yMDkzMzUzMyAzNC4xMjAyNTQ1MiBDMjAuODc5MzM1MzMgMzQuMTIwMjU0NTIgMjAuNTQ5MzM1MzMgMzQuMTIwMjU0NTIgMjAuMjA5MzM1MzMgMzQuMTIwMjU0NTIgWiBNLTAuNzkwNjY0NjcgOTAuMTIwMjU0NTIgQy0xLjQ1MDY2NDY3IDkyLjQzMDI1NDUyIC0yLjExMDY2NDY3IDk0Ljc0MDI1NDUyIC0yLjc5MDY2NDY3IDk3LjEyMDI1NDUyIEMxMi4zODkzMzUzMyA5Ny4xMjAyNTQ1MiAyNy41NjkzMzUzMyA5Ny4xMjAyNTQ1MiA0My4yMDkzMzUzMyA5Ny4xMjAyNTQ1MiBDNDIuNTQ5MzM1MzMgOTQuODEwMjU0NTIgNDEuODg5MzM1MzMgOTIuNTAwMjU0NTIgNDEuMjA5MzM1MzMgOTAuMTIwMjU0NTIgQzI3LjM0OTMzNTMzIDkwLjEyMDI1NDUyIDEzLjQ4OTMzNTMzIDkwLjEyMDI1NDUyIC0wLjc5MDY2NDY3IDkwLjEyMDI1NDUyIFogIiBmaWxsPSIjOUU5RTlFIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMDcuNzkwNjY0NjcyODUxNTYsNDUuODc5NzQ1NDgzMzk4NDQpIi8+Cjwvc3ZnPgo=',
blocks: [
From a55a1bb022b7291cbfdd60af45931c7ee7b1e730 Mon Sep 17 00:00:00 2001
From: "DangoCat[bot]"
Date: Tue, 4 Feb 2025 19:30:42 +0000
Subject: [PATCH 08/20] [Automated] Format code
---
extensions/Thebloxers998/oauth.js | 365 ++++++++++++++++--------------
1 file changed, 189 insertions(+), 176 deletions(-)
diff --git a/extensions/Thebloxers998/oauth.js b/extensions/Thebloxers998/oauth.js
index 8f8a1e0645..4aa9bf61d9 100644
--- a/extensions/Thebloxers998/oauth.js
+++ b/extensions/Thebloxers998/oauth.js
@@ -1,197 +1,210 @@
// Name: OAuth Extension
// ID: oauthExtension
-// Description: Provides OAuth login functionality for various services (Google, Microsoft, Discord, Twitter, GitHub, Facebook, LinkedIn, Spotify).
+// Description: Provides OAuth login functionality for various services (Google, Microsoft, Discord, Twitter, GitHub, Facebook, LinkedIn, Spotify).
// By: Thebloxers998
// License: MPL-2.0
class OAuthExtension {
- constructor() {
- this.tokens = {};
- this.clients = {
- google: {
- clientId: '',
- clientSecret: '',
- redirectUri: '',
- authUrl: 'https://accounts.google.com/o/oauth2/auth',
- tokenUrl: 'https://oauth2.googleapis.com/token',
- scope: 'https://www.googleapis.com/auth/userinfo.profile',
- icon: 'data:image/svg+xml;base64,PLACEHOLDER_FOR_GOOGLE_ICON'
- },
- microsoft: {
- clientId: '',
- clientSecret: '',
- redirectUri: '',
- authUrl: 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize',
- tokenUrl: 'https://login.microsoftonline.com/common/oauth2/v2.0/token',
- scope: 'https://graph.microsoft.com/User.Read',
- },
- discord: {
- clientId: '',
- clientSecret: '',
- redirectUri: '',
- authUrl: 'https://discord.com/api/oauth2/authorize',
- tokenUrl: 'https://discord.com/api/oauth2/token',
- scope: 'identify',
- },
- twitter: {
- clientId: '',
- clientSecret: '',
- redirectUri: '',
- authUrl: 'https://api.twitter.com/oauth/authorize',
- tokenUrl: 'https://api.twitter.com/oauth/access_token',
- },
- github: {
- clientId: '',
- clientSecret: '',
- redirectUri: '',
- authUrl: 'https://github.com/login/oauth/authorize',
- tokenUrl: 'https://github.com/login/oauth/access_token',
- scope: 'user',
- },
- facebook: {
- clientId: '',
- clientSecret: '',
- redirectUri: '',
- authUrl: 'https://www.facebook.com/v10.0/dialog/oauth',
- tokenUrl: 'https://graph.facebook.com/v10.0/oauth/access_token',
- scope: 'public_profile',
- },
- linkedin: {
- clientId: '',
- clientSecret: '',
- redirectUri: '',
- authUrl: 'https://www.linkedin.com/oauth/v2/authorization',
- tokenUrl: 'https://www.linkedin.com/oauth/v2/accessToken',
- scope: 'r_liteprofile',
- },
- spotify: {
- clientId: '',
- clientSecret: '',
- redirectUri: '',
- authUrl: 'https://accounts.spotify.com/authorize',
- tokenUrl: 'https://accounts.spotify.com/api/token',
- scope: 'user-read-private',
- },
- };
- }
+ constructor() {
+ this.tokens = {};
+ this.clients = {
+ google: {
+ clientId: "",
+ clientSecret: "",
+ redirectUri: "",
+ authUrl: "https://accounts.google.com/o/oauth2/auth",
+ tokenUrl: "https://oauth2.googleapis.com/token",
+ scope: "https://www.googleapis.com/auth/userinfo.profile",
+ icon: "data:image/svg+xml;base64,PLACEHOLDER_FOR_GOOGLE_ICON",
+ },
+ microsoft: {
+ clientId: "",
+ clientSecret: "",
+ redirectUri: "",
+ authUrl:
+ "https://login.microsoftonline.com/common/oauth2/v2.0/authorize",
+ tokenUrl: "https://login.microsoftonline.com/common/oauth2/v2.0/token",
+ scope: "https://graph.microsoft.com/User.Read",
+ },
+ discord: {
+ clientId: "",
+ clientSecret: "",
+ redirectUri: "",
+ authUrl: "https://discord.com/api/oauth2/authorize",
+ tokenUrl: "https://discord.com/api/oauth2/token",
+ scope: "identify",
+ },
+ twitter: {
+ clientId: "",
+ clientSecret: "",
+ redirectUri: "",
+ authUrl: "https://api.twitter.com/oauth/authorize",
+ tokenUrl: "https://api.twitter.com/oauth/access_token",
+ },
+ github: {
+ clientId: "",
+ clientSecret: "",
+ redirectUri: "",
+ authUrl: "https://github.com/login/oauth/authorize",
+ tokenUrl: "https://github.com/login/oauth/access_token",
+ scope: "user",
+ },
+ facebook: {
+ clientId: "",
+ clientSecret: "",
+ redirectUri: "",
+ authUrl: "https://www.facebook.com/v10.0/dialog/oauth",
+ tokenUrl: "https://graph.facebook.com/v10.0/oauth/access_token",
+ scope: "public_profile",
+ },
+ linkedin: {
+ clientId: "",
+ clientSecret: "",
+ redirectUri: "",
+ authUrl: "https://www.linkedin.com/oauth/v2/authorization",
+ tokenUrl: "https://www.linkedin.com/oauth/v2/accessToken",
+ scope: "r_liteprofile",
+ },
+ spotify: {
+ clientId: "",
+ clientSecret: "",
+ redirectUri: "",
+ authUrl: "https://accounts.spotify.com/authorize",
+ tokenUrl: "https://accounts.spotify.com/api/token",
+ scope: "user-read-private",
+ },
+ };
+ }
- getInfo() {
- return {
- id: 'oauthExtension',
- name: 'OAuth Extension',
- color1: '#FFAB19', // Primary color
- color2: '#FF8C00', // Secondary color
- color3: '#E76F00', // Tertiary color
- blockIconURI: 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI1NiIgaGVpZ2h0PSIyNTYiPgo8cGF0aCBkPSJNMCAwIEMyMi4wMzg1MjY1MiAxOC44MTE1OTg1NiAzNi40NjU3OTMzNCA0MS4wNjM3MzM3NyA0NC4zNTE1NjI1IDY4LjkxMDE1NjI1IEM0NC42OTMxNjQwNiA3MC4wODgzNTkzNyA0NS4wMzQ3NjU2MyA3MS4yNjY1NjI1IDQ1LjM4NjcxODc1IDcyLjQ4MDQ2ODc1IEM1MS41OTA5Mjc1NSA5OC43NDAxNDMyMiA0OC4xMTkzNTU5NyAxMjguNDA3NTUzODkgMzcuMzUxNTYyNSAxNTIuOTEwMTU2MjUgQzM2LjkyNjY1NTI3IDE1My44OTE0NTUwOCAzNi45MjY2NTUyNyAxNTMuODkxNDU1MDggMzYuNDkzMTY0MDYgMTU0Ljg5MjU3ODEyIEMyNi41NTAxNTk0MyAxNzcuNDE1NDA2MzEgOS4zNjgzODI4MiAxOTcuMDgzNzE0NDMgLTExLjY0ODQzNzUgMjA5LjkxMDE1NjI1IEMtMTIuNzIwOTM3NSAyMTAuNTkzMzU5MzggLTEzLjc5MzQzNzUgMjExLjI3NjU2MjUgLTE0Ljg5ODQzNzUgMjExLjk4MDQ2ODc1IEMtNDIuNzU5MjI3OTQgMjI4Ljk0MjAxNDc4IC03OC4yNTA2MTE4OSAyMzMuOTI2NDg1NDUgLTExMC4wMzAyNzM0NCAyMjYuNzQ3MDcwMzEgQy0xMTcuODE5NDE3MjkgMjI0Ljc3NzM2MzU3IC0xMjUuMjk4MDI2MiAyMjIuMTQwMzMxOTUgLTEzMi42NDg0Mzc1IDIxOC45MTAxNTYyNSBDLTEzMy4zMDI2MzY3MiAyMTguNjI2ODg0NzcgLTEzMy45NTY4MzU5NCAyMTguMzQzNjEzMjggLTEzNC42MzA4NTkzOCAyMTguMDUxNzU3ODEgQy0xNjQuNzI1OTMyMzQgMjA0Ljc2NTg4NDE0IC0xODguNDMyNjIzMzkgMTc5LjE4ODU5MzM5IC0yMDAuNTE5NTMxMjUgMTQ4LjcxMzg2NzE5IEMtMjAyLjQ3ODkwMDc3IDE0My41MTUyMTc0MiAtMjA0LjEzNTA4MjUgMTM4LjI1NDE1Mjc0IC0yMDUuNjQ4NDM3NSAxMzIuOTEwMTU2MjUgQy0yMDUuOTkwMDM5MDYgMTMxLjczMTk1MzEyIC0yMDYuMzMxNjQwNjMgMTMwLjU1Mzc1IC0yMDYuNjgzNTkzNzUgMTI5LjMzOTg0Mzc1IEMtMjE0LjIxNzQzOTk4IDk3LjQ1MjQwMTU3IC0yMDcuODM1NTc0NTYgNjEuNDM0NjUxNjEgLTE5MS4wMDc4MTI1IDMzLjYwNTQ2ODc1IEMtMTcyLjcxOTMxMzkzIDQuNTE1NjA4MTggLTE0NS40NzI3MDQ5NSAtMTQuNzk0NDA5MjYgLTExMi42NDg0Mzc1IC0yNC4wODk4NDM3NSBDLTExMS40NzAyMzQzOCAtMjQuNDMxNDQ1MzEgLTExMC4yOTIwMzEyNSAtMjQuNzczMDQ2ODcgLTEwOS4wNzgxMjUgLTI1LjEyNSBDLTcxLjkxMjE2MjA0IC0zMy45MDU5NjkyNyAtMjkuNDM4MzUxODQgLTI0LjE0NjUyMjQyIDAgMCBaIE0tMTU2LjY0ODQzNzUgMzguOTEwMTU2MjUgQy0xNzIuNjc2OTQzNTIgNTguMDg4NzczMjggLTE4MC4zOTY0OTAzOCA4NC41ODg4MzUyMyAtMTc4LjM3MTA5Mzc1IDEwOS4yOTI5Njg3NSBDLTE3NS40NzE3NjMxNSAxMzUuNzQ1OTA4ODUgLTE2Mi45NTU1MTQxMyAxNTkuNTg0NTMzMDggLTE0Mi42NDg0Mzc1IDE3Ni45MTAxNTYyNSBDLTEyNi41NDMxNjcwNSAxODkuNjk5NjM1NzIgLTEwNi4zMjExMTA2MiAxOTguMDkxNzg4ODEgLTg1LjY0ODQzNzUgMTk4LjkxMDE1NjI1IEMtODQuODg5MTc5NjkgMTk4Ljk1MDExNzE5IC04NC4xMjk5MjE4NyAxOTguOTkwMDc4MTIgLTgzLjM0NzY1NjI1IDE5OS4wMzEyNSBDLTU2LjU4MDI3NzA5IDE5OS43NzYwMDUyMyAtMzEuNDM2MTQxNzYgMTg4LjgxNjI3MjU4IC0xMi4wNTQ0NDMzNiAxNzAuNzY1NjI1IEM1LjI3MjM5MDEyIDE1NC4wMTA3MzQ1MiAxNi4zOTQyODMxMyAxMzAuMDkxODY1NjUgMTcuMzUxNTYyNSAxMDUuOTEwMTU2MjUgQzE3LjM5MTUyMzQ0IDEwNS4xNTA4OTg0NCAxNy40MzE0ODQzNyAxMDQuMzkxNjQwNjIgMTcuNDcyNjU2MjUgMTAzLjYwOTM3NSBDMTguMjE3NDExNDggNzYuODQxOTk1ODQgNy4yNTc2Nzg4MyA1MS42OTc4NjA1MSAtMTAuNzkyOTY4NzUgMzIuMzE2MTYyMTEgQy0yNy41NDc4NTkyMyAxNC45ODkzMjg2MyAtNTEuNDY2NzI4MSAzLjg2NzQzNTYyIC03NS42NDg0Mzc1IDIuOTEwMTU2MjUgQy03Ni43ODczMjQyMiAyLjg1MDIxNDg0IC03Ni43ODczMjQyMiAyLjg1MDIxNDg0IC03Ny45NDkyMTg3NSAyLjc4OTA2MjUgQy0xMDguODU5OTYwMDYgMS45MjkwMjU1MSAtMTM2LjI0OTk3Njk4IDE2LjQzMzI0OTk3IC0xNTYuNjQ4NDM3NSAzOC45MTAxNTYyNSBaICIgZmlsbD0iIzlFOUU5RSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjA4LjY0ODQzNzUsMjcuMDg5ODQzNzUpIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuNzc5NDM0NjYgMC4wMDIyMjA2MSAxLjU1ODg2OTMyIDAuMDA0NDQxMjIgMi4zNjE5MjMyMiAwLjAwNjcyOTEzIEMzLjI0Mjc2MDc3IDAuMDA2ODA0NjYgNC4xMjM1OTgzMyAwLjAwNjg4MDE5IDUuMDMxMTI3OTMgMC4wMDY5NTgwMSBDNS45ODg0MTI5MyAwLjAxMjExOTI5IDYuOTQ1Njk3OTQgMC4wMTcyODA1OCA3LjkzMTk5MTU4IDAuMDIyNTk4MjcgQzkuMzk0ODA4MTIgMC4wMjQ3MjA2OSA5LjM5NDgwODEyIDAuMDI0NzIwNjkgMTAuODg3MTc2NTEgMC4wMjY4ODU5OSBDMTQuMDE1NDI2NzUgMC4wMzI1MDMxOSAxNy4xNDM2MDY1NiAwLjA0NTA1ODU5IDIwLjI3MTgzNTMzIDAuMDU3NzU0NTIgQzIyLjM4NzA2ODY3IDAuMDYyNzY3MyAyNC41MDIzMDMxMyAwLjA2NzMzMDU5IDI2LjYxNzUzODQ1IDAuMDcxNDI2MzkgQzMxLjgxNDgyODI5IDAuMDgyNDc4MiAzNy4wMTIwNzY3OCAwLjA5OTIzMzA1IDQyLjIwOTMzNTMzIDAuMTIwMjU0NTIgQzQ0Ljk5MTE0MDUxIDYuMjUxMzU5MTEgNDcuNTc5MTE3NDUgMTIuNDM1MDc1MzMgNTAuMDM3NDYwMzMgMTguNzAyMjg1NzcgQzUwLjM5MDE1OTkxIDE5LjU5NjU0NzcgNTAuNzQyODU5NSAyMC40OTA4MDk2MyA1MS4xMDYyNDY5NSAyMS40MTIxNzA0MSBDNTIuMjI1NzczMjEgMjQuMjUxNjQ4MTQgNTMuMzQyNjgwOCAyNy4wOTIxNDYzOCA1NC40NTkzMzUzMyAyOS45MzI3NTQ1MiBDNTUuNTU3NzAyMTUgMzIuNzIyNDMxMiA1Ni42NTY2Mzk1MiAzNS41MTE4ODE3NCA1Ny43NTYwODgyNiAzOC4zMDExMzIyIEM1OC40ODMyNDk1MSA0MC4xNDY2MDUxNSA1OS4yMDk1NzI4OCA0MS45OTI0MDg0OCA1OS45MzUwNDMzMyA0My44Mzg1NDY3NSBDNjEuNzc4MzM5NjQgNDguNTIyNzUzMjQgNjMuNjQxMjU5NzcgNTMuMTk3NzI3NjUgNjUuNTM5NDEzNDUgNTcuODYwMDAwNjEgQzY1LjkxMTc3MTI0IDU4Ljc3Nzg2ODUgNjYuMjg0MTI5MDMgNTkuNjk1NzM2MzkgNjYuNjY3NzcwMzkgNjAuNjQxNDE4NDYgQzY3LjM3NzQxMTc2IDYyLjM4NzQ1NzM3IDY4LjA5MTI4MzIxIDY0LjEzMTc4NDgzIDY4LjgwOTk4MjMgNjUuODc0MTE0OTkgQzY5LjEyNTc4MjQ3IDY2LjY1MjMyMTAxIDY5LjQ0MTU4MjY0IDY3LjQzMDUyNzA0IDY5Ljc2Njk1MjUxIDY4LjIzMjMxNTA2IEM3MC4wNDY0MTcyNCA2OC45MTMyNzc0NCA3MC4zMjU4ODE5NiA2OS41OTQyMzk4MSA3MC42MTM4MTUzMSA3MC4yOTU4Mzc0IEM3MS4yMDkzMzUzMyA3Mi4xMjAyNTQ1MiA3MS4yMDkzMzUzMyA3Mi4xMjAyNTQ1MiA3MS4yMDkzMzUzMyA3NS4xMjAyNTQ1MiBDNzkuNDU5MzM1MzMgNzUuMTIwMjU0NTIgODcuNzA5MzM1MzMgNzUuMTIwMjU0NTIgOTYuMjA5MzM1MzMgNzUuMTIwMjU0NTIgQzk2LjIwOTMzNTMzIDgwLjA3MDI1NDUyIDk2LjIwOTMzNTMzIDg1LjAyMDI1NDUyIDk2LjIwOTMzNTMzIDkwLjEyMDI1NDUyIEM5MC4yNjkzMzUzMyA5MC4xMjAyNTQ1MiA4NC4zMjkzMzUzMyA5MC4xMjAyNTQ1MiA3OC4yMDkzMzUzMyA5MC4xMjAyNTQ1MiBDNzkuMTk5MzM1MzMgOTMuNTg1MjU0NTIgNzkuMTk5MzM1MzMgOTMuNTg1MjU0NTIgODAuMjA5MzM1MzMgOTcuMTIwMjU0NTIgQzg1LjQ4OTMzNTMzIDk3LjEyMDI1NDUyIDkwLjc2OTMzNTMzIDk3LjEyMDI1NDUyIDk2LjIwOTMzNTMzIDk3LjEyMDI1NDUyIEM5Ni4yMDkzMzUzMyAxMDIuMDcwMjU0NTIgOTYuMjA5MzM1MzMgMTA3LjAyMDI1NDUyIDk2LjIwOTMzNTMzIDExMi4xMjAyNTQ1MiBDOTEuNzU0MzM1MzMgMTEyLjYxNTI1NDUyIDkxLjc1NDMzNTMzIDExMi42MTUyNTQ1MiA4Ny4yMDkzMzUzMyAxMTMuMTIwMjU0NTIgQzg3LjcxNDY0NzgzIDExNC4zODQ4MjQ4MyA4OC4yMTk5NjAzMyAxMTUuNjQ5Mzk1MTQgODguNzQwNTg1MzMgMTE2Ljk1MjI4NTc3IEM4OS4zOTcxMDI1MiAxMTguNjEyMzM2MzcgOTAuMDUzMzM3ODkgMTIwLjI3MjQ5ODQ1IDkwLjcwOTMzNTMzIDEyMS45MzI3NTQ1MiBDOTEuMjEwMTM2MTEgMTIzLjE4MjgyMjg4IDkxLjIxMDEzNjExIDEyMy4xODI4MjI4OCA5MS43MjEwNTQwOCAxMjQuNDU4MTQ1MTQgQzkyLjE5NDc4NDU1IDEyNS42NjE4MDcyNSA5Mi4xOTQ3ODQ1NSAxMjUuNjYxODA3MjUgOTIuNjc4MDg1MzMgMTI2Ljg4OTc4NTc3IEM5Mi45NzEzNDcwNSAxMjcuNjI4MTc2ODggOTMuMjY0NjA4NzYgMTI4LjM2NjU2Nzk5IDkzLjU2Njc1NzIgMTI5LjEyNzMzNDU5IEM5NC4yMDkzMzUzMyAxMzEuMTIwMjU0NTIgOTQuMjA5MzM1MzMgMTMxLjEyMDI1NDUyIDk0LjIwOTMzNTMzIDEzNC4xMjAyNTQ1MiBDODEuOTk5MzM1MzMgMTM0LjEyMDI1NDUyIDY5Ljc4OTMzNTMzIDEzNC4xMjAyNTQ1MiA1Ny4yMDkzMzUzMyAxMzQuMTIwMjU0NTIgQzUyLjIwOTMzNTMzIDEyMi4xMjAyNTQ1MiA1Mi4yMDkzMzUzMyAxMjIuMTIwMjU0NTIgNDkuMjA5MzM1MzMgMTEyLjEyMDI1NDUyIEMzMC4wNjkzMzUzMyAxMTIuMTIwMjU0NTIgMTAuOTI5MzM1MzMgMTEyLjEyMDI1NDUyIC04Ljc5MDY2NDY3IDExMi4xMjAyNTQ1MiBDLTkuNzgwNjY0NjcgMTE1LjQyMDI1NDUyIC0xMC43NzA2NjQ2NyAxMTguNzIwMjU0NTIgLTExLjc5MDY2NDY3IDEyMi4xMjAyNTQ1MiBDLTEzLjQ0MDY2NDY3IDEyNi4wODAyNTQ1MiAtMTUuMDkwNjY0NjcgMTMwLjA0MDI1NDUyIC0xNi43OTA2NjQ2NyAxMzQuMTIwMjU0NTIgQy0yOS4wMDA2NjQ2NyAxMzQuMTIwMjU0NTIgLTQxLjIxMDY2NDY3IDEzNC4xMjAyNTQ1MiAtNTMuNzkwNjY0NjcgMTM0LjEyMDI1NDUyIEMtNTMuMTI2NDQxNjkgMTMwLjc5OTEzOTYgLTUyLjU1MzU4NjExIDEyOC4yMDE5NDI1MyAtNTEuMzgwNTA4NDIgMTI1LjEzMTk3MzI3IEMtNTAuOTc5Mjg3NzIgMTI0LjA3MzMzMDY5IC01MC45NzkyODc3MiAxMjQuMDczMzMwNjkgLTUwLjU2OTk2MTU1IDEyMi45OTMzMDEzOSBDLTUwLjI5MjE2ODU4IDEyMi4yNzIwNzA5MiAtNTAuMDE0Mzc1NjEgMTIxLjU1MDg0MDQ1IC00OS43MjgxNjQ2NyAxMjAuODA3NzU0NTIgQy00OS4zMDU2NzQ0NCAxMTkuNjk2OTA0OTEgLTQ5LjMwNTY3NDQ0IDExOS42OTY5MDQ5MSAtNDguODc0NjQ5MDUgMTE4LjU2MzYxMzg5IEMtNDguMTgzNDc4OTIgMTE2Ljc0NzgyNzk2IC00Ny40ODc1NDc3OSAxMTQuOTMzODU1NTIgLTQ2Ljc5MDY2NDY3IDExMy4xMjAyNTQ1MiBDLTQ5Ljc2MDY2NDY3IDExMi43OTAyNTQ1MiAtNTIuNzMwNjY0NjcgMTEyLjQ2MDI1NDUyIC01NS43OTA2NjQ2NyAxMTIuMTIwMjU0NTIgQy01NS43OTA2NjQ2NyAxMDcuMTcwMjU0NTIgLTU1Ljc5MDY2NDY3IDEwMi4yMjAyNTQ1MiAtNTUuNzkwNjY0NjcgOTcuMTIwMjU0NTIgQy01MC41MTA2NjQ2NyA5Ny4xMjAyNTQ1MiAtNDUuMjMwNjY0NjcgOTcuMTIwMjU0NTIgLTM5Ljc5MDY2NDY3IDk3LjEyMDI1NDUyIEMtMzkuMTMwNjY0NjcgOTQuODEwMjU0NTIgLTM4LjQ3MDY2NDY3IDkyLjUwMDI1NDUyIC0zNy43OTA2NjQ2NyA5MC4xMjAyNTQ1MiBDLTQzLjczMDY2NDY3IDkwLjEyMDI1NDUyIC00OS42NzA2NjQ2NyA5MC4xMjAyNTQ1MiAtNTUuNzkwNjY0NjcgOTAuMTIwMjU0NTIgQy01NS43OTA2NjQ2NyA4NS4xNzAyNTQ1MiAtNTUuNzkwNjY0NjcgODAuMjIwMjU0NTIgLTU1Ljc5MDY2NDY3IDc1LjEyMDI1NDUyIEMtNDcuNTQwNjY0NjcgNzUuMTIwMjU0NTIgLTM5LjI5MDY2NDY3IDc1LjEyMDI1NDUyIC0zMC43OTA2NjQ2NyA3NS4xMjAyNTQ1MiBDLTMwLjQ2MDY2NDY3IDczLjQ3MDI1NDUyIC0zMC4xMzA2NjQ2NyA3MS44MjAyNTQ1MiAtMjkuNzkwNjY0NjcgNzAuMTIwMjU0NTIgQy0yOS4zNTY1NzU4MyA2OC44MTI0MDQ1NiAtMjguODg3MjM5MjEgNjcuNTE1NzA5OTggLTI4LjM4Mjk0OTgzIDY2LjIzMzI5MTYzIEMtMjcuOTU1MjcwNjEgNjUuMTM2NzU1MTQgLTI3Ljk1NTI3MDYxIDY1LjEzNjc1NTE0IC0yNy41MTg5NTE0MiA2NC4wMTgwNjY0MSBDLTI3LjIwOTAwNzQyIDYzLjIzNTgxMTkyIC0yNi44OTkwNjM0MiA2Mi40NTM1NTc0MyAtMjYuNTc5NzI3MTcgNjEuNjQ3NTk4MjcgQy0yNi4wOTMyMzk1MiA2MC40MDUyNzE4NCAtMjYuMDkzMjM5NTIgNjAuNDA1MjcxODQgLTI1LjU5NjkyMzgzIDU5LjEzNzg0NzkgQy0yNC41NDA0OTM5NyA1Ni40NDI4OTc0OSAtMjMuNDc4MjE0MDQgNTMuNzUwMjk3MzYgLTIyLjQxNTY2NDY3IDUxLjA1Nzc1NDUyIEMtMjEuNjg4NjgwNTUgNDkuMjA3NjI3NzYgLTIwLjk2MjAzODM5IDQ3LjM1NzM2NjU5IC0yMC4yMzU3MzMwMyA0NS41MDY5NzMyNyBDLTE4Ljc3OTY4MzY3IDQxLjc5ODk3MzEgLTE3LjMyMTM4MjQ0IDM4LjA5MTg3MDIyIC0xNS44NjE0NjU0NSAzNC4zODUzOTEyNCBDLTE0LjAwMzg3MjU1IDI5LjY2NjY4MzE1IC0xMi4xNTg0NzMxNyAyNC45NDMzMjA2NSAtMTAuMzE4MDA4NDIgMjAuMjE3OTEwNzcgQy05LjgwNjIzMTMyIDE4LjkwNjEwMjQ1IC05LjI5NDM1Mzc3IDE3LjU5NDMzMzMyIC04Ljc4MjM2Mzg5IDE2LjI4MjYwODAzIEMtNy44NDYzMDQ5OSAxMy44ODM5MzcxMSAtNi45MTE2ODAwOCAxMS40ODQ3MDU5NyAtNS45Nzg2NTI5NSA5LjA4NDg1NDEzIEMtNS41NjcyODA4OCA4LjAzNDM0ODc1IC01LjE1NTkwODgxIDYuOTgzODQzMzggLTQuNzMyMDcwOTIgNS45MDE1MDQ1MiBDLTQuMzc4MzAzODMgNC45OTQ2NDkwNSAtNC4wMjQ1MzY3NCA0LjA4Nzc5MzU4IC0zLjY2MDA0OTQ0IDMuMTUzNDU3NjQgQy0yLjM3OTk5Mzk4IDAuMTU5ODMxNzMgLTIuMzc5OTkzOTggMC4xNTk4MzE3MyAwIDAgWiBNMjAuMjA5MzM1MzMgMzQuMTIwMjU0NTIgQzE2LjgxMTU1MDQyIDQxLjQ0MTY3MiAxMy45NzAzMDk5MyA0OC45Mjk2MjIxMiAxMS4yMDc4NzA0OCA1Ni41MDY3MjkxMyBDMTAuNDUxMzgyMzUgNTguNTc5NTQ2MDkgOS42ODgwNjYyNSA2MC42NDk3NjM3OSA4LjkyNDE3OTA4IDYyLjcxOTg2Mzg5IEM4LjQ0MDY5OTkyIDY0LjAzOTM3NjU3IDcuOTU3NjEyMjcgNjUuMzU5MDMyNzggNy40NzQ5NjAzMyA2Ni42Nzg4NDgyNyBDNy4wMzk1Nzk0NyA2Ny44Njc5Mjc4NiA2LjYwNDE5ODYxIDY5LjA1NzAwNzQ1IDYuMTU1NjI0MzkgNzAuMjgyMTE5NzUgQzUuMTAzOTAxNTkgNzIuOTM3ODUxOCA1LjEwMzkwMTU5IDcyLjkzNzg1MTggNS4yMDkzMzUzMyA3NS4xMjAyNTQ1MiBDMTUuMTA5MzM1MzMgNzUuMTIwMjU0NTIgMjUuMDA5MzM1MzMgNzUuMTIwMjU0NTIgMzUuMjA5MzM1MzMgNzUuMTIwMjU0NTIgQzMzLjQxMTgzNzk3IDY5LjEyODU5NjY3IDMxLjYyMDI3MzkyIDYzLjIzNDQ4Mzc4IDI5LjUxMDExNjU4IDU3LjM2MjQ0MjAyIEMyOS4yNzAyMDQ5MyA1Ni42ODg1MTQxIDI5LjAzMDI5MzI3IDU2LjAxNDU4NjE4IDI4Ljc4MzExMTU3IDU1LjMyMDIzNjIxIEMyOC4wMzE2Nzg1NiA1My4yMTEwNzA1NyAyNy4yNzY4MzI1IDUxLjEwMzE0NjU4IDI2LjUyMTgzNTMzIDQ4Ljk5NTI1NDUyIEMyNi4wMDUzMzA1NCA0Ny41NDc0MTk0MyAyNS40ODkwNTI4MSA0Ni4wOTk1MDMzMyAyNC45NzMwMDcyIDQ0LjY1MTUwNDUyIEMyMy43MjEwNjM0NyA0MS4xNDAxNTA4OCAyMi40NjYwNjAxOSAzNy42Mjk5MDAyNSAyMS4yMDkzMzUzMyAzNC4xMjAyNTQ1MiBDMjAuODc5MzM1MzMgMzQuMTIwMjU0NTIgMjAuNTQ5MzM1MzMgMzQuMTIwMjU0NTIgMjAuMjA5MzM1MzMgMzQuMTIwMjU0NTIgWiBNLTAuNzkwNjY0NjcgOTAuMTIwMjU0NTIgQy0xLjQ1MDY2NDY3IDkyLjQzMDI1NDUyIC0yLjExMDY2NDY3IDk0Ljc0MDI1NDUyIC0yLjc5MDY2NDY3IDk3LjEyMDI1NDUyIEMxMi4zODkzMzUzMyA5Ny4xMjAyNTQ1MiAyNy41NjkzMzUzMyA5Ny4xMjAyNTQ1MiA0My4yMDkzMzUzMyA5Ny4xMjAyNTQ1MiBDNDIuNTQ5MzM1MzMgOTQuODEwMjU0NTIgNDEuODg5MzM1MzMgOTIuNTAwMjU0NTIgNDEuMjA5MzM1MzMgOTAuMTIwMjU0NTIgQzI3LjM0OTMzNTMzIDkwLjEyMDI1NDUyIDEzLjQ4OTMzNTMzIDkwLjEyMDI1NDUyIC0wLjc5MDY2NDY3IDkwLjEyMDI1NDUyIFogIiBmaWxsPSIjOUU5RTlFIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMDcuNzkwNjY0NjcyODUxNTYsNDUuODc5NzQ1NDgzMzk4NDQpIi8+Cjwvc3ZnPgo=',
- menuIconURI: 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI1NiIgaGVpZ2h0PSIyNTYiPgo8cGF0aCBkPSJNMCAwIEMyMi4wMzg1MjY1MiAxOC44MTE1OTg1NiAzNi40NjU3OTMzNCA0MS4wNjM3MzM3NyA0NC4zNTE1NjI1IDY4LjkxMDE1NjI1IEM0NC42OTMxNjQwNiA3MC4wODgzNTkzNyA0NS4wMzQ3NjU2MyA3MS4yNjY1NjI1IDQ1LjM4NjcxODc1IDcyLjQ4MDQ2ODc1IEM1MS41OTA5Mjc1NSA5OC43NDAxNDMyMiA0OC4xMTkzNTU5NyAxMjguNDA3NTUzODkgMzcuMzUxNTYyNSAxNTIuOTEwMTU2MjUgQzM2LjkyNjY1NTI3IDE1My44OTE0NTUwOCAzNi45MjY2NTUyNyAxNTMuODkxNDU1MDggMzYuNDkzMTY0MDYgMTU0Ljg5MjU3ODEyIEMyNi41NTAxNTk0MyAxNzcuNDE1NDA2MzEgOS4zNjgzODI4MiAxOTcuMDgzNzE0NDMgLTExLjY0ODQzNzUgMjA5LjkxMDE1NjI1IEMtMTIuNzIwOTM3NSAyMTAuNTkzMzU5MzggLTEzLjc5MzQzNzUgMjExLjI3NjU2MjUgLTE0Ljg5ODQzNzUgMjExLjk4MDQ2ODc1IEMtNDIuNzU5MjI3OTQgMjI4Ljk0MjAxNDc4IC03OC4yNTA2MTE4OSAyMzMuOTI2NDg1NDUgLTExMC4wMzAyNzM0NCAyMjYuNzQ3MDcwMzEgQy0xMTcuODE5NDE3MjkgMjI0Ljc3NzM2MzU3IC0xMjUuMjk4MDI2MiAyMjIuMTQwMzMxOTUgLTEzMi42NDg0Mzc1IDIxOC45MTAxNTYyNSBDLTEzMy4zMDI2MzY3MiAyMTguNjI2ODg0NzcgLTEzMy45NTY4MzU5NCAyMTguMzQzNjEzMjggLTEzNC42MzA4NTkzOCAyMTguMDUxNzU3ODEgQy0xNjQuNzI1OTMyMzQgMjA0Ljc2NTg4NDE0IC0xODguNDMyNjIzMzkgMTc5LjE4ODU5MzM5IC0yMDAuNTE5NTMxMjUgMTQ4LjcxMzg2NzE5IEMtMjAyLjQ3ODkwMDc3IDE0My41MTUyMTc0MiAtMjA0LjEzNTA4MjUgMTM4LjI1NDE1Mjc0IC0yMDUuNjQ4NDM3NSAxMzIuOTEwMTU2MjUgQy0yMDUuOTkwMDM5MDYgMTMxLjczMTk1MzEyIC0yMDYuMzMxNjQwNjMgMTMwLjU1Mzc1IC0yMDYuNjgzNTkzNzUgMTI5LjMzOTg0Mzc1IEMtMjE0LjIxNzQzOTk4IDk3LjQ1MjQwMTU3IC0yMDcuODM1NTc0NTYgNjEuNDM0NjUxNjEgLTE5MS4wMDc4MTI1IDMzLjYwNTQ2ODc1IEMtMTcyLjcxOTMxMzkzIDQuNTE1NjA4MTggLTE0NS40NzI3MDQ5NSAtMTQuNzk0NDA5MjYgLTExMi42NDg0Mzc1IC0yNC4wODk4NDM3NSBDLTExMS40NzAyMzQzOCAtMjQuNDMxNDQ1MzEgLTExMC4yOTIwMzEyNSAtMjQuNzczMDQ2ODcgLTEwOS4wNzgxMjUgLTI1LjEyNSBDLTcxLjkxMjE2MjA0IC0zMy45MDU5NjkyNyAtMjkuNDM4MzUxODQgLTI0LjE0NjUyMjQyIDAgMCBaIE0tMTU2LjY0ODQzNzUgMzguOTEwMTU2MjUgQy0xNzIuNjc2OTQzNTIgNTguMDg4NzczMjggLTE4MC4zOTY0OTAzOCA4NC41ODg4MzUyMyAtMTc4LjM3MTA5Mzc1IDEwOS4yOTI5Njg3NSBDLTE3NS40NzE3NjMxNSAxMzUuNzQ1OTA4ODUgLTE2Mi45NTU1MTQxMyAxNTkuNTg0NTMzMDggLTE0Mi42NDg0Mzc1IDE3Ni45MTAxNTYyNSBDLTEyNi41NDMxNjcwNSAxODkuNjk5NjM1NzIgLTEwNi4zMjExMTA2MiAxOTguMDkxNzg4ODEgLTg1LjY0ODQzNzUgMTk4LjkxMDE1NjI1IEMtODQuODg5MTc5NjkgMTk4Ljk1MDExNzE5IC04NC4xMjk5MjE4NyAxOTguOTkwMDc4MTIgLTgzLjM0NzY1NjI1IDE5OS4wMzEyNSBDLTU2LjU4MDI3NzA5IDE5OS43NzYwMDUyMyAtMzEuNDM2MTQxNzYgMTg4LjgxNjI3MjU4IC0xMi4wNTQ0NDMzNiAxNzAuNzY1NjI1IEM1LjI3MjM5MDEyIDE1NC4wMTA3MzQ1MiAxNi4zOTQyODMxMyAxMzAuMDkxODY1NjUgMTcuMzUxNTYyNSAxMDUuOTEwMTU2MjUgQzE3LjM5MTUyMzQ0IDEwNS4xNTA4OTg0NCAxNy40MzE0ODQzNyAxMDQuMzkxNjQwNjIgMTcuNDcyNjU2MjUgMTAzLjYwOTM3NSBDMTguMjE3NDExNDggNzYuODQxOTk1ODQgNy4yNTc2Nzg4MyA1MS42OTc4NjA1MSAtMTAuNzkyOTY4NzUgMzIuMzE2MTYyMTEgQy0yNy41NDc4NTkyMyAxNC45ODkzMjg2MyAtNTEuNDY2NzI4MSAzLjg2NzQzNTYyIC03NS42NDg0Mzc1IDIuOTEwMTU2MjUgQy03Ni43ODczMjQyMiAyLjg1MDIxNDg0IC03Ni43ODczMjQyMiAyLjg1MDIxNDg0IC03Ny45NDkyMTg3NSAyLjc4OTA2MjUgQy0xMDguODU5OTYwMDYgMS45MjkwMjU1MSAtMTM2LjI0OTk3Njk4IDE2LjQzMzI0OTk3IC0xNTYuNjQ4NDM3NSAzOC45MTAxNTYyNSBaICIgZmlsbD0iIzlFOUU5RSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjA4LjY0ODQzNzUsMjcuMDg5ODQzNzUpIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuNzc5NDM0NjYgMC4wMDIyMjA2MSAxLjU1ODg2OTMyIDAuMDA0NDQxMjIgMi4zNjE5MjMyMiAwLjAwNjcyOTEzIEMzLjI0Mjc2MDc3IDAuMDA2ODA0NjYgNC4xMjM1OTgzMyAwLjAwNjg4MDE5IDUuMDMxMTI3OTMgMC4wMDY5NTgwMSBDNS45ODg0MTI5MyAwLjAxMjExOTI5IDYuOTQ1Njk3OTQgMC4wMTcyODA1OCA3LjkzMTk5MTU4IDAuMDIyNTk4MjcgQzkuMzk0ODA4MTIgMC4wMjQ3MjA2OSA5LjM5NDgwODEyIDAuMDI0NzIwNjkgMTAuODg3MTc2NTEgMC4wMjY4ODU5OSBDMTQuMDE1NDI2NzUgMC4wMzI1MDMxOSAxNy4xNDM2MDY1NiAwLjA0NTA1ODU5IDIwLjI3MTgzNTMzIDAuMDU3NzU0NTIgQzIyLjM4NzA2ODY3IDAuMDYyNzY3MyAyNC41MDIzMDMxMyAwLjA2NzMzMDU5IDI2LjYxNzUzODQ1IDAuMDcxNDI2MzkgQzMxLjgxNDgyODI5IDAuMDgyNDc4MiAzNy4wMTIwNzY3OCAwLjA5OTIzMzA1IDQyLjIwOTMzNTMzIDAuMTIwMjU0NTIgQzQ0Ljk5MTE0MDUxIDYuMjUxMzU5MTEgNDcuNTc5MTE3NDUgMTIuNDM1MDc1MzMgNTAuMDM3NDYwMzMgMTguNzAyMjg1NzcgQzUwLjM5MDE1OTkxIDE5LjU5NjU0NzcgNTAuNzQyODU5NSAyMC40OTA4MDk2MyA1MS4xMDYyNDY5NSAyMS40MTIxNzA0MSBDNTIuMjI1NzczMjEgMjQuMjUxNjQ4MTQgNTMuMzQyNjgwOCAyNy4wOTIxNDYzOCA1NC40NTkzMzUzMyAyOS45MzI3NTQ1MiBDNTUuNTU3NzAyMTUgMzIuNzIyNDMxMiA1Ni42NTY2Mzk1MiAzNS41MTE4ODE3NCA1Ny43NTYwODgyNiAzOC4zMDExMzIyIEM1OC40ODMyNDk1MSA0MC4xNDY2MDUxNSA1OS4yMDk1NzI4OCA0MS45OTI0MDg0OCA1OS45MzUwNDMzMyA0My44Mzg1NDY3NSBDNjEuNzc4MzM5NjQgNDguNTIyNzUzMjQgNjMuNjQxMjU5NzcgNTMuMTk3NzI3NjUgNjUuNTM5NDEzNDUgNTcuODYwMDAwNjEgQzY1LjkxMTc3MTI0IDU4Ljc3Nzg2ODUgNjYuMjg0MTI5MDMgNTkuNjk1NzM2MzkgNjYuNjY3NzcwMzkgNjAuNjQxNDE4NDYgQzY3LjM3NzQxMTc2IDYyLjM4NzQ1NzM3IDY4LjA5MTI4MzIxIDY0LjEzMTc4NDgzIDY4LjgwOTk4MjMgNjUuODc0MTE0OTkgQzY5LjEyNTc4MjQ3IDY2LjY1MjMyMTAxIDY5LjQ0MTU4MjY0IDY3LjQzMDUyNzA0IDY5Ljc2Njk1MjUxIDY4LjIzMjMxNTA2IEM3MC4wNDY0MTcyNCA2OC45MTMyNzc0NCA3MC4zMjU4ODE5NiA2OS41OTQyMzk4MSA3MC42MTM4MTUzMSA3MC4yOTU4Mzc0IEM3MS4yMDkzMzUzMyA3Mi4xMjAyNTQ1MiA3MS4yMDkzMzUzMyA3Mi4xMjAyNTQ1MiA3MS4yMDkzMzUzMyA3NS4xMjAyNTQ1MiBDNzkuNDU5MzM1MzMgNzUuMTIwMjU0NTIgODcuNzA5MzM1MzMgNzUuMTIwMjU0NTIgOTYuMjA5MzM1MzMgNzUuMTIwMjU0NTIgQzk2LjIwOTMzNTMzIDgwLjA3MDI1NDUyIDk2LjIwOTMzNTMzIDg1LjAyMDI1NDUyIDk2LjIwOTMzNTMzIDkwLjEyMDI1NDUyIEM5MC4yNjkzMzUzMyA5MC4xMjAyNTQ1MiA4NC4zMjkzMzUzMyA5MC4xMjAyNTQ1MiA3OC4yMDkzMzUzMyA5MC4xMjAyNTQ1MiBDNzkuMTk5MzM1MzMgOTMuNTg1MjU0NTIgNzkuMTk5MzM1MzMgOTMuNTg1MjU0NTIgODAuMjA5MzM1MzMgOTcuMTIwMjU0NTIgQzg1LjQ4OTMzNTMzIDk3LjEyMDI1NDUyIDkwLjc2OTMzNTMzIDk3LjEyMDI1NDUyIDk2LjIwOTMzNTMzIDk3LjEyMDI1NDUyIEM5Ni4yMDkzMzUzMyAxMDIuMDcwMjU0NTIgOTYuMjA5MzM1MzMgMTA3LjAyMDI1NDUyIDk2LjIwOTMzNTMzIDExMi4xMjAyNTQ1MiBDOTEuNzU0MzM1MzMgMTEyLjYxNTI1NDUyIDkxLjc1NDMzNTMzIDExMi42MTUyNTQ1MiA4Ny4yMDkzMzUzMyAxMTMuMTIwMjU0NTIgQzg3LjcxNDY0NzgzIDExNC4zODQ4MjQ4MyA4OC4yMTk5NjAzMyAxMTUuNjQ5Mzk1MTQgODguNzQwNTg1MzMgMTE2Ljk1MjI4NTc3IEM4OS4zOTcxMDI1MiAxMTguNjEyMzM2MzcgOTAuMDUzMzM3ODkgMTIwLjI3MjQ5ODQ1IDkwLjcwOTMzNTMzIDEyMS45MzI3NTQ1MiBDOTEuMjEwMTM2MTEgMTIzLjE4MjgyMjg4IDkxLjIxMDEzNjExIDEyMy4xODI4MjI4OCA5MS43MjEwNTQwOCAxMjQuNDU4MTQ1MTQgQzkyLjE5NDc4NDU1IDEyNS42NjE4MDcyNSA5Mi4xOTQ3ODQ1NSAxMjUuNjYxODA3MjUgOTIuNjc4MDg1MzMgMTI2Ljg4OTc4NTc3IEM5Mi45NzEzNDcwNSAxMjcuNjI4MTc2ODggOTMuMjY0NjA4NzYgMTI4LjM2NjU2Nzk5IDkzLjU2Njc1NzIgMTI5LjEyNzMzNDU5IEM5NC4yMDkzMzUzMyAxMzEuMTIwMjU0NTIgOTQuMjA5MzM1MzMgMTMxLjEyMDI1NDUyIDk0LjIwOTMzNTMzIDEzNC4xMjAyNTQ1MiBDODEuOTk5MzM1MzMgMTM0LjEyMDI1NDUyIDY5Ljc4OTMzNTMzIDEzNC4xMjAyNTQ1MiA1Ny4yMDkzMzUzMyAxMzQuMTIwMjU0NTIgQzUyLjIwOTMzNTMzIDEyMi4xMjAyNTQ1MiA1Mi4yMDkzMzUzMyAxMjIuMTIwMjU0NTIgNDkuMjA5MzM1MzMgMTEyLjEyMDI1NDUyIEMzMC4wNjkzMzUzMyAxMTIuMTIwMjU0NTIgMTAuOTI5MzM1MzMgMTEyLjEyMDI1NDUyIC04Ljc5MDY2NDY3IDExMi4xMjAyNTQ1MiBDLTkuNzgwNjY0NjcgMTE1LjQyMDI1NDUyIC0xMC43NzA2NjQ2NyAxMTguNzIwMjU0NTIgLTExLjc5MDY2NDY3IDEyMi4xMjAyNTQ1MiBDLTEzLjQ0MDY2NDY3IDEyNi4wODAyNTQ1MiAtMTUuMDkwNjY0NjcgMTMwLjA0MDI1NDUyIC0xNi43OTA2NjQ2NyAxMzQuMTIwMjU0NTIgQy0yOS4wMDA2NjQ2NyAxMzQuMTIwMjU0NTIgLTQxLjIxMDY2NDY3IDEzNC4xMjAyNTQ1MiAtNTMuNzkwNjY0NjcgMTM0LjEyMDI1NDUyIEMtNTMuMTI2NDQxNjkgMTMwLjc5OTEzOTYgLTUyLjU1MzU4NjExIDEyOC4yMDE5NDI1MyAtNTEuMzgwNTA4NDIgMTI1LjEzMTk3MzI3IEMtNTAuOTc5Mjg3NzIgMTI0LjA3MzMzMDY5IC01MC45NzkyODc3MiAxMjQuMDczMzMwNjkgLTUwLjU2OTk2MTU1IDEyMi45OTMzMDEzOSBDLTUwLjI5MjE2ODU4IDEyMi4yNzIwNzA5MiAtNTAuMDE0Mzc1NjEgMTIxLjU1MDg0MDQ1IC00OS43MjgxNjQ2NyAxMjAuODA3NzU0NTIgQy00OS4zMDU2NzQ0NCAxMTkuNjk2OTA0OTEgLTQ5LjMwNTY3NDQ0IDExOS42OTY5MDQ5MSAtNDguODc0NjQ5MDUgMTE4LjU2MzYxMzg5IEMtNDguMTgzNDc4OTIgMTE2Ljc0NzgyNzk2IC00Ny40ODc1NDc3OSAxMTQuOTMzODU1NTIgLTQ2Ljc5MDY2NDY3IDExMy4xMjAyNTQ1MiBDLTQ5Ljc2MDY2NDY3IDExMi43OTAyNTQ1MiAtNTIuNzMwNjY0NjcgMTEyLjQ2MDI1NDUyIC01NS43OTA2NjQ2NyAxMTIuMTIwMjU0NTIgQy01NS43OTA2NjQ2NyAxMDcuMTcwMjU0NTIgLTU1Ljc5MDY2NDY3IDEwMi4yMjAyNTQ1MiAtNTUuNzkwNjY0NjcgOTcuMTIwMjU0NTIgQy01MC41MTA2NjQ2NyA5Ny4xMjAyNTQ1MiAtNDUuMjMwNjY0NjcgOTcuMTIwMjU0NTIgLTM5Ljc5MDY2NDY3IDk3LjEyMDI1NDUyIEMtMzkuMTMwNjY0NjcgOTQuODEwMjU0NTIgLTM4LjQ3MDY2NDY3IDkyLjUwMDI1NDUyIC0zNy43OTA2NjQ2NyA5MC4xMjAyNTQ1MiBDLTQzLjczMDY2NDY3IDkwLjEyMDI1NDUyIC00OS42NzA2NjQ2NyA5MC4xMjAyNTQ1MiAtNTUuNzkwNjY0NjcgOTAuMTIwMjU0NTIgQy01NS43OTA2NjQ2NyA4NS4xNzAyNTQ1MiAtNTUuNzkwNjY0NjcgODAuMjIwMjU0NTIgLTU1Ljc5MDY2NDY3IDc1LjEyMDI1NDUyIEMtNDcuNTQwNjY0NjcgNzUuMTIwMjU0NTIgLTM5LjI5MDY2NDY3IDc1LjEyMDI1NDUyIC0zMC43OTA2NjQ2NyA3NS4xMjAyNTQ1MiBDLTMwLjQ2MDY2NDY3IDczLjQ3MDI1NDUyIC0zMC4xMzA2NjQ2NyA3MS44MjAyNTQ1MiAtMjkuNzkwNjY0NjcgNzAuMTIwMjU0NTIgQy0yOS4zNTY1NzU4MyA2OC44MTI0MDQ1NiAtMjguODg3MjM5MjEgNjcuNTE1NzA5OTggLTI4LjM4Mjk0OTgzIDY2LjIzMzI5MTYzIEMtMjcuOTU1MjcwNjEgNjUuMTM2NzU1MTQgLTI3Ljk1NTI3MDYxIDY1LjEzNjc1NTE0IC0yNy41MTg5NTE0MiA2NC4wMTgwNjY0MSBDLTI3LjIwOTAwNzQyIDYzLjIzNTgxMTkyIC0yNi44OTkwNjM0MiA2Mi40NTM1NTc0MyAtMjYuNTc5NzI3MTcgNjEuNjQ3NTk4MjcgQy0yNi4wOTMyMzk1MiA2MC40MDUyNzE4NCAtMjYuMDkzMjM5NTIgNjAuNDA1MjcxODQgLTI1LjU5NjkyMzgzIDU5LjEzNzg0NzkgQy0yNC41NDA0OTM5NyA1Ni40NDI4OTc0OSAtMjMuNDc4MjE0MDQgNTMuNzUwMjk3MzYgLTIyLjQxNTY2NDY3IDUxLjA1Nzc1NDUyIEMtMjEuNjg4NjgwNTUgNDkuMjA3NjI3NzYgLTIwLjk2MjAzODM5IDQ3LjM1NzM2NjU5IC0yMC4yMzU3MzMwMyA0NS41MDY5NzMyNyBDLTE4Ljc3OTY4MzY3IDQxLjc5ODk3MzEgLTE3LjMyMTM4MjQ0IDM4LjA5MTg3MDIyIC0xNS44NjE0NjU0NSAzNC4zODUzOTEyNCBDLTE0LjAwMzg3MjU1IDI5LjY2NjY4MzE1IC0xMi4xNTg0NzMxNyAyNC45NDMzMjA2NSAtMTAuMzE4MDA4NDIgMjAuMjE3OTEwNzcgQy05LjgwNjIzMTMyIDE4LjkwNjEwMjQ1IC05LjI5NDM1Mzc3IDE3LjU5NDMzMzMyIC04Ljc4MjM2Mzg5IDE2LjI4MjYwODAzIEMtNy44NDYzMDQ5OSAxMy44ODM5MzcxMSAtNi45MTE2ODAwOCAxMS40ODQ3MDU5NyAtNS45Nzg2NTI5NSA5LjA4NDg1NDEzIEMtNS41NjcyODA4OCA4LjAzNDM0ODc1IC01LjE1NTkwODgxIDYuOTgzODQzMzggLTQuNzMyMDcwOTIgNS45MDE1MDQ1MiBDLTQuMzc4MzAzODMgNC45OTQ2NDkwNSAtNC4wMjQ1MzY3NCA0LjA4Nzc5MzU4IC0zLjY2MDA0OTQ0IDMuMTUzNDU3NjQgQy0yLjM3OTk5Mzk4IDAuMTU5ODMxNzMgLTIuMzc5OTkzOTggMC4xNTk4MzE3MyAwIDAgWiBNMjAuMjA5MzM1MzMgMzQuMTIwMjU0NTIgQzE2LjgxMTU1MDQyIDQxLjQ0MTY3MiAxMy45NzAzMDk5MyA0OC45Mjk2MjIxMiAxMS4yMDc4NzA0OCA1Ni41MDY3MjkxMyBDMTAuNDUxMzgyMzUgNTguNTc5NTQ2MDkgOS42ODgwNjYyNSA2MC42NDk3NjM3OSA4LjkyNDE3OTA4IDYyLjcxOTg2Mzg5IEM4LjQ0MDY5OTkyIDY0LjAzOTM3NjU3IDcuOTU3NjEyMjcgNjUuMzU5MDMyNzggNy40NzQ5NjAzMyA2Ni42Nzg4NDgyNyBDNy4wMzk1Nzk0NyA2Ny44Njc5Mjc4NiA2LjYwNDE5ODYxIDY5LjA1NzAwNzQ1IDYuMTU1NjI0MzkgNzAuMjgyMTE5NzUgQzUuMTAzOTAxNTkgNzIuOTM3ODUxOCA1LjEwMzkwMTU5IDcyLjkzNzg1MTggNS4yMDkzMzUzMyA3NS4xMjAyNTQ1MiBDMTUuMTA5MzM1MzMgNzUuMTIwMjU0NTIgMjUuMDA5MzM1MzMgNzUuMTIwMjU0NTIgMzUuMjA5MzM1MzMgNzUuMTIwMjU0NTIgQzMzLjQxMTgzNzk3IDY5LjEyODU5NjY3IDMxLjYyMDI3MzkyIDYzLjIzNDQ4Mzc4IDI5LjUxMDExNjU4IDU3LjM2MjQ0MjAyIEMyOS4yNzAyMDQ5MyA1Ni42ODg1MTQxIDI5LjAzMDI5MzI3IDU2LjAxNDU4NjE4IDI4Ljc4MzExMTU3IDU1LjMyMDIzNjIxIEMyOC4wMzE2Nzg1NiA1My4yMTEwNzA1NyAyNy4yNzY4MzI1IDUxLjEwMzE0NjU4IDI2LjUyMTgzNTMzIDQ4Ljk5NTI1NDUyIEMyNi4wMDUzMzA1NCA0Ny41NDc0MTk0MyAyNS40ODkwNTI4MSA0Ni4wOTk1MDMzMyAyNC45NzMwMDcyIDQ0LjY1MTUwNDUyIEMyMy43MjEwNjM0NyA0MS4xNDAxNTA4OCAyMi40NjYwNjAxOSAzNy42Mjk5MDAyNSAyMS4yMDkzMzUzMyAzNC4xMjAyNTQ1MiBDMjAuODc5MzM1MzMgMzQuMTIwMjU0NTIgMjAuNTQ5MzM1MzMgMzQuMTIwMjU0NTIgMjAuMjA5MzM1MzMgMzQuMTIwMjU0NTIgWiBNLTAuNzkwNjY0NjcgOTAuMTIwMjU0NTIgQy0xLjQ1MDY2NDY3IDkyLjQzMDI1NDUyIC0yLjExMDY2NDY3IDk0Ljc0MDI1NDUyIC0yLjc5MDY2NDY3IDk3LjEyMDI1NDUyIEMxMi4zODkzMzUzMyA5Ny4xMjAyNTQ1MiAyNy41NjkzMzUzMyA5Ny4xMjAyNTQ1MiA0My4yMDkzMzUzMyA5Ny4xMjAyNTQ1MiBDNDIuNTQ5MzM1MzMgOTQuODEwMjU0NTIgNDEuODg5MzM1MzMgOTIuNTAwMjU0NTIgNDEuMjA5MzM1MzMgOTAuMTIwMjU0NTIgQzI3LjM0OTMzNTMzIDkwLjEyMDI1NDUyIDEzLjQ4OTMzNTMzIDkwLjEyMDI1NDUyIC0wLjc5MDY2NDY3IDkwLjEyMDI1NDUyIFogIiBmaWxsPSIjOUU5RTlFIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMDcuNzkwNjY0NjcyODUxNTYsNDUuODc5NzQ1NDgzMzk4NDQpIi8+Cjwvc3ZnPgo=',
- blocks: [
- {
- opcode: 'login',
- text: 'Log in with [SERVICE]',
- blockType: Scratch.BlockType.COMMAND,
- arguments: {
- SERVICE: { type: Scratch.ArgumentType.STRING, menu: 'SERVICE' },
- },
- },
- {
- opcode: 'isLoggedIn',
- text: 'Is user logged in with [SERVICE]?',
- blockType: Scratch.BlockType.BOOLEAN,
- arguments: {
- SERVICE: { type: Scratch.ArgumentType.STRING, menu: 'SERVICE' },
- },
- },
- {
- opcode: 'setClientId',
- text: 'Set client ID for [SERVICE] to [CLIENT_ID]',
- blockType: Scratch.BlockType.COMMAND,
- arguments: {
- SERVICE: { type: Scratch.ArgumentType.STRING, menu: 'SERVICE' },
- CLIENT_ID: { type: Scratch.ArgumentType.STRING, defaultValue: '' },
- },
- },
- {
- opcode: 'setClientSecret',
- text: 'Set client secret for [SERVICE] to [CLIENT_SECRET]',
- blockType: Scratch.BlockType.COMMAND,
- arguments: {
- SERVICE: { type: Scratch.ArgumentType.STRING, menu: 'SERVICE' },
- CLIENT_SECRET: { type: Scratch.ArgumentType.STRING, defaultValue: '' },
- },
- },
- {
- opcode: 'setRedirectUri',
- text: 'Set redirect URI for [SERVICE] to [REDIRECT_URI]',
- blockType: Scratch.BlockType.COMMAND,
- arguments: {
- SERVICE: { type: Scratch.ArgumentType.STRING, menu: 'SERVICE' },
- REDIRECT_URI: { type: Scratch.ArgumentType.STRING, defaultValue: '' },
- },
- },
- ],
- menus: {
- SERVICE: {
- items: [
- { text: 'Google', value: 'google' },
- { text: 'Microsoft', value: 'microsoft' },
- { text: 'Discord', value: 'discord' },
- { text: 'Twitter', value: 'twitter' },
- { text: 'GitHub', value: 'github' },
- { text: 'Facebook', value: 'facebook' },
- { text: 'LinkedIn', value: 'linkedin' },
- { text: 'Spotify', value: 'spotify' },
- ],
- },
+ getInfo() {
+ return {
+ id: "oauthExtension",
+ name: "OAuth Extension",
+ color1: "#FFAB19", // Primary color
+ color2: "#FF8C00", // Secondary color
+ color3: "#E76F00", // Tertiary color
+ blockIconURI:
+ "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI1NiIgaGVpZ2h0PSIyNTYiPgo8cGF0aCBkPSJNMCAwIEMyMi4wMzg1MjY1MiAxOC44MTE1OTg1NiAzNi40NjU3OTMzNCA0MS4wNjM3MzM3NyA0NC4zNTE1NjI1IDY4LjkxMDE1NjI1IEM0NC42OTMxNjQwNiA3MC4wODgzNTkzNyA0NS4wMzQ3NjU2MyA3MS4yNjY1NjI1IDQ1LjM4NjcxODc1IDcyLjQ4MDQ2ODc1IEM1MS41OTA5Mjc1NSA5OC43NDAxNDMyMiA0OC4xMTkzNTU5NyAxMjguNDA3NTUzODkgMzcuMzUxNTYyNSAxNTIuOTEwMTU2MjUgQzM2LjkyNjY1NTI3IDE1My44OTE0NTUwOCAzNi45MjY2NTUyNyAxNTMuODkxNDU1MDggMzYuNDkzMTY0MDYgMTU0Ljg5MjU3ODEyIEMyNi41NTAxNTk0MyAxNzcuNDE1NDA2MzEgOS4zNjgzODI4MiAxOTcuMDgzNzE0NDMgLTExLjY0ODQzNzUgMjA5LjkxMDE1NjI1IEMtMTIuNzIwOTM3NSAyMTAuNTkzMzU5MzggLTEzLjc5MzQzNzUgMjExLjI3NjU2MjUgLTE0Ljg5ODQzNzUgMjExLjk4MDQ2ODc1IEMtNDIuNzU5MjI3OTQgMjI4Ljk0MjAxNDc4IC03OC4yNTA2MTE4OSAyMzMuOTI2NDg1NDUgLTExMC4wMzAyNzM0NCAyMjYuNzQ3MDcwMzEgQy0xMTcuODE5NDE3MjkgMjI0Ljc3NzM2MzU3IC0xMjUuMjk4MDI2MiAyMjIuMTQwMzMxOTUgLTEzMi42NDg0Mzc1IDIxOC45MTAxNTYyNSBDLTEzMy4zMDI2MzY3MiAyMTguNjI2ODg0NzcgLTEzMy45NTY4MzU5NCAyMTguMzQzNjEzMjggLTEzNC42MzA4NTkzOCAyMTguMDUxNzU3ODEgQy0xNjQuNzI1OTMyMzQgMjA0Ljc2NTg4NDE0IC0xODguNDMyNjIzMzkgMTc5LjE4ODU5MzM5IC0yMDAuNTE5NTMxMjUgMTQ4LjcxMzg2NzE5IEMtMjAyLjQ3ODkwMDc3IDE0My41MTUyMTc0MiAtMjA0LjEzNTA4MjUgMTM4LjI1NDE1Mjc0IC0yMDUuNjQ4NDM3NSAxMzIuOTEwMTU2MjUgQy0yMDUuOTkwMDM5MDYgMTMxLjczMTk1MzEyIC0yMDYuMzMxNjQwNjMgMTMwLjU1Mzc1IC0yMDYuNjgzNTkzNzUgMTI5LjMzOTg0Mzc1IEMtMjE0LjIxNzQzOTk4IDk3LjQ1MjQwMTU3IC0yMDcuODM1NTc0NTYgNjEuNDM0NjUxNjEgLTE5MS4wMDc4MTI1IDMzLjYwNTQ2ODc1IEMtMTcyLjcxOTMxMzkzIDQuNTE1NjA4MTggLTE0NS40NzI3MDQ5NSAtMTQuNzk0NDA5MjYgLTExMi42NDg0Mzc1IC0yNC4wODk4NDM3NSBDLTExMS40NzAyMzQzOCAtMjQuNDMxNDQ1MzEgLTExMC4yOTIwMzEyNSAtMjQuNzczMDQ2ODcgLTEwOS4wNzgxMjUgLTI1LjEyNSBDLTcxLjkxMjE2MjA0IC0zMy45MDU5NjkyNyAtMjkuNDM4MzUxODQgLTI0LjE0NjUyMjQyIDAgMCBaIE0tMTU2LjY0ODQzNzUgMzguOTEwMTU2MjUgQy0xNzIuNjc2OTQzNTIgNTguMDg4NzczMjggLTE4MC4zOTY0OTAzOCA4NC41ODg4MzUyMyAtMTc4LjM3MTA5Mzc1IDEwOS4yOTI5Njg3NSBDLTE3NS40NzE3NjMxNSAxMzUuNzQ1OTA4ODUgLTE2Mi45NTU1MTQxMyAxNTkuNTg0NTMzMDggLTE0Mi42NDg0Mzc1IDE3Ni45MTAxNTYyNSBDLTEyNi41NDMxNjcwNSAxODkuNjk5NjM1NzIgLTEwNi4zMjExMTA2MiAxOTguMDkxNzg4ODEgLTg1LjY0ODQzNzUgMTk4LjkxMDE1NjI1IEMtODQuODg5MTc5NjkgMTk4Ljk1MDExNzE5IC04NC4xMjk5MjE4NyAxOTguOTkwMDc4MTIgLTgzLjM0NzY1NjI1IDE5OS4wMzEyNSBDLTU2LjU4MDI3NzA5IDE5OS43NzYwMDUyMyAtMzEuNDM2MTQxNzYgMTg4LjgxNjI3MjU4IC0xMi4wNTQ0NDMzNiAxNzAuNzY1NjI1IEM1LjI3MjM5MDEyIDE1NC4wMTA3MzQ1MiAxNi4zOTQyODMxMyAxMzAuMDkxODY1NjUgMTcuMzUxNTYyNSAxMDUuOTEwMTU2MjUgQzE3LjM5MTUyMzQ0IDEwNS4xNTA4OTg0NCAxNy40MzE0ODQzNyAxMDQuMzkxNjQwNjIgMTcuNDcyNjU2MjUgMTAzLjYwOTM3NSBDMTguMjE3NDExNDggNzYuODQxOTk1ODQgNy4yNTc2Nzg4MyA1MS42OTc4NjA1MSAtMTAuNzkyOTY4NzUgMzIuMzE2MTYyMTEgQy0yNy41NDc4NTkyMyAxNC45ODkzMjg2MyAtNTEuNDY2NzI4MSAzLjg2NzQzNTYyIC03NS42NDg0Mzc1IDIuOTEwMTU2MjUgQy03Ni43ODczMjQyMiAyLjg1MDIxNDg0IC03Ni43ODczMjQyMiAyLjg1MDIxNDg0IC03Ny45NDkyMTg3NSAyLjc4OTA2MjUgQy0xMDguODU5OTYwMDYgMS45MjkwMjU1MSAtMTM2LjI0OTk3Njk4IDE2LjQzMzI0OTk3IC0xNTYuNjQ4NDM3NSAzOC45MTAxNTYyNSBaICIgZmlsbD0iIzlFOUU5RSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjA4LjY0ODQzNzUsMjcuMDg5ODQzNzUpIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuNzc5NDM0NjYgMC4wMDIyMjA2MSAxLjU1ODg2OTMyIDAuMDA0NDQxMjIgMi4zNjE5MjMyMiAwLjAwNjcyOTEzIEMzLjI0Mjc2MDc3IDAuMDA2ODA0NjYgNC4xMjM1OTgzMyAwLjAwNjg4MDE5IDUuMDMxMTI3OTMgMC4wMDY5NTgwMSBDNS45ODg0MTI5MyAwLjAxMjExOTI5IDYuOTQ1Njk3OTQgMC4wMTcyODA1OCA3LjkzMTk5MTU4IDAuMDIyNTk4MjcgQzkuMzk0ODA4MTIgMC4wMjQ3MjA2OSA5LjM5NDgwODEyIDAuMDI0NzIwNjkgMTAuODg3MTc2NTEgMC4wMjY4ODU5OSBDMTQuMDE1NDI2NzUgMC4wMzI1MDMxOSAxNy4xNDM2MDY1NiAwLjA0NTA1ODU5IDIwLjI3MTgzNTMzIDAuMDU3NzU0NTIgQzIyLjM4NzA2ODY3IDAuMDYyNzY3MyAyNC41MDIzMDMxMyAwLjA2NzMzMDU5IDI2LjYxNzUzODQ1IDAuMDcxNDI2MzkgQzMxLjgxNDgyODI5IDAuMDgyNDc4MiAzNy4wMTIwNzY3OCAwLjA5OTIzMzA1IDQyLjIwOTMzNTMzIDAuMTIwMjU0NTIgQzQ0Ljk5MTE0MDUxIDYuMjUxMzU5MTEgNDcuNTc5MTE3NDUgMTIuNDM1MDc1MzMgNTAuMDM3NDYwMzMgMTguNzAyMjg1NzcgQzUwLjM5MDE1OTkxIDE5LjU5NjU0NzcgNTAuNzQyODU5NSAyMC40OTA4MDk2MyA1MS4xMDYyNDY5NSAyMS40MTIxNzA0MSBDNTIuMjI1NzczMjEgMjQuMjUxNjQ4MTQgNTMuMzQyNjgwOCAyNy4wOTIxNDYzOCA1NC40NTkzMzUzMyAyOS45MzI3NTQ1MiBDNTUuNTU3NzAyMTUgMzIuNzIyNDMxMiA1Ni42NTY2Mzk1MiAzNS41MTE4ODE3NCA1Ny43NTYwODgyNiAzOC4zMDExMzIyIEM1OC40ODMyNDk1MSA0MC4xNDY2MDUxNSA1OS4yMDk1NzI4OCA0MS45OTI0MDg0OCA1OS45MzUwNDMzMyA0My44Mzg1NDY3NSBDNjEuNzc4MzM5NjQgNDguNTIyNzUzMjQgNjMuNjQxMjU5NzcgNTMuMTk3NzI3NjUgNjUuNTM5NDEzNDUgNTcuODYwMDAwNjEgQzY1LjkxMTc3MTI0IDU4Ljc3Nzg2ODUgNjYuMjg0MTI5MDMgNTkuNjk1NzM2MzkgNjYuNjY3NzcwMzkgNjAuNjQxNDE4NDYgQzY3LjM3NzQxMTc2IDYyLjM4NzQ1NzM3IDY4LjA5MTI4MzIxIDY0LjEzMTc4NDgzIDY4LjgwOTk4MjMgNjUuODc0MTE0OTkgQzY5LjEyNTc4MjQ3IDY2LjY1MjMyMTAxIDY5LjQ0MTU4MjY0IDY3LjQzMDUyNzA0IDY5Ljc2Njk1MjUxIDY4LjIzMjMxNTA2IEM3MC4wNDY0MTcyNCA2OC45MTMyNzc0NCA3MC4zMjU4ODE5NiA2OS41OTQyMzk4MSA3MC42MTM4MTUzMSA3MC4yOTU4Mzc0IEM3MS4yMDkzMzUzMyA3Mi4xMjAyNTQ1MiA3MS4yMDkzMzUzMyA3Mi4xMjAyNTQ1MiA3MS4yMDkzMzUzMyA3NS4xMjAyNTQ1MiBDNzkuNDU5MzM1MzMgNzUuMTIwMjU0NTIgODcuNzA5MzM1MzMgNzUuMTIwMjU0NTIgOTYuMjA5MzM1MzMgNzUuMTIwMjU0NTIgQzk2LjIwOTMzNTMzIDgwLjA3MDI1NDUyIDk2LjIwOTMzNTMzIDg1LjAyMDI1NDUyIDk2LjIwOTMzNTMzIDkwLjEyMDI1NDUyIEM5MC4yNjkzMzUzMyA5MC4xMjAyNTQ1MiA4NC4zMjkzMzUzMyA5MC4xMjAyNTQ1MiA3OC4yMDkzMzUzMyA5MC4xMjAyNTQ1MiBDNzkuMTk5MzM1MzMgOTMuNTg1MjU0NTIgNzkuMTk5MzM1MzMgOTMuNTg1MjU0NTIgODAuMjA5MzM1MzMgOTcuMTIwMjU0NTIgQzg1LjQ4OTMzNTMzIDk3LjEyMDI1NDUyIDkwLjc2OTMzNTMzIDk3LjEyMDI1NDUyIDk2LjIwOTMzNTMzIDk3LjEyMDI1NDUyIEM5Ni4yMDkzMzUzMyAxMDIuMDcwMjU0NTIgOTYuMjA5MzM1MzMgMTA3LjAyMDI1NDUyIDk2LjIwOTMzNTMzIDExMi4xMjAyNTQ1MiBDOTEuNzU0MzM1MzMgMTEyLjYxNTI1NDUyIDkxLjc1NDMzNTMzIDExMi42MTUyNTQ1MiA4Ny4yMDkzMzUzMyAxMTMuMTIwMjU0NTIgQzg3LjcxNDY0NzgzIDExNC4zODQ4MjQ4MyA4OC4yMTk5NjAzMyAxMTUuNjQ5Mzk1MTQgODguNzQwNTg1MzMgMTE2Ljk1MjI4NTc3IEM4OS4zOTcxMDI1MiAxMTguNjEyMzM2MzcgOTAuMDUzMzM3ODkgMTIwLjI3MjQ5ODQ1IDkwLjcwOTMzNTMzIDEyMS45MzI3NTQ1MiBDOTEuMjEwMTM2MTEgMTIzLjE4MjgyMjg4IDkxLjIxMDEzNjExIDEyMy4xODI4MjI4OCA5MS43MjEwNTQwOCAxMjQuNDU4MTQ1MTQgQzkyLjE5NDc4NDU1IDEyNS42NjE4MDcyNSA5Mi4xOTQ3ODQ1NSAxMjUuNjYxODA3MjUgOTIuNjc4MDg1MzMgMTI2Ljg4OTc4NTc3IEM5Mi45NzEzNDcwNSAxMjcuNjI4MTc2ODggOTMuMjY0NjA4NzYgMTI4LjM2NjU2Nzk5IDkzLjU2Njc1NzIgMTI5LjEyNzMzNDU5IEM5NC4yMDkzMzUzMyAxMzEuMTIwMjU0NTIgOTQuMjA5MzM1MzMgMTMxLjEyMDI1NDUyIDk0LjIwOTMzNTMzIDEzNC4xMjAyNTQ1MiBDODEuOTk5MzM1MzMgMTM0LjEyMDI1NDUyIDY5Ljc4OTMzNTMzIDEzNC4xMjAyNTQ1MiA1Ny4yMDkzMzUzMyAxMzQuMTIwMjU0NTIgQzUyLjIwOTMzNTMzIDEyMi4xMjAyNTQ1MiA1Mi4yMDkzMzUzMyAxMjIuMTIwMjU0NTIgNDkuMjA5MzM1MzMgMTEyLjEyMDI1NDUyIEMzMC4wNjkzMzUzMyAxMTIuMTIwMjU0NTIgMTAuOTI5MzM1MzMgMTEyLjEyMDI1NDUyIC04Ljc5MDY2NDY3IDExMi4xMjAyNTQ1MiBDLTkuNzgwNjY0NjcgMTE1LjQyMDI1NDUyIC0xMC43NzA2NjQ2NyAxMTguNzIwMjU0NTIgLTExLjc5MDY2NDY3IDEyMi4xMjAyNTQ1MiBDLTEzLjQ0MDY2NDY3IDEyNi4wODAyNTQ1MiAtMTUuMDkwNjY0NjcgMTMwLjA0MDI1NDUyIC0xNi43OTA2NjQ2NyAxMzQuMTIwMjU0NTIgQy0yOS4wMDA2NjQ2NyAxMzQuMTIwMjU0NTIgLTQxLjIxMDY2NDY3IDEzNC4xMjAyNTQ1MiAtNTMuNzkwNjY0NjcgMTM0LjEyMDI1NDUyIEMtNTMuMTI2NDQxNjkgMTMwLjc5OTEzOTYgLTUyLjU1MzU4NjExIDEyOC4yMDE5NDI1MyAtNTEuMzgwNTA4NDIgMTI1LjEzMTk3MzI3IEMtNTAuOTc5Mjg3NzIgMTI0LjA3MzMzMDY5IC01MC45NzkyODc3MiAxMjQuMDczMzMwNjkgLTUwLjU2OTk2MTU1IDEyMi45OTMzMDEzOSBDLTUwLjI5MjE2ODU4IDEyMi4yNzIwNzA5MiAtNTAuMDE0Mzc1NjEgMTIxLjU1MDg0MDQ1IC00OS43MjgxNjQ2NyAxMjAuODA3NzU0NTIgQy00OS4zMDU2NzQ0NCAxMTkuNjk2OTA0OTEgLTQ5LjMwNTY3NDQ0IDExOS42OTY5MDQ5MSAtNDguODc0NjQ5MDUgMTE4LjU2MzYxMzg5IEMtNDguMTgzNDc4OTIgMTE2Ljc0NzgyNzk2IC00Ny40ODc1NDc3OSAxMTQuOTMzODU1NTIgLTQ2Ljc5MDY2NDY3IDExMy4xMjAyNTQ1MiBDLTQ5Ljc2MDY2NDY3IDExMi43OTAyNTQ1MiAtNTIuNzMwNjY0NjcgMTEyLjQ2MDI1NDUyIC01NS43OTA2NjQ2NyAxMTIuMTIwMjU0NTIgQy01NS43OTA2NjQ2NyAxMDcuMTcwMjU0NTIgLTU1Ljc5MDY2NDY3IDEwMi4yMjAyNTQ1MiAtNTUuNzkwNjY0NjcgOTcuMTIwMjU0NTIgQy01MC41MTA2NjQ2NyA5Ny4xMjAyNTQ1MiAtNDUuMjMwNjY0NjcgOTcuMTIwMjU0NTIgLTM5Ljc5MDY2NDY3IDk3LjEyMDI1NDUyIEMtMzkuMTMwNjY0NjcgOTQuODEwMjU0NTIgLTM4LjQ3MDY2NDY3IDkyLjUwMDI1NDUyIC0zNy43OTA2NjQ2NyA5MC4xMjAyNTQ1MiBDLTQzLjczMDY2NDY3IDkwLjEyMDI1NDUyIC00OS42NzA2NjQ2NyA5MC4xMjAyNTQ1MiAtNTUuNzkwNjY0NjcgOTAuMTIwMjU0NTIgQy01NS43OTA2NjQ2NyA4NS4xNzAyNTQ1MiAtNTUuNzkwNjY0NjcgODAuMjIwMjU0NTIgLTU1Ljc5MDY2NDY3IDc1LjEyMDI1NDUyIEMtNDcuNTQwNjY0NjcgNzUuMTIwMjU0NTIgLTM5LjI5MDY2NDY3IDc1LjEyMDI1NDUyIC0zMC43OTA2NjQ2NyA3NS4xMjAyNTQ1MiBDLTMwLjQ2MDY2NDY3IDczLjQ3MDI1NDUyIC0zMC4xMzA2NjQ2NyA3MS44MjAyNTQ1MiAtMjkuNzkwNjY0NjcgNzAuMTIwMjU0NTIgQy0yOS4zNTY1NzU4MyA2OC44MTI0MDQ1NiAtMjguODg3MjM5MjEgNjcuNTE1NzA5OTggLTI4LjM4Mjk0OTgzIDY2LjIzMzI5MTYzIEMtMjcuOTU1MjcwNjEgNjUuMTM2NzU1MTQgLTI3Ljk1NTI3MDYxIDY1LjEzNjc1NTE0IC0yNy41MTg5NTE0MiA2NC4wMTgwNjY0MSBDLTI3LjIwOTAwNzQyIDYzLjIzNTgxMTkyIC0yNi44OTkwNjM0MiA2Mi40NTM1NTc0MyAtMjYuNTc5NzI3MTcgNjEuNjQ3NTk4MjcgQy0yNi4wOTMyMzk1MiA2MC40MDUyNzE4NCAtMjYuMDkzMjM5NTIgNjAuNDA1MjcxODQgLTI1LjU5NjkyMzgzIDU5LjEzNzg0NzkgQy0yNC41NDA0OTM5NyA1Ni40NDI4OTc0OSAtMjMuNDc4MjE0MDQgNTMuNzUwMjk3MzYgLTIyLjQxNTY2NDY3IDUxLjA1Nzc1NDUyIEMtMjEuNjg4NjgwNTUgNDkuMjA3NjI3NzYgLTIwLjk2MjAzODM5IDQ3LjM1NzM2NjU5IC0yMC4yMzU3MzMwMyA0NS41MDY5NzMyNyBDLTE4Ljc3OTY4MzY3IDQxLjc5ODk3MzEgLTE3LjMyMTM4MjQ0IDM4LjA5MTg3MDIyIC0xNS44NjE0NjU0NSAzNC4zODUzOTEyNCBDLTE0LjAwMzg3MjU1IDI5LjY2NjY4MzE1IC0xMi4xNTg0NzMxNyAyNC45NDMzMjA2NSAtMTAuMzE4MDA4NDIgMjAuMjE3OTEwNzcgQy05LjgwNjIzMTMyIDE4LjkwNjEwMjQ1IC05LjI5NDM1Mzc3IDE3LjU5NDMzMzMyIC04Ljc4MjM2Mzg5IDE2LjI4MjYwODAzIEMtNy44NDYzMDQ5OSAxMy44ODM5MzcxMSAtNi45MTE2ODAwOCAxMS40ODQ3MDU5NyAtNS45Nzg2NTI5NSA5LjA4NDg1NDEzIEMtNS41NjcyODA4OCA4LjAzNDM0ODc1IC01LjE1NTkwODgxIDYuOTgzODQzMzggLTQuNzMyMDcwOTIgNS45MDE1MDQ1MiBDLTQuMzc4MzAzODMgNC45OTQ2NDkwNSAtNC4wMjQ1MzY3NCA0LjA4Nzc5MzU4IC0zLjY2MDA0OTQ0IDMuMTUzNDU3NjQgQy0yLjM3OTk5Mzk4IDAuMTU5ODMxNzMgLTIuMzc5OTkzOTggMC4xNTk4MzE3MyAwIDAgWiBNMjAuMjA5MzM1MzMgMzQuMTIwMjU0NTIgQzE2LjgxMTU1MDQyIDQxLjQ0MTY3MiAxMy45NzAzMDk5MyA0OC45Mjk2MjIxMiAxMS4yMDc4NzA0OCA1Ni41MDY3MjkxMyBDMTAuNDUxMzgyMzUgNTguNTc5NTQ2MDkgOS42ODgwNjYyNSA2MC42NDk3NjM3OSA4LjkyNDE3OTA4IDYyLjcxOTg2Mzg5IEM4LjQ0MDY5OTkyIDY0LjAzOTM3NjU3IDcuOTU3NjEyMjcgNjUuMzU5MDMyNzggNy40NzQ5NjAzMyA2Ni42Nzg4NDgyNyBDNy4wMzk1Nzk0NyA2Ny44Njc5Mjc4NiA2LjYwNDE5ODYxIDY5LjA1NzAwNzQ1IDYuMTU1NjI0MzkgNzAuMjgyMTE5NzUgQzUuMTAzOTAxNTkgNzIuOTM3ODUxOCA1LjEwMzkwMTU5IDcyLjkzNzg1MTggNS4yMDkzMzUzMyA3NS4xMjAyNTQ1MiBDMTUuMTA5MzM1MzMgNzUuMTIwMjU0NTIgMjUuMDA5MzM1MzMgNzUuMTIwMjU0NTIgMzUuMjA5MzM1MzMgNzUuMTIwMjU0NTIgQzMzLjQxMTgzNzk3IDY5LjEyODU5NjY3IDMxLjYyMDI3MzkyIDYzLjIzNDQ4Mzc4IDI5LjUxMDExNjU4IDU3LjM2MjQ0MjAyIEMyOS4yNzAyMDQ5MyA1Ni42ODg1MTQxIDI5LjAzMDI5MzI3IDU2LjAxNDU4NjE4IDI4Ljc4MzExMTU3IDU1LjMyMDIzNjIxIEMyOC4wMzE2Nzg1NiA1My4yMTEwNzA1NyAyNy4yNzY4MzI1IDUxLjEwMzE0NjU4IDI2LjUyMTgzNTMzIDQ4Ljk5NTI1NDUyIEMyNi4wMDUzMzA1NCA0Ny41NDc0MTk0MyAyNS40ODkwNTI4MSA0Ni4wOTk1MDMzMyAyNC45NzMwMDcyIDQ0LjY1MTUwNDUyIEMyMy43MjEwNjM0NyA0MS4xNDAxNTA4OCAyMi40NjYwNjAxOSAzNy42Mjk5MDAyNSAyMS4yMDkzMzUzMyAzNC4xMjAyNTQ1MiBDMjAuODc5MzM1MzMgMzQuMTIwMjU0NTIgMjAuNTQ5MzM1MzMgMzQuMTIwMjU0NTIgMjAuMjA5MzM1MzMgMzQuMTIwMjU0NTIgWiBNLTAuNzkwNjY0NjcgOTAuMTIwMjU0NTIgQy0xLjQ1MDY2NDY3IDkyLjQzMDI1NDUyIC0yLjExMDY2NDY3IDk0Ljc0MDI1NDUyIC0yLjc5MDY2NDY3IDk3LjEyMDI1NDUyIEMxMi4zODkzMzUzMyA5Ny4xMjAyNTQ1MiAyNy41NjkzMzUzMyA5Ny4xMjAyNTQ1MiA0My4yMDkzMzUzMyA5Ny4xMjAyNTQ1MiBDNDIuNTQ5MzM1MzMgOTQuODEwMjU0NTIgNDEuODg5MzM1MzMgOTIuNTAwMjU0NTIgNDEuMjA5MzM1MzMgOTAuMTIwMjU0NTIgQzI3LjM0OTMzNTMzIDkwLjEyMDI1NDUyIDEzLjQ4OTMzNTMzIDkwLjEyMDI1NDUyIC0wLjc5MDY2NDY3IDkwLjEyMDI1NDUyIFogIiBmaWxsPSIjOUU5RTlFIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMDcuNzkwNjY0NjcyODUxNTYsNDUuODc5NzQ1NDgzMzk4NDQpIi8+Cjwvc3ZnPgo=",
+ menuIconURI:
+ "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI1NiIgaGVpZ2h0PSIyNTYiPgo8cGF0aCBkPSJNMCAwIEMyMi4wMzg1MjY1MiAxOC44MTE1OTg1NiAzNi40NjU3OTMzNCA0MS4wNjM3MzM3NyA0NC4zNTE1NjI1IDY4LjkxMDE1NjI1IEM0NC42OTMxNjQwNiA3MC4wODgzNTkzNyA0NS4wMzQ3NjU2MyA3MS4yNjY1NjI1IDQ1LjM4NjcxODc1IDcyLjQ4MDQ2ODc1IEM1MS41OTA5Mjc1NSA5OC43NDAxNDMyMiA0OC4xMTkzNTU5NyAxMjguNDA3NTUzODkgMzcuMzUxNTYyNSAxNTIuOTEwMTU2MjUgQzM2LjkyNjY1NTI3IDE1My44OTE0NTUwOCAzNi45MjY2NTUyNyAxNTMuODkxNDU1MDggMzYuNDkzMTY0MDYgMTU0Ljg5MjU3ODEyIEMyNi41NTAxNTk0MyAxNzcuNDE1NDA2MzEgOS4zNjgzODI4MiAxOTcuMDgzNzE0NDMgLTExLjY0ODQzNzUgMjA5LjkxMDE1NjI1IEMtMTIuNzIwOTM3NSAyMTAuNTkzMzU5MzggLTEzLjc5MzQzNzUgMjExLjI3NjU2MjUgLTE0Ljg5ODQzNzUgMjExLjk4MDQ2ODc1IEMtNDIuNzU5MjI3OTQgMjI4Ljk0MjAxNDc4IC03OC4yNTA2MTE4OSAyMzMuOTI2NDg1NDUgLTExMC4wMzAyNzM0NCAyMjYuNzQ3MDcwMzEgQy0xMTcuODE5NDE3MjkgMjI0Ljc3NzM2MzU3IC0xMjUuMjk4MDI2MiAyMjIuMTQwMzMxOTUgLTEzMi42NDg0Mzc1IDIxOC45MTAxNTYyNSBDLTEzMy4zMDI2MzY3MiAyMTguNjI2ODg0NzcgLTEzMy45NTY4MzU5NCAyMTguMzQzNjEzMjggLTEzNC42MzA4NTkzOCAyMTguMDUxNzU3ODEgQy0xNjQuNzI1OTMyMzQgMjA0Ljc2NTg4NDE0IC0xODguNDMyNjIzMzkgMTc5LjE4ODU5MzM5IC0yMDAuNTE5NTMxMjUgMTQ4LjcxMzg2NzE5IEMtMjAyLjQ3ODkwMDc3IDE0My41MTUyMTc0MiAtMjA0LjEzNTA4MjUgMTM4LjI1NDE1Mjc0IC0yMDUuNjQ4NDM3NSAxMzIuOTEwMTU2MjUgQy0yMDUuOTkwMDM5MDYgMTMxLjczMTk1MzEyIC0yMDYuMzMxNjQwNjMgMTMwLjU1Mzc1IC0yMDYuNjgzNTkzNzUgMTI5LjMzOTg0Mzc1IEMtMjE0LjIxNzQzOTk4IDk3LjQ1MjQwMTU3IC0yMDcuODM1NTc0NTYgNjEuNDM0NjUxNjEgLTE5MS4wMDc4MTI1IDMzLjYwNTQ2ODc1IEMtMTcyLjcxOTMxMzkzIDQuNTE1NjA4MTggLTE0NS40NzI3MDQ5NSAtMTQuNzk0NDA5MjYgLTExMi42NDg0Mzc1IC0yNC4wODk4NDM3NSBDLTExMS40NzAyMzQzOCAtMjQuNDMxNDQ1MzEgLTExMC4yOTIwMzEyNSAtMjQuNzczMDQ2ODcgLTEwOS4wNzgxMjUgLTI1LjEyNSBDLTcxLjkxMjE2MjA0IC0zMy45MDU5NjkyNyAtMjkuNDM4MzUxODQgLTI0LjE0NjUyMjQyIDAgMCBaIE0tMTU2LjY0ODQzNzUgMzguOTEwMTU2MjUgQy0xNzIuNjc2OTQzNTIgNTguMDg4NzczMjggLTE4MC4zOTY0OTAzOCA4NC41ODg4MzUyMyAtMTc4LjM3MTA5Mzc1IDEwOS4yOTI5Njg3NSBDLTE3NS40NzE3NjMxNSAxMzUuNzQ1OTA4ODUgLTE2Mi45NTU1MTQxMyAxNTkuNTg0NTMzMDggLTE0Mi42NDg0Mzc1IDE3Ni45MTAxNTYyNSBDLTEyNi41NDMxNjcwNSAxODkuNjk5NjM1NzIgLTEwNi4zMjExMTA2MiAxOTguMDkxNzg4ODEgLTg1LjY0ODQzNzUgMTk4LjkxMDE1NjI1IEMtODQuODg5MTc5NjkgMTk4Ljk1MDExNzE5IC04NC4xMjk5MjE4NyAxOTguOTkwMDc4MTIgLTgzLjM0NzY1NjI1IDE5OS4wMzEyNSBDLTU2LjU4MDI3NzA5IDE5OS43NzYwMDUyMyAtMzEuNDM2MTQxNzYgMTg4LjgxNjI3MjU4IC0xMi4wNTQ0NDMzNiAxNzAuNzY1NjI1IEM1LjI3MjM5MDEyIDE1NC4wMTA3MzQ1MiAxNi4zOTQyODMxMyAxMzAuMDkxODY1NjUgMTcuMzUxNTYyNSAxMDUuOTEwMTU2MjUgQzE3LjM5MTUyMzQ0IDEwNS4xNTA4OTg0NCAxNy40MzE0ODQzNyAxMDQuMzkxNjQwNjIgMTcuNDcyNjU2MjUgMTAzLjYwOTM3NSBDMTguMjE3NDExNDggNzYuODQxOTk1ODQgNy4yNTc2Nzg4MyA1MS42OTc4NjA1MSAtMTAuNzkyOTY4NzUgMzIuMzE2MTYyMTEgQy0yNy41NDc4NTkyMyAxNC45ODkzMjg2MyAtNTEuNDY2NzI4MSAzLjg2NzQzNTYyIC03NS42NDg0Mzc1IDIuOTEwMTU2MjUgQy03Ni43ODczMjQyMiAyLjg1MDIxNDg0IC03Ni43ODczMjQyMiAyLjg1MDIxNDg0IC03Ny45NDkyMTg3NSAyLjc4OTA2MjUgQy0xMDguODU5OTYwMDYgMS45MjkwMjU1MSAtMTM2LjI0OTk3Njk4IDE2LjQzMzI0OTk3IC0xNTYuNjQ4NDM3NSAzOC45MTAxNTYyNSBaICIgZmlsbD0iIzlFOUU5RSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjA4LjY0ODQzNzUsMjcuMDg5ODQzNzUpIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuNzc5NDM0NjYgMC4wMDIyMjA2MSAxLjU1ODg2OTMyIDAuMDA0NDQxMjIgMi4zNjE5MjMyMiAwLjAwNjcyOTEzIEMzLjI0Mjc2MDc3IDAuMDA2ODA0NjYgNC4xMjM1OTgzMyAwLjAwNjg4MDE5IDUuMDMxMTI3OTMgMC4wMDY5NTgwMSBDNS45ODg0MTI5MyAwLjAxMjExOTI5IDYuOTQ1Njk3OTQgMC4wMTcyODA1OCA3LjkzMTk5MTU4IDAuMDIyNTk4MjcgQzkuMzk0ODA4MTIgMC4wMjQ3MjA2OSA5LjM5NDgwODEyIDAuMDI0NzIwNjkgMTAuODg3MTc2NTEgMC4wMjY4ODU5OSBDMTQuMDE1NDI2NzUgMC4wMzI1MDMxOSAxNy4xNDM2MDY1NiAwLjA0NTA1ODU5IDIwLjI3MTgzNTMzIDAuMDU3NzU0NTIgQzIyLjM4NzA2ODY3IDAuMDYyNzY3MyAyNC41MDIzMDMxMyAwLjA2NzMzMDU5IDI2LjYxNzUzODQ1IDAuMDcxNDI2MzkgQzMxLjgxNDgyODI5IDAuMDgyNDc4MiAzNy4wMTIwNzY3OCAwLjA5OTIzMzA1IDQyLjIwOTMzNTMzIDAuMTIwMjU0NTIgQzQ0Ljk5MTE0MDUxIDYuMjUxMzU5MTEgNDcuNTc5MTE3NDUgMTIuNDM1MDc1MzMgNTAuMDM3NDYwMzMgMTguNzAyMjg1NzcgQzUwLjM5MDE1OTkxIDE5LjU5NjU0NzcgNTAuNzQyODU5NSAyMC40OTA4MDk2MyA1MS4xMDYyNDY5NSAyMS40MTIxNzA0MSBDNTIuMjI1NzczMjEgMjQuMjUxNjQ4MTQgNTMuMzQyNjgwOCAyNy4wOTIxNDYzOCA1NC40NTkzMzUzMyAyOS45MzI3NTQ1MiBDNTUuNTU3NzAyMTUgMzIuNzIyNDMxMiA1Ni42NTY2Mzk1MiAzNS41MTE4ODE3NCA1Ny43NTYwODgyNiAzOC4zMDExMzIyIEM1OC40ODMyNDk1MSA0MC4xNDY2MDUxNSA1OS4yMDk1NzI4OCA0MS45OTI0MDg0OCA1OS45MzUwNDMzMyA0My44Mzg1NDY3NSBDNjEuNzc4MzM5NjQgNDguNTIyNzUzMjQgNjMuNjQxMjU5NzcgNTMuMTk3NzI3NjUgNjUuNTM5NDEzNDUgNTcuODYwMDAwNjEgQzY1LjkxMTc3MTI0IDU4Ljc3Nzg2ODUgNjYuMjg0MTI5MDMgNTkuNjk1NzM2MzkgNjYuNjY3NzcwMzkgNjAuNjQxNDE4NDYgQzY3LjM3NzQxMTc2IDYyLjM4NzQ1NzM3IDY4LjA5MTI4MzIxIDY0LjEzMTc4NDgzIDY4LjgwOTk4MjMgNjUuODc0MTE0OTkgQzY5LjEyNTc4MjQ3IDY2LjY1MjMyMTAxIDY5LjQ0MTU4MjY0IDY3LjQzMDUyNzA0IDY5Ljc2Njk1MjUxIDY4LjIzMjMxNTA2IEM3MC4wNDY0MTcyNCA2OC45MTMyNzc0NCA3MC4zMjU4ODE5NiA2OS41OTQyMzk4MSA3MC42MTM4MTUzMSA3MC4yOTU4Mzc0IEM3MS4yMDkzMzUzMyA3Mi4xMjAyNTQ1MiA3MS4yMDkzMzUzMyA3Mi4xMjAyNTQ1MiA3MS4yMDkzMzUzMyA3NS4xMjAyNTQ1MiBDNzkuNDU5MzM1MzMgNzUuMTIwMjU0NTIgODcuNzA5MzM1MzMgNzUuMTIwMjU0NTIgOTYuMjA5MzM1MzMgNzUuMTIwMjU0NTIgQzk2LjIwOTMzNTMzIDgwLjA3MDI1NDUyIDk2LjIwOTMzNTMzIDg1LjAyMDI1NDUyIDk2LjIwOTMzNTMzIDkwLjEyMDI1NDUyIEM5MC4yNjkzMzUzMyA5MC4xMjAyNTQ1MiA4NC4zMjkzMzUzMyA5MC4xMjAyNTQ1MiA3OC4yMDkzMzUzMyA5MC4xMjAyNTQ1MiBDNzkuMTk5MzM1MzMgOTMuNTg1MjU0NTIgNzkuMTk5MzM1MzMgOTMuNTg1MjU0NTIgODAuMjA5MzM1MzMgOTcuMTIwMjU0NTIgQzg1LjQ4OTMzNTMzIDk3LjEyMDI1NDUyIDkwLjc2OTMzNTMzIDk3LjEyMDI1NDUyIDk2LjIwOTMzNTMzIDk3LjEyMDI1NDUyIEM5Ni4yMDkzMzUzMyAxMDIuMDcwMjU0NTIgOTYuMjA5MzM1MzMgMTA3LjAyMDI1NDUyIDk2LjIwOTMzNTMzIDExMi4xMjAyNTQ1MiBDOTEuNzU0MzM1MzMgMTEyLjYxNTI1NDUyIDkxLjc1NDMzNTMzIDExMi42MTUyNTQ1MiA4Ny4yMDkzMzUzMyAxMTMuMTIwMjU0NTIgQzg3LjcxNDY0NzgzIDExNC4zODQ4MjQ4MyA4OC4yMTk5NjAzMyAxMTUuNjQ5Mzk1MTQgODguNzQwNTg1MzMgMTE2Ljk1MjI4NTc3IEM4OS4zOTcxMDI1MiAxMTguNjEyMzM2MzcgOTAuMDUzMzM3ODkgMTIwLjI3MjQ5ODQ1IDkwLjcwOTMzNTMzIDEyMS45MzI3NTQ1MiBDOTEuMjEwMTM2MTEgMTIzLjE4MjgyMjg4IDkxLjIxMDEzNjExIDEyMy4xODI4MjI4OCA5MS43MjEwNTQwOCAxMjQuNDU4MTQ1MTQgQzkyLjE5NDc4NDU1IDEyNS42NjE4MDcyNSA5Mi4xOTQ3ODQ1NSAxMjUuNjYxODA3MjUgOTIuNjc4MDg1MzMgMTI2Ljg4OTc4NTc3IEM5Mi45NzEzNDcwNSAxMjcuNjI4MTc2ODggOTMuMjY0NjA4NzYgMTI4LjM2NjU2Nzk5IDkzLjU2Njc1NzIgMTI5LjEyNzMzNDU5IEM5NC4yMDkzMzUzMyAxMzEuMTIwMjU0NTIgOTQuMjA5MzM1MzMgMTMxLjEyMDI1NDUyIDk0LjIwOTMzNTMzIDEzNC4xMjAyNTQ1MiBDODEuOTk5MzM1MzMgMTM0LjEyMDI1NDUyIDY5Ljc4OTMzNTMzIDEzNC4xMjAyNTQ1MiA1Ny4yMDkzMzUzMyAxMzQuMTIwMjU0NTIgQzUyLjIwOTMzNTMzIDEyMi4xMjAyNTQ1MiA1Mi4yMDkzMzUzMyAxMjIuMTIwMjU0NTIgNDkuMjA5MzM1MzMgMTEyLjEyMDI1NDUyIEMzMC4wNjkzMzUzMyAxMTIuMTIwMjU0NTIgMTAuOTI5MzM1MzMgMTEyLjEyMDI1NDUyIC04Ljc5MDY2NDY3IDExMi4xMjAyNTQ1MiBDLTkuNzgwNjY0NjcgMTE1LjQyMDI1NDUyIC0xMC43NzA2NjQ2NyAxMTguNzIwMjU0NTIgLTExLjc5MDY2NDY3IDEyMi4xMjAyNTQ1MiBDLTEzLjQ0MDY2NDY3IDEyNi4wODAyNTQ1MiAtMTUuMDkwNjY0NjcgMTMwLjA0MDI1NDUyIC0xNi43OTA2NjQ2NyAxMzQuMTIwMjU0NTIgQy0yOS4wMDA2NjQ2NyAxMzQuMTIwMjU0NTIgLTQxLjIxMDY2NDY3IDEzNC4xMjAyNTQ1MiAtNTMuNzkwNjY0NjcgMTM0LjEyMDI1NDUyIEMtNTMuMTI2NDQxNjkgMTMwLjc5OTEzOTYgLTUyLjU1MzU4NjExIDEyOC4yMDE5NDI1MyAtNTEuMzgwNTA4NDIgMTI1LjEzMTk3MzI3IEMtNTAuOTc5Mjg3NzIgMTI0LjA3MzMzMDY5IC01MC45NzkyODc3MiAxMjQuMDczMzMwNjkgLTUwLjU2OTk2MTU1IDEyMi45OTMzMDEzOSBDLTUwLjI5MjE2ODU4IDEyMi4yNzIwNzA5MiAtNTAuMDE0Mzc1NjEgMTIxLjU1MDg0MDQ1IC00OS43MjgxNjQ2NyAxMjAuODA3NzU0NTIgQy00OS4zMDU2NzQ0NCAxMTkuNjk2OTA0OTEgLTQ5LjMwNTY3NDQ0IDExOS42OTY5MDQ5MSAtNDguODc0NjQ5MDUgMTE4LjU2MzYxMzg5IEMtNDguMTgzNDc4OTIgMTE2Ljc0NzgyNzk2IC00Ny40ODc1NDc3OSAxMTQuOTMzODU1NTIgLTQ2Ljc5MDY2NDY3IDExMy4xMjAyNTQ1MiBDLTQ5Ljc2MDY2NDY3IDExMi43OTAyNTQ1MiAtNTIuNzMwNjY0NjcgMTEyLjQ2MDI1NDUyIC01NS43OTA2NjQ2NyAxMTIuMTIwMjU0NTIgQy01NS43OTA2NjQ2NyAxMDcuMTcwMjU0NTIgLTU1Ljc5MDY2NDY3IDEwMi4yMjAyNTQ1MiAtNTUuNzkwNjY0NjcgOTcuMTIwMjU0NTIgQy01MC41MTA2NjQ2NyA5Ny4xMjAyNTQ1MiAtNDUuMjMwNjY0NjcgOTcuMTIwMjU0NTIgLTM5Ljc5MDY2NDY3IDk3LjEyMDI1NDUyIEMtMzkuMTMwNjY0NjcgOTQuODEwMjU0NTIgLTM4LjQ3MDY2NDY3IDkyLjUwMDI1NDUyIC0zNy43OTA2NjQ2NyA5MC4xMjAyNTQ1MiBDLTQzLjczMDY2NDY3IDkwLjEyMDI1NDUyIC00OS42NzA2NjQ2NyA5MC4xMjAyNTQ1MiAtNTUuNzkwNjY0NjcgOTAuMTIwMjU0NTIgQy01NS43OTA2NjQ2NyA4NS4xNzAyNTQ1MiAtNTUuNzkwNjY0NjcgODAuMjIwMjU0NTIgLTU1Ljc5MDY2NDY3IDc1LjEyMDI1NDUyIEMtNDcuNTQwNjY0NjcgNzUuMTIwMjU0NTIgLTM5LjI5MDY2NDY3IDc1LjEyMDI1NDUyIC0zMC43OTA2NjQ2NyA3NS4xMjAyNTQ1MiBDLTMwLjQ2MDY2NDY3IDczLjQ3MDI1NDUyIC0zMC4xMzA2NjQ2NyA3MS44MjAyNTQ1MiAtMjkuNzkwNjY0NjcgNzAuMTIwMjU0NTIgQy0yOS4zNTY1NzU4MyA2OC44MTI0MDQ1NiAtMjguODg3MjM5MjEgNjcuNTE1NzA5OTggLTI4LjM4Mjk0OTgzIDY2LjIzMzI5MTYzIEMtMjcuOTU1MjcwNjEgNjUuMTM2NzU1MTQgLTI3Ljk1NTI3MDYxIDY1LjEzNjc1NTE0IC0yNy41MTg5NTE0MiA2NC4wMTgwNjY0MSBDLTI3LjIwOTAwNzQyIDYzLjIzNTgxMTkyIC0yNi44OTkwNjM0MiA2Mi40NTM1NTc0MyAtMjYuNTc5NzI3MTcgNjEuNjQ3NTk4MjcgQy0yNi4wOTMyMzk1MiA2MC40MDUyNzE4NCAtMjYuMDkzMjM5NTIgNjAuNDA1MjcxODQgLTI1LjU5NjkyMzgzIDU5LjEzNzg0NzkgQy0yNC41NDA0OTM5NyA1Ni40NDI4OTc0OSAtMjMuNDc4MjE0MDQgNTMuNzUwMjk3MzYgLTIyLjQxNTY2NDY3IDUxLjA1Nzc1NDUyIEMtMjEuNjg4NjgwNTUgNDkuMjA3NjI3NzYgLTIwLjk2MjAzODM5IDQ3LjM1NzM2NjU5IC0yMC4yMzU3MzMwMyA0NS41MDY5NzMyNyBDLTE4Ljc3OTY4MzY3IDQxLjc5ODk3MzEgLTE3LjMyMTM4MjQ0IDM4LjA5MTg3MDIyIC0xNS44NjE0NjU0NSAzNC4zODUzOTEyNCBDLTE0LjAwMzg3MjU1IDI5LjY2NjY4MzE1IC0xMi4xNTg0NzMxNyAyNC45NDMzMjA2NSAtMTAuMzE4MDA4NDIgMjAuMjE3OTEwNzcgQy05LjgwNjIzMTMyIDE4LjkwNjEwMjQ1IC05LjI5NDM1Mzc3IDE3LjU5NDMzMzMyIC04Ljc4MjM2Mzg5IDE2LjI4MjYwODAzIEMtNy44NDYzMDQ5OSAxMy44ODM5MzcxMSAtNi45MTE2ODAwOCAxMS40ODQ3MDU5NyAtNS45Nzg2NTI5NSA5LjA4NDg1NDEzIEMtNS41NjcyODA4OCA4LjAzNDM0ODc1IC01LjE1NTkwODgxIDYuOTgzODQzMzggLTQuNzMyMDcwOTIgNS45MDE1MDQ1MiBDLTQuMzc4MzAzODMgNC45OTQ2NDkwNSAtNC4wMjQ1MzY3NCA0LjA4Nzc5MzU4IC0zLjY2MDA0OTQ0IDMuMTUzNDU3NjQgQy0yLjM3OTk5Mzk4IDAuMTU5ODMxNzMgLTIuMzc5OTkzOTggMC4xNTk4MzE3MyAwIDAgWiBNMjAuMjA5MzM1MzMgMzQuMTIwMjU0NTIgQzE2LjgxMTU1MDQyIDQxLjQ0MTY3MiAxMy45NzAzMDk5MyA0OC45Mjk2MjIxMiAxMS4yMDc4NzA0OCA1Ni41MDY3MjkxMyBDMTAuNDUxMzgyMzUgNTguNTc5NTQ2MDkgOS42ODgwNjYyNSA2MC42NDk3NjM3OSA4LjkyNDE3OTA4IDYyLjcxOTg2Mzg5IEM4LjQ0MDY5OTkyIDY0LjAzOTM3NjU3IDcuOTU3NjEyMjcgNjUuMzU5MDMyNzggNy40NzQ5NjAzMyA2Ni42Nzg4NDgyNyBDNy4wMzk1Nzk0NyA2Ny44Njc5Mjc4NiA2LjYwNDE5ODYxIDY5LjA1NzAwNzQ1IDYuMTU1NjI0MzkgNzAuMjgyMTE5NzUgQzUuMTAzOTAxNTkgNzIuOTM3ODUxOCA1LjEwMzkwMTU5IDcyLjkzNzg1MTggNS4yMDkzMzUzMyA3NS4xMjAyNTQ1MiBDMTUuMTA5MzM1MzMgNzUuMTIwMjU0NTIgMjUuMDA5MzM1MzMgNzUuMTIwMjU0NTIgMzUuMjA5MzM1MzMgNzUuMTIwMjU0NTIgQzMzLjQxMTgzNzk3IDY5LjEyODU5NjY3IDMxLjYyMDI3MzkyIDYzLjIzNDQ4Mzc4IDI5LjUxMDExNjU4IDU3LjM2MjQ0MjAyIEMyOS4yNzAyMDQ5MyA1Ni42ODg1MTQxIDI5LjAzMDI5MzI3IDU2LjAxNDU4NjE4IDI4Ljc4MzExMTU3IDU1LjMyMDIzNjIxIEMyOC4wMzE2Nzg1NiA1My4yMTEwNzA1NyAyNy4yNzY4MzI1IDUxLjEwMzE0NjU4IDI2LjUyMTgzNTMzIDQ4Ljk5NTI1NDUyIEMyNi4wMDUzMzA1NCA0Ny41NDc0MTk0MyAyNS40ODkwNTI4MSA0Ni4wOTk1MDMzMyAyNC45NzMwMDcyIDQ0LjY1MTUwNDUyIEMyMy43MjEwNjM0NyA0MS4xNDAxNTA4OCAyMi40NjYwNjAxOSAzNy42Mjk5MDAyNSAyMS4yMDkzMzUzMyAzNC4xMjAyNTQ1MiBDMjAuODc5MzM1MzMgMzQuMTIwMjU0NTIgMjAuNTQ5MzM1MzMgMzQuMTIwMjU0NTIgMjAuMjA5MzM1MzMgMzQuMTIwMjU0NTIgWiBNLTAuNzkwNjY0NjcgOTAuMTIwMjU0NTIgQy0xLjQ1MDY2NDY3IDkyLjQzMDI1NDUyIC0yLjExMDY2NDY3IDk0Ljc0MDI1NDUyIC0yLjc5MDY2NDY3IDk3LjEyMDI1NDUyIEMxMi4zODkzMzUzMyA5Ny4xMjAyNTQ1MiAyNy41NjkzMzUzMyA5Ny4xMjAyNTQ1MiA0My4yMDkzMzUzMyA5Ny4xMjAyNTQ1MiBDNDIuNTQ5MzM1MzMgOTQuODEwMjU0NTIgNDEuODg5MzM1MzMgOTIuNTAwMjU0NTIgNDEuMjA5MzM1MzMgOTAuMTIwMjU0NTIgQzI3LjM0OTMzNTMzIDkwLjEyMDI1NDUyIDEzLjQ4OTMzNTMzIDkwLjEyMDI1NDUyIC0wLjc5MDY2NDY3IDkwLjEyMDI1NDUyIFogIiBmaWxsPSIjOUU5RTlFIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMDcuNzkwNjY0NjcyODUxNTYsNDUuODc5NzQ1NDgzMzk4NDQpIi8+Cjwvc3ZnPgo=",
+ blocks: [
+ {
+ opcode: "login",
+ text: "Log in with [SERVICE]",
+ blockType: Scratch.BlockType.COMMAND,
+ arguments: {
+ SERVICE: { type: Scratch.ArgumentType.STRING, menu: "SERVICE" },
+ },
+ },
+ {
+ opcode: "isLoggedIn",
+ text: "Is user logged in with [SERVICE]?",
+ blockType: Scratch.BlockType.BOOLEAN,
+ arguments: {
+ SERVICE: { type: Scratch.ArgumentType.STRING, menu: "SERVICE" },
+ },
+ },
+ {
+ opcode: "setClientId",
+ text: "Set client ID for [SERVICE] to [CLIENT_ID]",
+ blockType: Scratch.BlockType.COMMAND,
+ arguments: {
+ SERVICE: { type: Scratch.ArgumentType.STRING, menu: "SERVICE" },
+ CLIENT_ID: { type: Scratch.ArgumentType.STRING, defaultValue: "" },
+ },
+ },
+ {
+ opcode: "setClientSecret",
+ text: "Set client secret for [SERVICE] to [CLIENT_SECRET]",
+ blockType: Scratch.BlockType.COMMAND,
+ arguments: {
+ SERVICE: { type: Scratch.ArgumentType.STRING, menu: "SERVICE" },
+ CLIENT_SECRET: {
+ type: Scratch.ArgumentType.STRING,
+ defaultValue: "",
+ },
+ },
+ },
+ {
+ opcode: "setRedirectUri",
+ text: "Set redirect URI for [SERVICE] to [REDIRECT_URI]",
+ blockType: Scratch.BlockType.COMMAND,
+ arguments: {
+ SERVICE: { type: Scratch.ArgumentType.STRING, menu: "SERVICE" },
+ REDIRECT_URI: {
+ type: Scratch.ArgumentType.STRING,
+ defaultValue: "",
},
- };
- }
+ },
+ },
+ ],
+ menus: {
+ SERVICE: {
+ items: [
+ { text: "Google", value: "google" },
+ { text: "Microsoft", value: "microsoft" },
+ { text: "Discord", value: "discord" },
+ { text: "Twitter", value: "twitter" },
+ { text: "GitHub", value: "github" },
+ { text: "Facebook", value: "facebook" },
+ { text: "LinkedIn", value: "linkedin" },
+ { text: "Spotify", value: "spotify" },
+ ],
+ },
+ },
+ };
+ }
- setClientId(args) {
- const service = args.SERVICE;
- this.clients[service].clientId = args.CLIENT_ID;
- }
+ setClientId(args) {
+ const service = args.SERVICE;
+ this.clients[service].clientId = args.CLIENT_ID;
+ }
- setClientSecret(args) {
- const service = args.SERVICE;
- this.clients[service].clientSecret = args.CLIENT_SECRET;
- }
+ setClientSecret(args) {
+ const service = args.SERVICE;
+ this.clients[service].clientSecret = args.CLIENT_SECRET;
+ }
- setRedirectUri(args) {
- const service = args.SERVICE;
- this.clients[service].redirectUri = args.REDIRECT_URI;
- }
+ setRedirectUri(args) {
+ const service = args.SERVICE;
+ this.clients[service].redirectUri = args.REDIRECT_URI;
+ }
- async login(args) {
- const service = args.SERVICE;
- const client = this.clients[service];
- const authUrl = `${client.authUrl}?response_type=code&client_id=${client.clientId}&redirect_uri=${client.redirectUri}&scope=${encodeURIComponent(client.scope)}`;
+ async login(args) {
+ const service = args.SERVICE;
+ const client = this.clients[service];
+ const authUrl = `${client.authUrl}?response_type=code&client_id=${client.clientId}&redirect_uri=${client.redirectUri}&scope=${encodeURIComponent(client.scope)}`;
- // Open a new tab for the user to authorize the app
- Scratch.openWindow(authUrl, '_blank');
+ // Open a new tab for the user to authorize the app
+ Scratch.openWindow(authUrl, "_blank");
- // Listen for message with authorization code (assuming your app handles this securely)
- window.addEventListener('message', async (event) => {
- if (event.origin !== window.location.origin) return;
+ // Listen for message with authorization code (assuming your app handles this securely)
+ window.addEventListener(
+ "message",
+ async (event) => {
+ if (event.origin !== window.location.origin) return;
- const authorizationCode = event.data.code;
+ const authorizationCode = event.data.code;
- const tokenResponse = await fetch(client.tokenUrl, {
- method: 'POST',
- headers: {
- 'Content-Type': 'application/x-www-form-urlencoded',
- },
- body: `code=${authorizationCode}&client_id=${client.clientId}&client_secret=${client.clientSecret}&redirect_uri=${client.redirectUri}&grant_type=authorization_code`,
- });
+ const tokenResponse = await fetch(client.tokenUrl, {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/x-www-form-urlencoded",
+ },
+ body: `code=${authorizationCode}&client_id=${client.clientId}&client_secret=${client.clientSecret}&redirect_uri=${client.redirectUri}&grant_type=authorization_code`,
+ });
- const tokens = await tokenResponse.json();
- this.tokens[service] = tokens;
- }, { once: true });
- }
+ const tokens = await tokenResponse.json();
+ this.tokens[service] = tokens;
+ },
+ { once: true }
+ );
+ }
- isLoggedIn(args) {
- const service = args.SERVICE;
- return !!this.tokens[service];
- }
+ isLoggedIn(args) {
+ const service = args.SERVICE;
+ return !!this.tokens[service];
+ }
}
Scratch.extensions.register(new OAuthExtension());
From 4631e51e7f13bc0a4ded05fe09f12f5d4c3344a6 Mon Sep 17 00:00:00 2001
From: GoodBoi19 <181642507+Thebloxers998@users.noreply.github.com>
Date: Wed, 5 Feb 2025 17:38:44 +0000
Subject: [PATCH 09/20] Update oauth.js
---
extensions/Thebloxers998/oauth.js | 374 +++++++++++++++---------------
1 file changed, 181 insertions(+), 193 deletions(-)
diff --git a/extensions/Thebloxers998/oauth.js b/extensions/Thebloxers998/oauth.js
index 4aa9bf61d9..a5b020286f 100644
--- a/extensions/Thebloxers998/oauth.js
+++ b/extensions/Thebloxers998/oauth.js
@@ -1,210 +1,198 @@
// Name: OAuth Extension
// ID: oauthExtension
-// Description: Provides OAuth login functionality for various services (Google, Microsoft, Discord, Twitter, GitHub, Facebook, LinkedIn, Spotify).
+// Description: Provides OAuth login functionality for various services (Google, Microsoft, Discord, Twitter, GitHub, Facebook, LinkedIn, Spotify).
// By: Thebloxers998
// License: MPL-2.0
-class OAuthExtension {
- constructor() {
- this.tokens = {};
- this.clients = {
- google: {
- clientId: "",
- clientSecret: "",
- redirectUri: "",
- authUrl: "https://accounts.google.com/o/oauth2/auth",
- tokenUrl: "https://oauth2.googleapis.com/token",
- scope: "https://www.googleapis.com/auth/userinfo.profile",
- icon: "data:image/svg+xml;base64,PLACEHOLDER_FOR_GOOGLE_ICON",
- },
- microsoft: {
- clientId: "",
- clientSecret: "",
- redirectUri: "",
- authUrl:
- "https://login.microsoftonline.com/common/oauth2/v2.0/authorize",
- tokenUrl: "https://login.microsoftonline.com/common/oauth2/v2.0/token",
- scope: "https://graph.microsoft.com/User.Read",
- },
- discord: {
- clientId: "",
- clientSecret: "",
- redirectUri: "",
- authUrl: "https://discord.com/api/oauth2/authorize",
- tokenUrl: "https://discord.com/api/oauth2/token",
- scope: "identify",
- },
- twitter: {
- clientId: "",
- clientSecret: "",
- redirectUri: "",
- authUrl: "https://api.twitter.com/oauth/authorize",
- tokenUrl: "https://api.twitter.com/oauth/access_token",
- },
- github: {
- clientId: "",
- clientSecret: "",
- redirectUri: "",
- authUrl: "https://github.com/login/oauth/authorize",
- tokenUrl: "https://github.com/login/oauth/access_token",
- scope: "user",
- },
- facebook: {
- clientId: "",
- clientSecret: "",
- redirectUri: "",
- authUrl: "https://www.facebook.com/v10.0/dialog/oauth",
- tokenUrl: "https://graph.facebook.com/v10.0/oauth/access_token",
- scope: "public_profile",
- },
- linkedin: {
- clientId: "",
- clientSecret: "",
- redirectUri: "",
- authUrl: "https://www.linkedin.com/oauth/v2/authorization",
- tokenUrl: "https://www.linkedin.com/oauth/v2/accessToken",
- scope: "r_liteprofile",
- },
- spotify: {
- clientId: "",
- clientSecret: "",
- redirectUri: "",
- authUrl: "https://accounts.spotify.com/authorize",
- tokenUrl: "https://accounts.spotify.com/api/token",
- scope: "user-read-private",
- },
- };
- }
+(function (Scratch) {
+ class OAuthExtension {
+ constructor() {
+ this.tokens = {};
+ this.clients = {
+ google: {
+ clientId: '',
+ clientSecret: '',
+ redirectUri: '',
+ authUrl: 'https://accounts.google.com/o/oauth2/auth',
+ tokenUrl: 'https://oauth2.googleapis.com/token',
+ scope: 'https://www.googleapis.com/auth/userinfo.profile',
+ },
+ microsoft: {
+ clientId: '',
+ clientSecret: '',
+ redirectUri: '',
+ authUrl: 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize',
+ tokenUrl: 'https://login.microsoftonline.com/common/oauth2/v2.0/token',
+ scope: 'https://graph.microsoft.com/User.Read',
+ },
+ discord: {
+ clientId: '',
+ clientSecret: '',
+ redirectUri: '',
+ authUrl: 'https://discord.com/api/oauth2/authorize',
+ tokenUrl: 'https://discord.com/api/oauth2/token',
+ scope: 'identify',
+ },
+ twitter: {
+ clientId: '',
+ clientSecret: '',
+ redirectUri: '',
+ authUrl: 'https://api.twitter.com/oauth/authorize',
+ tokenUrl: 'https://api.twitter.com/oauth/access_token',
+ },
+ github: {
+ clientId: '',
+ clientSecret: '',
+ redirectUri: '',
+ authUrl: 'https://github.com/login/oauth/authorize',
+ tokenUrl: 'https://github.com/login/oauth/access_token',
+ scope: 'user',
+ },
+ facebook: {
+ clientId: '',
+ clientSecret: '',
+ redirectUri: '',
+ authUrl: 'https://www.facebook.com/v10.0/dialog/oauth',
+ tokenUrl: 'https://graph.facebook.com/v10.0/oauth/access_token',
+ scope: 'public_profile',
+ },
+ linkedin: {
+ clientId: '',
+ clientSecret: '',
+ redirectUri: '',
+ authUrl: 'https://www.linkedin.com/oauth/v2/authorization',
+ tokenUrl: 'https://www.linkedin.com/oauth/v2/accessToken',
+ scope: 'r_liteprofile',
+ },
+ spotify: {
+ clientId: '',
+ clientSecret: '',
+ redirectUri: '',
+ authUrl: 'https://accounts.spotify.com/authorize',
+ tokenUrl: 'https://accounts.spotify.com/api/token',
+ scope: 'user-read-private',
+ },
+ };
+ }
- getInfo() {
- return {
- id: "oauthExtension",
- name: "OAuth Extension",
- color1: "#FFAB19", // Primary color
- color2: "#FF8C00", // Secondary color
- color3: "#E76F00", // Tertiary color
- blockIconURI:
- "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI1NiIgaGVpZ2h0PSIyNTYiPgo8cGF0aCBkPSJNMCAwIEMyMi4wMzg1MjY1MiAxOC44MTE1OTg1NiAzNi40NjU3OTMzNCA0MS4wNjM3MzM3NyA0NC4zNTE1NjI1IDY4LjkxMDE1NjI1IEM0NC42OTMxNjQwNiA3MC4wODgzNTkzNyA0NS4wMzQ3NjU2MyA3MS4yNjY1NjI1IDQ1LjM4NjcxODc1IDcyLjQ4MDQ2ODc1IEM1MS41OTA5Mjc1NSA5OC43NDAxNDMyMiA0OC4xMTkzNTU5NyAxMjguNDA3NTUzODkgMzcuMzUxNTYyNSAxNTIuOTEwMTU2MjUgQzM2LjkyNjY1NTI3IDE1My44OTE0NTUwOCAzNi45MjY2NTUyNyAxNTMuODkxNDU1MDggMzYuNDkzMTY0MDYgMTU0Ljg5MjU3ODEyIEMyNi41NTAxNTk0MyAxNzcuNDE1NDA2MzEgOS4zNjgzODI4MiAxOTcuMDgzNzE0NDMgLTExLjY0ODQzNzUgMjA5LjkxMDE1NjI1IEMtMTIuNzIwOTM3NSAyMTAuNTkzMzU5MzggLTEzLjc5MzQzNzUgMjExLjI3NjU2MjUgLTE0Ljg5ODQzNzUgMjExLjk4MDQ2ODc1IEMtNDIuNzU5MjI3OTQgMjI4Ljk0MjAxNDc4IC03OC4yNTA2MTE4OSAyMzMuOTI2NDg1NDUgLTExMC4wMzAyNzM0NCAyMjYuNzQ3MDcwMzEgQy0xMTcuODE5NDE3MjkgMjI0Ljc3NzM2MzU3IC0xMjUuMjk4MDI2MiAyMjIuMTQwMzMxOTUgLTEzMi42NDg0Mzc1IDIxOC45MTAxNTYyNSBDLTEzMy4zMDI2MzY3MiAyMTguNjI2ODg0NzcgLTEzMy45NTY4MzU5NCAyMTguMzQzNjEzMjggLTEzNC42MzA4NTkzOCAyMTguMDUxNzU3ODEgQy0xNjQuNzI1OTMyMzQgMjA0Ljc2NTg4NDE0IC0xODguNDMyNjIzMzkgMTc5LjE4ODU5MzM5IC0yMDAuNTE5NTMxMjUgMTQ4LjcxMzg2NzE5IEMtMjAyLjQ3ODkwMDc3IDE0My41MTUyMTc0MiAtMjA0LjEzNTA4MjUgMTM4LjI1NDE1Mjc0IC0yMDUuNjQ4NDM3NSAxMzIuOTEwMTU2MjUgQy0yMDUuOTkwMDM5MDYgMTMxLjczMTk1MzEyIC0yMDYuMzMxNjQwNjMgMTMwLjU1Mzc1IC0yMDYuNjgzNTkzNzUgMTI5LjMzOTg0Mzc1IEMtMjE0LjIxNzQzOTk4IDk3LjQ1MjQwMTU3IC0yMDcuODM1NTc0NTYgNjEuNDM0NjUxNjEgLTE5MS4wMDc4MTI1IDMzLjYwNTQ2ODc1IEMtMTcyLjcxOTMxMzkzIDQuNTE1NjA4MTggLTE0NS40NzI3MDQ5NSAtMTQuNzk0NDA5MjYgLTExMi42NDg0Mzc1IC0yNC4wODk4NDM3NSBDLTExMS40NzAyMzQzOCAtMjQuNDMxNDQ1MzEgLTExMC4yOTIwMzEyNSAtMjQuNzczMDQ2ODcgLTEwOS4wNzgxMjUgLTI1LjEyNSBDLTcxLjkxMjE2MjA0IC0zMy45MDU5NjkyNyAtMjkuNDM4MzUxODQgLTI0LjE0NjUyMjQyIDAgMCBaIE0tMTU2LjY0ODQzNzUgMzguOTEwMTU2MjUgQy0xNzIuNjc2OTQzNTIgNTguMDg4NzczMjggLTE4MC4zOTY0OTAzOCA4NC41ODg4MzUyMyAtMTc4LjM3MTA5Mzc1IDEwOS4yOTI5Njg3NSBDLTE3NS40NzE3NjMxNSAxMzUuNzQ1OTA4ODUgLTE2Mi45NTU1MTQxMyAxNTkuNTg0NTMzMDggLTE0Mi42NDg0Mzc1IDE3Ni45MTAxNTYyNSBDLTEyNi41NDMxNjcwNSAxODkuNjk5NjM1NzIgLTEwNi4zMjExMTA2MiAxOTguMDkxNzg4ODEgLTg1LjY0ODQzNzUgMTk4LjkxMDE1NjI1IEMtODQuODg5MTc5NjkgMTk4Ljk1MDExNzE5IC04NC4xMjk5MjE4NyAxOTguOTkwMDc4MTIgLTgzLjM0NzY1NjI1IDE5OS4wMzEyNSBDLTU2LjU4MDI3NzA5IDE5OS43NzYwMDUyMyAtMzEuNDM2MTQxNzYgMTg4LjgxNjI3MjU4IC0xMi4wNTQ0NDMzNiAxNzAuNzY1NjI1IEM1LjI3MjM5MDEyIDE1NC4wMTA3MzQ1MiAxNi4zOTQyODMxMyAxMzAuMDkxODY1NjUgMTcuMzUxNTYyNSAxMDUuOTEwMTU2MjUgQzE3LjM5MTUyMzQ0IDEwNS4xNTA4OTg0NCAxNy40MzE0ODQzNyAxMDQuMzkxNjQwNjIgMTcuNDcyNjU2MjUgMTAzLjYwOTM3NSBDMTguMjE3NDExNDggNzYuODQxOTk1ODQgNy4yNTc2Nzg4MyA1MS42OTc4NjA1MSAtMTAuNzkyOTY4NzUgMzIuMzE2MTYyMTEgQy0yNy41NDc4NTkyMyAxNC45ODkzMjg2MyAtNTEuNDY2NzI4MSAzLjg2NzQzNTYyIC03NS42NDg0Mzc1IDIuOTEwMTU2MjUgQy03Ni43ODczMjQyMiAyLjg1MDIxNDg0IC03Ni43ODczMjQyMiAyLjg1MDIxNDg0IC03Ny45NDkyMTg3NSAyLjc4OTA2MjUgQy0xMDguODU5OTYwMDYgMS45MjkwMjU1MSAtMTM2LjI0OTk3Njk4IDE2LjQzMzI0OTk3IC0xNTYuNjQ4NDM3NSAzOC45MTAxNTYyNSBaICIgZmlsbD0iIzlFOUU5RSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjA4LjY0ODQzNzUsMjcuMDg5ODQzNzUpIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuNzc5NDM0NjYgMC4wMDIyMjA2MSAxLjU1ODg2OTMyIDAuMDA0NDQxMjIgMi4zNjE5MjMyMiAwLjAwNjcyOTEzIEMzLjI0Mjc2MDc3IDAuMDA2ODA0NjYgNC4xMjM1OTgzMyAwLjAwNjg4MDE5IDUuMDMxMTI3OTMgMC4wMDY5NTgwMSBDNS45ODg0MTI5MyAwLjAxMjExOTI5IDYuOTQ1Njk3OTQgMC4wMTcyODA1OCA3LjkzMTk5MTU4IDAuMDIyNTk4MjcgQzkuMzk0ODA4MTIgMC4wMjQ3MjA2OSA5LjM5NDgwODEyIDAuMDI0NzIwNjkgMTAuODg3MTc2NTEgMC4wMjY4ODU5OSBDMTQuMDE1NDI2NzUgMC4wMzI1MDMxOSAxNy4xNDM2MDY1NiAwLjA0NTA1ODU5IDIwLjI3MTgzNTMzIDAuMDU3NzU0NTIgQzIyLjM4NzA2ODY3IDAuMDYyNzY3MyAyNC41MDIzMDMxMyAwLjA2NzMzMDU5IDI2LjYxNzUzODQ1IDAuMDcxNDI2MzkgQzMxLjgxNDgyODI5IDAuMDgyNDc4MiAzNy4wMTIwNzY3OCAwLjA5OTIzMzA1IDQyLjIwOTMzNTMzIDAuMTIwMjU0NTIgQzQ0Ljk5MTE0MDUxIDYuMjUxMzU5MTEgNDcuNTc5MTE3NDUgMTIuNDM1MDc1MzMgNTAuMDM3NDYwMzMgMTguNzAyMjg1NzcgQzUwLjM5MDE1OTkxIDE5LjU5NjU0NzcgNTAuNzQyODU5NSAyMC40OTA4MDk2MyA1MS4xMDYyNDY5NSAyMS40MTIxNzA0MSBDNTIuMjI1NzczMjEgMjQuMjUxNjQ4MTQgNTMuMzQyNjgwOCAyNy4wOTIxNDYzOCA1NC40NTkzMzUzMyAyOS45MzI3NTQ1MiBDNTUuNTU3NzAyMTUgMzIuNzIyNDMxMiA1Ni42NTY2Mzk1MiAzNS41MTE4ODE3NCA1Ny43NTYwODgyNiAzOC4zMDExMzIyIEM1OC40ODMyNDk1MSA0MC4xNDY2MDUxNSA1OS4yMDk1NzI4OCA0MS45OTI0MDg0OCA1OS45MzUwNDMzMyA0My44Mzg1NDY3NSBDNjEuNzc4MzM5NjQgNDguNTIyNzUzMjQgNjMuNjQxMjU5NzcgNTMuMTk3NzI3NjUgNjUuNTM5NDEzNDUgNTcuODYwMDAwNjEgQzY1LjkxMTc3MTI0IDU4Ljc3Nzg2ODUgNjYuMjg0MTI5MDMgNTkuNjk1NzM2MzkgNjYuNjY3NzcwMzkgNjAuNjQxNDE4NDYgQzY3LjM3NzQxMTc2IDYyLjM4NzQ1NzM3IDY4LjA5MTI4MzIxIDY0LjEzMTc4NDgzIDY4LjgwOTk4MjMgNjUuODc0MTE0OTkgQzY5LjEyNTc4MjQ3IDY2LjY1MjMyMTAxIDY5LjQ0MTU4MjY0IDY3LjQzMDUyNzA0IDY5Ljc2Njk1MjUxIDY4LjIzMjMxNTA2IEM3MC4wNDY0MTcyNCA2OC45MTMyNzc0NCA3MC4zMjU4ODE5NiA2OS41OTQyMzk4MSA3MC42MTM4MTUzMSA3MC4yOTU4Mzc0IEM3MS4yMDkzMzUzMyA3Mi4xMjAyNTQ1MiA3MS4yMDkzMzUzMyA3Mi4xMjAyNTQ1MiA3MS4yMDkzMzUzMyA3NS4xMjAyNTQ1MiBDNzkuNDU5MzM1MzMgNzUuMTIwMjU0NTIgODcuNzA5MzM1MzMgNzUuMTIwMjU0NTIgOTYuMjA5MzM1MzMgNzUuMTIwMjU0NTIgQzk2LjIwOTMzNTMzIDgwLjA3MDI1NDUyIDk2LjIwOTMzNTMzIDg1LjAyMDI1NDUyIDk2LjIwOTMzNTMzIDkwLjEyMDI1NDUyIEM5MC4yNjkzMzUzMyA5MC4xMjAyNTQ1MiA4NC4zMjkzMzUzMyA5MC4xMjAyNTQ1MiA3OC4yMDkzMzUzMyA5MC4xMjAyNTQ1MiBDNzkuMTk5MzM1MzMgOTMuNTg1MjU0NTIgNzkuMTk5MzM1MzMgOTMuNTg1MjU0NTIgODAuMjA5MzM1MzMgOTcuMTIwMjU0NTIgQzg1LjQ4OTMzNTMzIDk3LjEyMDI1NDUyIDkwLjc2OTMzNTMzIDk3LjEyMDI1NDUyIDk2LjIwOTMzNTMzIDk3LjEyMDI1NDUyIEM5Ni4yMDkzMzUzMyAxMDIuMDcwMjU0NTIgOTYuMjA5MzM1MzMgMTA3LjAyMDI1NDUyIDk2LjIwOTMzNTMzIDExMi4xMjAyNTQ1MiBDOTEuNzU0MzM1MzMgMTEyLjYxNTI1NDUyIDkxLjc1NDMzNTMzIDExMi42MTUyNTQ1MiA4Ny4yMDkzMzUzMyAxMTMuMTIwMjU0NTIgQzg3LjcxNDY0NzgzIDExNC4zODQ4MjQ4MyA4OC4yMTk5NjAzMyAxMTUuNjQ5Mzk1MTQgODguNzQwNTg1MzMgMTE2Ljk1MjI4NTc3IEM4OS4zOTcxMDI1MiAxMTguNjEyMzM2MzcgOTAuMDUzMzM3ODkgMTIwLjI3MjQ5ODQ1IDkwLjcwOTMzNTMzIDEyMS45MzI3NTQ1MiBDOTEuMjEwMTM2MTEgMTIzLjE4MjgyMjg4IDkxLjIxMDEzNjExIDEyMy4xODI4MjI4OCA5MS43MjEwNTQwOCAxMjQuNDU4MTQ1MTQgQzkyLjE5NDc4NDU1IDEyNS42NjE4MDcyNSA5Mi4xOTQ3ODQ1NSAxMjUuNjYxODA3MjUgOTIuNjc4MDg1MzMgMTI2Ljg4OTc4NTc3IEM5Mi45NzEzNDcwNSAxMjcuNjI4MTc2ODggOTMuMjY0NjA4NzYgMTI4LjM2NjU2Nzk5IDkzLjU2Njc1NzIgMTI5LjEyNzMzNDU5IEM5NC4yMDkzMzUzMyAxMzEuMTIwMjU0NTIgOTQuMjA5MzM1MzMgMTMxLjEyMDI1NDUyIDk0LjIwOTMzNTMzIDEzNC4xMjAyNTQ1MiBDODEuOTk5MzM1MzMgMTM0LjEyMDI1NDUyIDY5Ljc4OTMzNTMzIDEzNC4xMjAyNTQ1MiA1Ny4yMDkzMzUzMyAxMzQuMTIwMjU0NTIgQzUyLjIwOTMzNTMzIDEyMi4xMjAyNTQ1MiA1Mi4yMDkzMzUzMyAxMjIuMTIwMjU0NTIgNDkuMjA5MzM1MzMgMTEyLjEyMDI1NDUyIEMzMC4wNjkzMzUzMyAxMTIuMTIwMjU0NTIgMTAuOTI5MzM1MzMgMTEyLjEyMDI1NDUyIC04Ljc5MDY2NDY3IDExMi4xMjAyNTQ1MiBDLTkuNzgwNjY0NjcgMTE1LjQyMDI1NDUyIC0xMC43NzA2NjQ2NyAxMTguNzIwMjU0NTIgLTExLjc5MDY2NDY3IDEyMi4xMjAyNTQ1MiBDLTEzLjQ0MDY2NDY3IDEyNi4wODAyNTQ1MiAtMTUuMDkwNjY0NjcgMTMwLjA0MDI1NDUyIC0xNi43OTA2NjQ2NyAxMzQuMTIwMjU0NTIgQy0yOS4wMDA2NjQ2NyAxMzQuMTIwMjU0NTIgLTQxLjIxMDY2NDY3IDEzNC4xMjAyNTQ1MiAtNTMuNzkwNjY0NjcgMTM0LjEyMDI1NDUyIEMtNTMuMTI2NDQxNjkgMTMwLjc5OTEzOTYgLTUyLjU1MzU4NjExIDEyOC4yMDE5NDI1MyAtNTEuMzgwNTA4NDIgMTI1LjEzMTk3MzI3IEMtNTAuOTc5Mjg3NzIgMTI0LjA3MzMzMDY5IC01MC45NzkyODc3MiAxMjQuMDczMzMwNjkgLTUwLjU2OTk2MTU1IDEyMi45OTMzMDEzOSBDLTUwLjI5MjE2ODU4IDEyMi4yNzIwNzA5MiAtNTAuMDE0Mzc1NjEgMTIxLjU1MDg0MDQ1IC00OS43MjgxNjQ2NyAxMjAuODA3NzU0NTIgQy00OS4zMDU2NzQ0NCAxMTkuNjk2OTA0OTEgLTQ5LjMwNTY3NDQ0IDExOS42OTY5MDQ5MSAtNDguODc0NjQ5MDUgMTE4LjU2MzYxMzg5IEMtNDguMTgzNDc4OTIgMTE2Ljc0NzgyNzk2IC00Ny40ODc1NDc3OSAxMTQuOTMzODU1NTIgLTQ2Ljc5MDY2NDY3IDExMy4xMjAyNTQ1MiBDLTQ5Ljc2MDY2NDY3IDExMi43OTAyNTQ1MiAtNTIuNzMwNjY0NjcgMTEyLjQ2MDI1NDUyIC01NS43OTA2NjQ2NyAxMTIuMTIwMjU0NTIgQy01NS43OTA2NjQ2NyAxMDcuMTcwMjU0NTIgLTU1Ljc5MDY2NDY3IDEwMi4yMjAyNTQ1MiAtNTUuNzkwNjY0NjcgOTcuMTIwMjU0NTIgQy01MC41MTA2NjQ2NyA5Ny4xMjAyNTQ1MiAtNDUuMjMwNjY0NjcgOTcuMTIwMjU0NTIgLTM5Ljc5MDY2NDY3IDk3LjEyMDI1NDUyIEMtMzkuMTMwNjY0NjcgOTQuODEwMjU0NTIgLTM4LjQ3MDY2NDY3IDkyLjUwMDI1NDUyIC0zNy43OTA2NjQ2NyA5MC4xMjAyNTQ1MiBDLTQzLjczMDY2NDY3IDkwLjEyMDI1NDUyIC00OS42NzA2NjQ2NyA5MC4xMjAyNTQ1MiAtNTUuNzkwNjY0NjcgOTAuMTIwMjU0NTIgQy01NS43OTA2NjQ2NyA4NS4xNzAyNTQ1MiAtNTUuNzkwNjY0NjcgODAuMjIwMjU0NTIgLTU1Ljc5MDY2NDY3IDc1LjEyMDI1NDUyIEMtNDcuNTQwNjY0NjcgNzUuMTIwMjU0NTIgLTM5LjI5MDY2NDY3IDc1LjEyMDI1NDUyIC0zMC43OTA2NjQ2NyA3NS4xMjAyNTQ1MiBDLTMwLjQ2MDY2NDY3IDczLjQ3MDI1NDUyIC0zMC4xMzA2NjQ2NyA3MS44MjAyNTQ1MiAtMjkuNzkwNjY0NjcgNzAuMTIwMjU0NTIgQy0yOS4zNTY1NzU4MyA2OC44MTI0MDQ1NiAtMjguODg3MjM5MjEgNjcuNTE1NzA5OTggLTI4LjM4Mjk0OTgzIDY2LjIzMzI5MTYzIEMtMjcuOTU1MjcwNjEgNjUuMTM2NzU1MTQgLTI3Ljk1NTI3MDYxIDY1LjEzNjc1NTE0IC0yNy41MTg5NTE0MiA2NC4wMTgwNjY0MSBDLTI3LjIwOTAwNzQyIDYzLjIzNTgxMTkyIC0yNi44OTkwNjM0MiA2Mi40NTM1NTc0MyAtMjYuNTc5NzI3MTcgNjEuNjQ3NTk4MjcgQy0yNi4wOTMyMzk1MiA2MC40MDUyNzE4NCAtMjYuMDkzMjM5NTIgNjAuNDA1MjcxODQgLTI1LjU5NjkyMzgzIDU5LjEzNzg0NzkgQy0yNC41NDA0OTM5NyA1Ni40NDI4OTc0OSAtMjMuNDc4MjE0MDQgNTMuNzUwMjk3MzYgLTIyLjQxNTY2NDY3IDUxLjA1Nzc1NDUyIEMtMjEuNjg4NjgwNTUgNDkuMjA3NjI3NzYgLTIwLjk2MjAzODM5IDQ3LjM1NzM2NjU5IC0yMC4yMzU3MzMwMyA0NS41MDY5NzMyNyBDLTE4Ljc3OTY4MzY3IDQxLjc5ODk3MzEgLTE3LjMyMTM4MjQ0IDM4LjA5MTg3MDIyIC0xNS44NjE0NjU0NSAzNC4zODUzOTEyNCBDLTE0LjAwMzg3MjU1IDI5LjY2NjY4MzE1IC0xMi4xNTg0NzMxNyAyNC45NDMzMjA2NSAtMTAuMzE4MDA4NDIgMjAuMjE3OTEwNzcgQy05LjgwNjIzMTMyIDE4LjkwNjEwMjQ1IC05LjI5NDM1Mzc3IDE3LjU5NDMzMzMyIC04Ljc4MjM2Mzg5IDE2LjI4MjYwODAzIEMtNy44NDYzMDQ5OSAxMy44ODM5MzcxMSAtNi45MTE2ODAwOCAxMS40ODQ3MDU5NyAtNS45Nzg2NTI5NSA5LjA4NDg1NDEzIEMtNS41NjcyODA4OCA4LjAzNDM0ODc1IC01LjE1NTkwODgxIDYuOTgzODQzMzggLTQuNzMyMDcwOTIgNS45MDE1MDQ1MiBDLTQuMzc4MzAzODMgNC45OTQ2NDkwNSAtNC4wMjQ1MzY3NCA0LjA4Nzc5MzU4IC0zLjY2MDA0OTQ0IDMuMTUzNDU3NjQgQy0yLjM3OTk5Mzk4IDAuMTU5ODMxNzMgLTIuMzc5OTkzOTggMC4xNTk4MzE3MyAwIDAgWiBNMjAuMjA5MzM1MzMgMzQuMTIwMjU0NTIgQzE2LjgxMTU1MDQyIDQxLjQ0MTY3MiAxMy45NzAzMDk5MyA0OC45Mjk2MjIxMiAxMS4yMDc4NzA0OCA1Ni41MDY3MjkxMyBDMTAuNDUxMzgyMzUgNTguNTc5NTQ2MDkgOS42ODgwNjYyNSA2MC42NDk3NjM3OSA4LjkyNDE3OTA4IDYyLjcxOTg2Mzg5IEM4LjQ0MDY5OTkyIDY0LjAzOTM3NjU3IDcuOTU3NjEyMjcgNjUuMzU5MDMyNzggNy40NzQ5NjAzMyA2Ni42Nzg4NDgyNyBDNy4wMzk1Nzk0NyA2Ny44Njc5Mjc4NiA2LjYwNDE5ODYxIDY5LjA1NzAwNzQ1IDYuMTU1NjI0MzkgNzAuMjgyMTE5NzUgQzUuMTAzOTAxNTkgNzIuOTM3ODUxOCA1LjEwMzkwMTU5IDcyLjkzNzg1MTggNS4yMDkzMzUzMyA3NS4xMjAyNTQ1MiBDMTUuMTA5MzM1MzMgNzUuMTIwMjU0NTIgMjUuMDA5MzM1MzMgNzUuMTIwMjU0NTIgMzUuMjA5MzM1MzMgNzUuMTIwMjU0NTIgQzMzLjQxMTgzNzk3IDY5LjEyODU5NjY3IDMxLjYyMDI3MzkyIDYzLjIzNDQ4Mzc4IDI5LjUxMDExNjU4IDU3LjM2MjQ0MjAyIEMyOS4yNzAyMDQ5MyA1Ni42ODg1MTQxIDI5LjAzMDI5MzI3IDU2LjAxNDU4NjE4IDI4Ljc4MzExMTU3IDU1LjMyMDIzNjIxIEMyOC4wMzE2Nzg1NiA1My4yMTEwNzA1NyAyNy4yNzY4MzI1IDUxLjEwMzE0NjU4IDI2LjUyMTgzNTMzIDQ4Ljk5NTI1NDUyIEMyNi4wMDUzMzA1NCA0Ny41NDc0MTk0MyAyNS40ODkwNTI4MSA0Ni4wOTk1MDMzMyAyNC45NzMwMDcyIDQ0LjY1MTUwNDUyIEMyMy43MjEwNjM0NyA0MS4xNDAxNTA4OCAyMi40NjYwNjAxOSAzNy42Mjk5MDAyNSAyMS4yMDkzMzUzMyAzNC4xMjAyNTQ1MiBDMjAuODc5MzM1MzMgMzQuMTIwMjU0NTIgMjAuNTQ5MzM1MzMgMzQuMTIwMjU0NTIgMjAuMjA5MzM1MzMgMzQuMTIwMjU0NTIgWiBNLTAuNzkwNjY0NjcgOTAuMTIwMjU0NTIgQy0xLjQ1MDY2NDY3IDkyLjQzMDI1NDUyIC0yLjExMDY2NDY3IDk0Ljc0MDI1NDUyIC0yLjc5MDY2NDY3IDk3LjEyMDI1NDUyIEMxMi4zODkzMzUzMyA5Ny4xMjAyNTQ1MiAyNy41NjkzMzUzMyA5Ny4xMjAyNTQ1MiA0My4yMDkzMzUzMyA5Ny4xMjAyNTQ1MiBDNDIuNTQ5MzM1MzMgOTQuODEwMjU0NTIgNDEuODg5MzM1MzMgOTIuNTAwMjU0NTIgNDEuMjA5MzM1MzMgOTAuMTIwMjU0NTIgQzI3LjM0OTMzNTMzIDkwLjEyMDI1NDUyIDEzLjQ4OTMzNTMzIDkwLjEyMDI1NDUyIC0wLjc5MDY2NDY3IDkwLjEyMDI1NDUyIFogIiBmaWxsPSIjOUU5RTlFIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMDcuNzkwNjY0NjcyODUxNTYsNDUuODc5NzQ1NDgzMzk4NDQpIi8+Cjwvc3ZnPgo=",
- menuIconURI:
- "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI1NiIgaGVpZ2h0PSIyNTYiPgo8cGF0aCBkPSJNMCAwIEMyMi4wMzg1MjY1MiAxOC44MTE1OTg1NiAzNi40NjU3OTMzNCA0MS4wNjM3MzM3NyA0NC4zNTE1NjI1IDY4LjkxMDE1NjI1IEM0NC42OTMxNjQwNiA3MC4wODgzNTkzNyA0NS4wMzQ3NjU2MyA3MS4yNjY1NjI1IDQ1LjM4NjcxODc1IDcyLjQ4MDQ2ODc1IEM1MS41OTA5Mjc1NSA5OC43NDAxNDMyMiA0OC4xMTkzNTU5NyAxMjguNDA3NTUzODkgMzcuMzUxNTYyNSAxNTIuOTEwMTU2MjUgQzM2LjkyNjY1NTI3IDE1My44OTE0NTUwOCAzNi45MjY2NTUyNyAxNTMuODkxNDU1MDggMzYuNDkzMTY0MDYgMTU0Ljg5MjU3ODEyIEMyNi41NTAxNTk0MyAxNzcuNDE1NDA2MzEgOS4zNjgzODI4MiAxOTcuMDgzNzE0NDMgLTExLjY0ODQzNzUgMjA5LjkxMDE1NjI1IEMtMTIuNzIwOTM3NSAyMTAuNTkzMzU5MzggLTEzLjc5MzQzNzUgMjExLjI3NjU2MjUgLTE0Ljg5ODQzNzUgMjExLjk4MDQ2ODc1IEMtNDIuNzU5MjI3OTQgMjI4Ljk0MjAxNDc4IC03OC4yNTA2MTE4OSAyMzMuOTI2NDg1NDUgLTExMC4wMzAyNzM0NCAyMjYuNzQ3MDcwMzEgQy0xMTcuODE5NDE3MjkgMjI0Ljc3NzM2MzU3IC0xMjUuMjk4MDI2MiAyMjIuMTQwMzMxOTUgLTEzMi42NDg0Mzc1IDIxOC45MTAxNTYyNSBDLTEzMy4zMDI2MzY3MiAyMTguNjI2ODg0NzcgLTEzMy45NTY4MzU5NCAyMTguMzQzNjEzMjggLTEzNC42MzA4NTkzOCAyMTguMDUxNzU3ODEgQy0xNjQuNzI1OTMyMzQgMjA0Ljc2NTg4NDE0IC0xODguNDMyNjIzMzkgMTc5LjE4ODU5MzM5IC0yMDAuNTE5NTMxMjUgMTQ4LjcxMzg2NzE5IEMtMjAyLjQ3ODkwMDc3IDE0My41MTUyMTc0MiAtMjA0LjEzNTA4MjUgMTM4LjI1NDE1Mjc0IC0yMDUuNjQ4NDM3NSAxMzIuOTEwMTU2MjUgQy0yMDUuOTkwMDM5MDYgMTMxLjczMTk1MzEyIC0yMDYuMzMxNjQwNjMgMTMwLjU1Mzc1IC0yMDYuNjgzNTkzNzUgMTI5LjMzOTg0Mzc1IEMtMjE0LjIxNzQzOTk4IDk3LjQ1MjQwMTU3IC0yMDcuODM1NTc0NTYgNjEuNDM0NjUxNjEgLTE5MS4wMDc4MTI1IDMzLjYwNTQ2ODc1IEMtMTcyLjcxOTMxMzkzIDQuNTE1NjA4MTggLTE0NS40NzI3MDQ5NSAtMTQuNzk0NDA5MjYgLTExMi42NDg0Mzc1IC0yNC4wODk4NDM3NSBDLTExMS40NzAyMzQzOCAtMjQuNDMxNDQ1MzEgLTExMC4yOTIwMzEyNSAtMjQuNzczMDQ2ODcgLTEwOS4wNzgxMjUgLTI1LjEyNSBDLTcxLjkxMjE2MjA0IC0zMy45MDU5NjkyNyAtMjkuNDM4MzUxODQgLTI0LjE0NjUyMjQyIDAgMCBaIE0tMTU2LjY0ODQzNzUgMzguOTEwMTU2MjUgQy0xNzIuNjc2OTQzNTIgNTguMDg4NzczMjggLTE4MC4zOTY0OTAzOCA4NC41ODg4MzUyMyAtMTc4LjM3MTA5Mzc1IDEwOS4yOTI5Njg3NSBDLTE3NS40NzE3NjMxNSAxMzUuNzQ1OTA4ODUgLTE2Mi45NTU1MTQxMyAxNTkuNTg0NTMzMDggLTE0Mi42NDg0Mzc1IDE3Ni45MTAxNTYyNSBDLTEyNi41NDMxNjcwNSAxODkuNjk5NjM1NzIgLTEwNi4zMjExMTA2MiAxOTguMDkxNzg4ODEgLTg1LjY0ODQzNzUgMTk4LjkxMDE1NjI1IEMtODQuODg5MTc5NjkgMTk4Ljk1MDExNzE5IC04NC4xMjk5MjE4NyAxOTguOTkwMDc4MTIgLTgzLjM0NzY1NjI1IDE5OS4wMzEyNSBDLTU2LjU4MDI3NzA5IDE5OS43NzYwMDUyMyAtMzEuNDM2MTQxNzYgMTg4LjgxNjI3MjU4IC0xMi4wNTQ0NDMzNiAxNzAuNzY1NjI1IEM1LjI3MjM5MDEyIDE1NC4wMTA3MzQ1MiAxNi4zOTQyODMxMyAxMzAuMDkxODY1NjUgMTcuMzUxNTYyNSAxMDUuOTEwMTU2MjUgQzE3LjM5MTUyMzQ0IDEwNS4xNTA4OTg0NCAxNy40MzE0ODQzNyAxMDQuMzkxNjQwNjIgMTcuNDcyNjU2MjUgMTAzLjYwOTM3NSBDMTguMjE3NDExNDggNzYuODQxOTk1ODQgNy4yNTc2Nzg4MyA1MS42OTc4NjA1MSAtMTAuNzkyOTY4NzUgMzIuMzE2MTYyMTEgQy0yNy41NDc4NTkyMyAxNC45ODkzMjg2MyAtNTEuNDY2NzI4MSAzLjg2NzQzNTYyIC03NS42NDg0Mzc1IDIuOTEwMTU2MjUgQy03Ni43ODczMjQyMiAyLjg1MDIxNDg0IC03Ni43ODczMjQyMiAyLjg1MDIxNDg0IC03Ny45NDkyMTg3NSAyLjc4OTA2MjUgQy0xMDguODU5OTYwMDYgMS45MjkwMjU1MSAtMTM2LjI0OTk3Njk4IDE2LjQzMzI0OTk3IC0xNTYuNjQ4NDM3NSAzOC45MTAxNTYyNSBaICIgZmlsbD0iIzlFOUU5RSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjA4LjY0ODQzNzUsMjcuMDg5ODQzNzUpIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuNzc5NDM0NjYgMC4wMDIyMjA2MSAxLjU1ODg2OTMyIDAuMDA0NDQxMjIgMi4zNjE5MjMyMiAwLjAwNjcyOTEzIEMzLjI0Mjc2MDc3IDAuMDA2ODA0NjYgNC4xMjM1OTgzMyAwLjAwNjg4MDE5IDUuMDMxMTI3OTMgMC4wMDY5NTgwMSBDNS45ODg0MTI5MyAwLjAxMjExOTI5IDYuOTQ1Njk3OTQgMC4wMTcyODA1OCA3LjkzMTk5MTU4IDAuMDIyNTk4MjcgQzkuMzk0ODA4MTIgMC4wMjQ3MjA2OSA5LjM5NDgwODEyIDAuMDI0NzIwNjkgMTAuODg3MTc2NTEgMC4wMjY4ODU5OSBDMTQuMDE1NDI2NzUgMC4wMzI1MDMxOSAxNy4xNDM2MDY1NiAwLjA0NTA1ODU5IDIwLjI3MTgzNTMzIDAuMDU3NzU0NTIgQzIyLjM4NzA2ODY3IDAuMDYyNzY3MyAyNC41MDIzMDMxMyAwLjA2NzMzMDU5IDI2LjYxNzUzODQ1IDAuMDcxNDI2MzkgQzMxLjgxNDgyODI5IDAuMDgyNDc4MiAzNy4wMTIwNzY3OCAwLjA5OTIzMzA1IDQyLjIwOTMzNTMzIDAuMTIwMjU0NTIgQzQ0Ljk5MTE0MDUxIDYuMjUxMzU5MTEgNDcuNTc5MTE3NDUgMTIuNDM1MDc1MzMgNTAuMDM3NDYwMzMgMTguNzAyMjg1NzcgQzUwLjM5MDE1OTkxIDE5LjU5NjU0NzcgNTAuNzQyODU5NSAyMC40OTA4MDk2MyA1MS4xMDYyNDY5NSAyMS40MTIxNzA0MSBDNTIuMjI1NzczMjEgMjQuMjUxNjQ4MTQgNTMuMzQyNjgwOCAyNy4wOTIxNDYzOCA1NC40NTkzMzUzMyAyOS45MzI3NTQ1MiBDNTUuNTU3NzAyMTUgMzIuNzIyNDMxMiA1Ni42NTY2Mzk1MiAzNS41MTE4ODE3NCA1Ny43NTYwODgyNiAzOC4zMDExMzIyIEM1OC40ODMyNDk1MSA0MC4xNDY2MDUxNSA1OS4yMDk1NzI4OCA0MS45OTI0MDg0OCA1OS45MzUwNDMzMyA0My44Mzg1NDY3NSBDNjEuNzc4MzM5NjQgNDguNTIyNzUzMjQgNjMuNjQxMjU5NzcgNTMuMTk3NzI3NjUgNjUuNTM5NDEzNDUgNTcuODYwMDAwNjEgQzY1LjkxMTc3MTI0IDU4Ljc3Nzg2ODUgNjYuMjg0MTI5MDMgNTkuNjk1NzM2MzkgNjYuNjY3NzcwMzkgNjAuNjQxNDE4NDYgQzY3LjM3NzQxMTc2IDYyLjM4NzQ1NzM3IDY4LjA5MTI4MzIxIDY0LjEzMTc4NDgzIDY4LjgwOTk4MjMgNjUuODc0MTE0OTkgQzY5LjEyNTc4MjQ3IDY2LjY1MjMyMTAxIDY5LjQ0MTU4MjY0IDY3LjQzMDUyNzA0IDY5Ljc2Njk1MjUxIDY4LjIzMjMxNTA2IEM3MC4wNDY0MTcyNCA2OC45MTMyNzc0NCA3MC4zMjU4ODE5NiA2OS41OTQyMzk4MSA3MC42MTM4MTUzMSA3MC4yOTU4Mzc0IEM3MS4yMDkzMzUzMyA3Mi4xMjAyNTQ1MiA3MS4yMDkzMzUzMyA3Mi4xMjAyNTQ1MiA3MS4yMDkzMzUzMyA3NS4xMjAyNTQ1MiBDNzkuNDU5MzM1MzMgNzUuMTIwMjU0NTIgODcuNzA5MzM1MzMgNzUuMTIwMjU0NTIgOTYuMjA5MzM1MzMgNzUuMTIwMjU0NTIgQzk2LjIwOTMzNTMzIDgwLjA3MDI1NDUyIDk2LjIwOTMzNTMzIDg1LjAyMDI1NDUyIDk2LjIwOTMzNTMzIDkwLjEyMDI1NDUyIEM5MC4yNjkzMzUzMyA5MC4xMjAyNTQ1MiA4NC4zMjkzMzUzMyA5MC4xMjAyNTQ1MiA3OC4yMDkzMzUzMyA5MC4xMjAyNTQ1MiBDNzkuMTk5MzM1MzMgOTMuNTg1MjU0NTIgNzkuMTk5MzM1MzMgOTMuNTg1MjU0NTIgODAuMjA5MzM1MzMgOTcuMTIwMjU0NTIgQzg1LjQ4OTMzNTMzIDk3LjEyMDI1NDUyIDkwLjc2OTMzNTMzIDk3LjEyMDI1NDUyIDk2LjIwOTMzNTMzIDk3LjEyMDI1NDUyIEM5Ni4yMDkzMzUzMyAxMDIuMDcwMjU0NTIgOTYuMjA5MzM1MzMgMTA3LjAyMDI1NDUyIDk2LjIwOTMzNTMzIDExMi4xMjAyNTQ1MiBDOTEuNzU0MzM1MzMgMTEyLjYxNTI1NDUyIDkxLjc1NDMzNTMzIDExMi42MTUyNTQ1MiA4Ny4yMDkzMzUzMyAxMTMuMTIwMjU0NTIgQzg3LjcxNDY0NzgzIDExNC4zODQ4MjQ4MyA4OC4yMTk5NjAzMyAxMTUuNjQ5Mzk1MTQgODguNzQwNTg1MzMgMTE2Ljk1MjI4NTc3IEM4OS4zOTcxMDI1MiAxMTguNjEyMzM2MzcgOTAuMDUzMzM3ODkgMTIwLjI3MjQ5ODQ1IDkwLjcwOTMzNTMzIDEyMS45MzI3NTQ1MiBDOTEuMjEwMTM2MTEgMTIzLjE4MjgyMjg4IDkxLjIxMDEzNjExIDEyMy4xODI4MjI4OCA5MS43MjEwNTQwOCAxMjQuNDU4MTQ1MTQgQzkyLjE5NDc4NDU1IDEyNS42NjE4MDcyNSA5Mi4xOTQ3ODQ1NSAxMjUuNjYxODA3MjUgOTIuNjc4MDg1MzMgMTI2Ljg4OTc4NTc3IEM5Mi45NzEzNDcwNSAxMjcuNjI4MTc2ODggOTMuMjY0NjA4NzYgMTI4LjM2NjU2Nzk5IDkzLjU2Njc1NzIgMTI5LjEyNzMzNDU5IEM5NC4yMDkzMzUzMyAxMzEuMTIwMjU0NTIgOTQuMjA5MzM1MzMgMTMxLjEyMDI1NDUyIDk0LjIwOTMzNTMzIDEzNC4xMjAyNTQ1MiBDODEuOTk5MzM1MzMgMTM0LjEyMDI1NDUyIDY5Ljc4OTMzNTMzIDEzNC4xMjAyNTQ1MiA1Ny4yMDkzMzUzMyAxMzQuMTIwMjU0NTIgQzUyLjIwOTMzNTMzIDEyMi4xMjAyNTQ1MiA1Mi4yMDkzMzUzMyAxMjIuMTIwMjU0NTIgNDkuMjA5MzM1MzMgMTEyLjEyMDI1NDUyIEMzMC4wNjkzMzUzMyAxMTIuMTIwMjU0NTIgMTAuOTI5MzM1MzMgMTEyLjEyMDI1NDUyIC04Ljc5MDY2NDY3IDExMi4xMjAyNTQ1MiBDLTkuNzgwNjY0NjcgMTE1LjQyMDI1NDUyIC0xMC43NzA2NjQ2NyAxMTguNzIwMjU0NTIgLTExLjc5MDY2NDY3IDEyMi4xMjAyNTQ1MiBDLTEzLjQ0MDY2NDY3IDEyNi4wODAyNTQ1MiAtMTUuMDkwNjY0NjcgMTMwLjA0MDI1NDUyIC0xNi43OTA2NjQ2NyAxMzQuMTIwMjU0NTIgQy0yOS4wMDA2NjQ2NyAxMzQuMTIwMjU0NTIgLTQxLjIxMDY2NDY3IDEzNC4xMjAyNTQ1MiAtNTMuNzkwNjY0NjcgMTM0LjEyMDI1NDUyIEMtNTMuMTI2NDQxNjkgMTMwLjc5OTEzOTYgLTUyLjU1MzU4NjExIDEyOC4yMDE5NDI1MyAtNTEuMzgwNTA4NDIgMTI1LjEzMTk3MzI3IEMtNTAuOTc5Mjg3NzIgMTI0LjA3MzMzMDY5IC01MC45NzkyODc3MiAxMjQuMDczMzMwNjkgLTUwLjU2OTk2MTU1IDEyMi45OTMzMDEzOSBDLTUwLjI5MjE2ODU4IDEyMi4yNzIwNzA5MiAtNTAuMDE0Mzc1NjEgMTIxLjU1MDg0MDQ1IC00OS43MjgxNjQ2NyAxMjAuODA3NzU0NTIgQy00OS4zMDU2NzQ0NCAxMTkuNjk2OTA0OTEgLTQ5LjMwNTY3NDQ0IDExOS42OTY5MDQ5MSAtNDguODc0NjQ5MDUgMTE4LjU2MzYxMzg5IEMtNDguMTgzNDc4OTIgMTE2Ljc0NzgyNzk2IC00Ny40ODc1NDc3OSAxMTQuOTMzODU1NTIgLTQ2Ljc5MDY2NDY3IDExMy4xMjAyNTQ1MiBDLTQ5Ljc2MDY2NDY3IDExMi43OTAyNTQ1MiAtNTIuNzMwNjY0NjcgMTEyLjQ2MDI1NDUyIC01NS43OTA2NjQ2NyAxMTIuMTIwMjU0NTIgQy01NS43OTA2NjQ2NyAxMDcuMTcwMjU0NTIgLTU1Ljc5MDY2NDY3IDEwMi4yMjAyNTQ1MiAtNTUuNzkwNjY0NjcgOTcuMTIwMjU0NTIgQy01MC41MTA2NjQ2NyA5Ny4xMjAyNTQ1MiAtNDUuMjMwNjY0NjcgOTcuMTIwMjU0NTIgLTM5Ljc5MDY2NDY3IDk3LjEyMDI1NDUyIEMtMzkuMTMwNjY0NjcgOTQuODEwMjU0NTIgLTM4LjQ3MDY2NDY3IDkyLjUwMDI1NDUyIC0zNy43OTA2NjQ2NyA5MC4xMjAyNTQ1MiBDLTQzLjczMDY2NDY3IDkwLjEyMDI1NDUyIC00OS42NzA2NjQ2NyA5MC4xMjAyNTQ1MiAtNTUuNzkwNjY0NjcgOTAuMTIwMjU0NTIgQy01NS43OTA2NjQ2NyA4NS4xNzAyNTQ1MiAtNTUuNzkwNjY0NjcgODAuMjIwMjU0NTIgLTU1Ljc5MDY2NDY3IDc1LjEyMDI1NDUyIEMtNDcuNTQwNjY0NjcgNzUuMTIwMjU0NTIgLTM5LjI5MDY2NDY3IDc1LjEyMDI1NDUyIC0zMC43OTA2NjQ2NyA3NS4xMjAyNTQ1MiBDLTMwLjQ2MDY2NDY3IDczLjQ3MDI1NDUyIC0zMC4xMzA2NjQ2NyA3MS44MjAyNTQ1MiAtMjkuNzkwNjY0NjcgNzAuMTIwMjU0NTIgQy0yOS4zNTY1NzU4MyA2OC44MTI0MDQ1NiAtMjguODg3MjM5MjEgNjcuNTE1NzA5OTggLTI4LjM4Mjk0OTgzIDY2LjIzMzI5MTYzIEMtMjcuOTU1MjcwNjEgNjUuMTM2NzU1MTQgLTI3Ljk1NTI3MDYxIDY1LjEzNjc1NTE0IC0yNy41MTg5NTE0MiA2NC4wMTgwNjY0MSBDLTI3LjIwOTAwNzQyIDYzLjIzNTgxMTkyIC0yNi44OTkwNjM0MiA2Mi40NTM1NTc0MyAtMjYuNTc5NzI3MTcgNjEuNjQ3NTk4MjcgQy0yNi4wOTMyMzk1MiA2MC40MDUyNzE4NCAtMjYuMDkzMjM5NTIgNjAuNDA1MjcxODQgLTI1LjU5NjkyMzgzIDU5LjEzNzg0NzkgQy0yNC41NDA0OTM5NyA1Ni40NDI4OTc0OSAtMjMuNDc4MjE0MDQgNTMuNzUwMjk3MzYgLTIyLjQxNTY2NDY3IDUxLjA1Nzc1NDUyIEMtMjEuNjg4NjgwNTUgNDkuMjA3NjI3NzYgLTIwLjk2MjAzODM5IDQ3LjM1NzM2NjU5IC0yMC4yMzU3MzMwMyA0NS41MDY5NzMyNyBDLTE4Ljc3OTY4MzY3IDQxLjc5ODk3MzEgLTE3LjMyMTM4MjQ0IDM4LjA5MTg3MDIyIC0xNS44NjE0NjU0NSAzNC4zODUzOTEyNCBDLTE0LjAwMzg3MjU1IDI5LjY2NjY4MzE1IC0xMi4xNTg0NzMxNyAyNC45NDMzMjA2NSAtMTAuMzE4MDA4NDIgMjAuMjE3OTEwNzcgQy05LjgwNjIzMTMyIDE4LjkwNjEwMjQ1IC05LjI5NDM1Mzc3IDE3LjU5NDMzMzMyIC04Ljc4MjM2Mzg5IDE2LjI4MjYwODAzIEMtNy44NDYzMDQ5OSAxMy44ODM5MzcxMSAtNi45MTE2ODAwOCAxMS40ODQ3MDU5NyAtNS45Nzg2NTI5NSA5LjA4NDg1NDEzIEMtNS41NjcyODA4OCA4LjAzNDM0ODc1IC01LjE1NTkwODgxIDYuOTgzODQzMzggLTQuNzMyMDcwOTIgNS45MDE1MDQ1MiBDLTQuMzc4MzAzODMgNC45OTQ2NDkwNSAtNC4wMjQ1MzY3NCA0LjA4Nzc5MzU4IC0zLjY2MDA0OTQ0IDMuMTUzNDU3NjQgQy0yLjM3OTk5Mzk4IDAuMTU5ODMxNzMgLTIuMzc5OTkzOTggMC4xNTk4MzE3MyAwIDAgWiBNMjAuMjA5MzM1MzMgMzQuMTIwMjU0NTIgQzE2LjgxMTU1MDQyIDQxLjQ0MTY3MiAxMy45NzAzMDk5MyA0OC45Mjk2MjIxMiAxMS4yMDc4NzA0OCA1Ni41MDY3MjkxMyBDMTAuNDUxMzgyMzUgNTguNTc5NTQ2MDkgOS42ODgwNjYyNSA2MC42NDk3NjM3OSA4LjkyNDE3OTA4IDYyLjcxOTg2Mzg5IEM4LjQ0MDY5OTkyIDY0LjAzOTM3NjU3IDcuOTU3NjEyMjcgNjUuMzU5MDMyNzggNy40NzQ5NjAzMyA2Ni42Nzg4NDgyNyBDNy4wMzk1Nzk0NyA2Ny44Njc5Mjc4NiA2LjYwNDE5ODYxIDY5LjA1NzAwNzQ1IDYuMTU1NjI0MzkgNzAuMjgyMTE5NzUgQzUuMTAzOTAxNTkgNzIuOTM3ODUxOCA1LjEwMzkwMTU5IDcyLjkzNzg1MTggNS4yMDkzMzUzMyA3NS4xMjAyNTQ1MiBDMTUuMTA5MzM1MzMgNzUuMTIwMjU0NTIgMjUuMDA5MzM1MzMgNzUuMTIwMjU0NTIgMzUuMjA5MzM1MzMgNzUuMTIwMjU0NTIgQzMzLjQxMTgzNzk3IDY5LjEyODU5NjY3IDMxLjYyMDI3MzkyIDYzLjIzNDQ4Mzc4IDI5LjUxMDExNjU4IDU3LjM2MjQ0MjAyIEMyOS4yNzAyMDQ5MyA1Ni42ODg1MTQxIDI5LjAzMDI5MzI3IDU2LjAxNDU4NjE4IDI4Ljc4MzExMTU3IDU1LjMyMDIzNjIxIEMyOC4wMzE2Nzg1NiA1My4yMTEwNzA1NyAyNy4yNzY4MzI1IDUxLjEwMzE0NjU4IDI2LjUyMTgzNTMzIDQ4Ljk5NTI1NDUyIEMyNi4wMDUzMzA1NCA0Ny41NDc0MTk0MyAyNS40ODkwNTI4MSA0Ni4wOTk1MDMzMyAyNC45NzMwMDcyIDQ0LjY1MTUwNDUyIEMyMy43MjEwNjM0NyA0MS4xNDAxNTA4OCAyMi40NjYwNjAxOSAzNy42Mjk5MDAyNSAyMS4yMDkzMzUzMyAzNC4xMjAyNTQ1MiBDMjAuODc5MzM1MzMgMzQuMTIwMjU0NTIgMjAuNTQ5MzM1MzMgMzQuMTIwMjU0NTIgMjAuMjA5MzM1MzMgMzQuMTIwMjU0NTIgWiBNLTAuNzkwNjY0NjcgOTAuMTIwMjU0NTIgQy0xLjQ1MDY2NDY3IDkyLjQzMDI1NDUyIC0yLjExMDY2NDY3IDk0Ljc0MDI1NDUyIC0yLjc5MDY2NDY3IDk3LjEyMDI1NDUyIEMxMi4zODkzMzUzMyA5Ny4xMjAyNTQ1MiAyNy41NjkzMzUzMyA5Ny4xMjAyNTQ1MiA0My4yMDkzMzUzMyA5Ny4xMjAyNTQ1MiBDNDIuNTQ5MzM1MzMgOTQuODEwMjU0NTIgNDEuODg5MzM1MzMgOTIuNTAwMjU0NTIgNDEuMjA5MzM1MzMgOTAuMTIwMjU0NTIgQzI3LjM0OTMzNTMzIDkwLjEyMDI1NDUyIDEzLjQ4OTMzNTMzIDkwLjEyMDI1NDUyIC0wLjc5MDY2NDY3IDkwLjEyMDI1NDUyIFogIiBmaWxsPSIjOUU5RTlFIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMDcuNzkwNjY0NjcyODUxNTYsNDUuODc5NzQ1NDgzMzk4NDQpIi8+Cjwvc3ZnPgo=",
- blocks: [
- {
- opcode: "login",
- text: "Log in with [SERVICE]",
- blockType: Scratch.BlockType.COMMAND,
- arguments: {
- SERVICE: { type: Scratch.ArgumentType.STRING, menu: "SERVICE" },
- },
- },
- {
- opcode: "isLoggedIn",
- text: "Is user logged in with [SERVICE]?",
- blockType: Scratch.BlockType.BOOLEAN,
- arguments: {
- SERVICE: { type: Scratch.ArgumentType.STRING, menu: "SERVICE" },
- },
- },
- {
- opcode: "setClientId",
- text: "Set client ID for [SERVICE] to [CLIENT_ID]",
- blockType: Scratch.BlockType.COMMAND,
- arguments: {
- SERVICE: { type: Scratch.ArgumentType.STRING, menu: "SERVICE" },
- CLIENT_ID: { type: Scratch.ArgumentType.STRING, defaultValue: "" },
- },
- },
- {
- opcode: "setClientSecret",
- text: "Set client secret for [SERVICE] to [CLIENT_SECRET]",
- blockType: Scratch.BlockType.COMMAND,
- arguments: {
- SERVICE: { type: Scratch.ArgumentType.STRING, menu: "SERVICE" },
- CLIENT_SECRET: {
- type: Scratch.ArgumentType.STRING,
- defaultValue: "",
- },
- },
- },
- {
- opcode: "setRedirectUri",
- text: "Set redirect URI for [SERVICE] to [REDIRECT_URI]",
- blockType: Scratch.BlockType.COMMAND,
- arguments: {
- SERVICE: { type: Scratch.ArgumentType.STRING, menu: "SERVICE" },
- REDIRECT_URI: {
- type: Scratch.ArgumentType.STRING,
- defaultValue: "",
- },
- },
- },
- ],
- menus: {
- SERVICE: {
- items: [
- { text: "Google", value: "google" },
- { text: "Microsoft", value: "microsoft" },
- { text: "Discord", value: "discord" },
- { text: "Twitter", value: "twitter" },
- { text: "GitHub", value: "github" },
- { text: "Facebook", value: "facebook" },
- { text: "LinkedIn", value: "linkedin" },
- { text: "Spotify", value: "spotify" },
- ],
- },
- },
- };
- }
+ getInfo() {
+ return {
+ id: 'oauthExtension',
+ name: Scratch.translate({ id: 'oauthExtension.name', default: 'OAuth Extension' }),
+ blockIconURI: 'data:image/svg+xml;base64,PLACEHOLDER_FOR_BLOCK_ICON',
+ menuIconURI: 'data:image/svg+xml;base64,PLACEHOLDER_FOR_MENU_ICON',
+ color1: '#FFAB19',
+ color2: '#FF8C00',
+ color3: '#E76F00',
+ blocks: [
+ {
+ opcode: 'login',
+ text: Scratch.translate({ id: 'oauthExtension.login', default: 'Log in with [SERVICE]' }),
+ blockType: Scratch.BlockType.COMMAND,
+ arguments: {
+ SERVICE: { type: Scratch.ArgumentType.STRING, menu: 'SERVICE' },
+ },
+ },
+ {
+ opcode: 'isLoggedIn',
+ text: Scratch.translate({ id: 'oauthExtension.isLoggedIn', default: 'Is user logged in with [SERVICE]?' }),
+ blockType: Scratch.BlockType.BOOLEAN,
+ arguments: {
+ SERVICE: { type: Scratch.ArgumentType.STRING, menu: 'SERVICE' },
+ },
+ },
+ {
+ opcode: 'setClientId',
+ text: Scratch.translate({ id: 'oauthExtension.setClientId', default: 'Set client ID for [SERVICE] to [CLIENT_ID]' }),
+ blockType: Scratch.BlockType.COMMAND,
+ arguments: {
+ SERVICE: { type: Scratch.ArgumentType.STRING, menu: 'SERVICE' },
+ CLIENT_ID: { type: Scratch.ArgumentType.STRING, defaultValue: '' },
+ },
+ },
+ {
+ opcode: 'setClientSecret',
+ text: Scratch.translate({ id: 'oauthExtension.setClientSecret', default: 'Set client secret for [SERVICE] to [CLIENT_SECRET]' }),
+ blockType: Scratch.BlockType.COMMAND,
+ arguments: {
+ SERVICE: { type: Scratch.ArgumentType.STRING, menu: 'SERVICE' },
+ CLIENT_SECRET: { type: Scratch.ArgumentType.STRING, defaultValue: '' },
+ },
+ },
+ {
+ opcode: 'setRedirectUri',
+ text: Scratch.translate({ id: 'oauthExtension.setRedirectUri', default: 'Set redirect URI for [SERVICE] to [REDIRECT_URI]' }),
+ blockType: Scratch.BlockType.COMMAND,
+ arguments: {
+ SERVICE: { type: Scratch.ArgumentType.STRING, menu: 'SERVICE' },
+ REDIRECT_URI: { type: Scratch.ArgumentType.STRING, defaultValue: '' },
+ },
+ },
+ ],
+ menus: {
+ SERVICE: {
+ items: [
+ { text: 'Google', value: 'google' },
+ { text: 'Microsoft', value: 'microsoft' },
+ { text: 'Discord', value: 'discord' },
+ { text: 'Twitter', value: 'twitter' },
+ { text: 'GitHub', value: 'github' },
+ { text: 'Facebook', value: 'facebook' },
+ { text: 'LinkedIn', value: 'linkedin' },
+ { text: 'Spotify', value: 'spotify' },
+ ],
+ },
+ },
+ };
+ }
- setClientId(args) {
- const service = args.SERVICE;
- this.clients[service].clientId = args.CLIENT_ID;
- }
+ setClientId(args) {
+ const service = args.SERVICE;
+ this.clients[service].clientId = args.CLIENT_ID;
+ }
- setClientSecret(args) {
- const service = args.SERVICE;
- this.clients[service].clientSecret = args.CLIENT_SECRET;
- }
+ setClientSecret(args) {
+ const service = args.SERVICE;
+ this.clients[service].clientSecret = args.CLIENT_SECRET;
+ }
- setRedirectUri(args) {
- const service = args.SERVICE;
- this.clients[service].redirectUri = args.REDIRECT_URI;
- }
+ setRedirectUri(args) {
+ const service = args.SERVICE;
+ this.clients[service].redirectUri = args.REDIRECT_URI;
+ }
- async login(args) {
- const service = args.SERVICE;
- const client = this.clients[service];
- const authUrl = `${client.authUrl}?response_type=code&client_id=${client.clientId}&redirect_uri=${client.redirectUri}&scope=${encodeURIComponent(client.scope)}`;
+ async login(args) {
+ const service = args.SERVICE;
+ const client = this.clients[service];
+ const authUrl = `${client.authUrl}?response_type=code&client_id=${client.clientId}&redirect_uri=${client.redirectUri}&scope=${encodeURIComponent(client.scope)}`;
- // Open a new tab for the user to authorize the app
- Scratch.openWindow(authUrl, "_blank");
+ // Open a new tab for the user to authorize the app
+ Scratch.openWindow(authUrl, '_blank');
- // Listen for message with authorization code (assuming your app handles this securely)
- window.addEventListener(
- "message",
- async (event) => {
- if (event.origin !== window.location.origin) return;
+ // Listen for message with authorization code (assuming your app handles this securely)
+ window.addEventListener('message', async (event) => {
+ if (event.origin !== window.location.origin) return;
- const authorizationCode = event.data.code;
+ const authorizationCode = event.data.code;
- const tokenResponse = await fetch(client.tokenUrl, {
- method: "POST",
- headers: {
- "Content-Type": "application/x-www-form-urlencoded",
- },
- body: `code=${authorizationCode}&client_id=${client.clientId}&client_secret=${client.clientSecret}&redirect_uri=${client.redirectUri}&grant_type=authorization_code`,
- });
+ const tokenResponse = await Scratch.fetch(client.tokenUrl, {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/x-www-form-urlencoded',
+ },
+ body: `code=${authorizationCode}&client_id=${client.clientId}&client_secret=${client.clientSecret}&redirect_uri=${client.redirectUri}&grant_type=authorization_code`,
+ });
- const tokens = await tokenResponse.json();
- this.tokens[service] = tokens;
- },
- { once: true }
- );
- }
+ const tokens = await tokenResponse.json();
+ this.tokens[service] = tokens;
+ }, { once: true });
+ }
- isLoggedIn(args) {
- const service = args.SERVICE;
- return !!this.tokens[service];
- }
-}
+ isLoggedIn(args) {
+ const service = args.SERVICE;
+ return !!this.tokens[service];
+ }
+ }
-Scratch.extensions.register(new OAuthExtension());
+ Scratch.extensions.register(new OAuthExtension());
+})(Scratch);
From 475c10bea784d77aa2e5186f9ea101d4173fcdbd Mon Sep 17 00:00:00 2001
From: GoodBoi19 <181642507+Thebloxers998@users.noreply.github.com>
Date: Wed, 5 Feb 2025 17:39:51 +0000
Subject: [PATCH 10/20] Update oauth.js
---
extensions/Thebloxers998/oauth.js | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/extensions/Thebloxers998/oauth.js b/extensions/Thebloxers998/oauth.js
index a5b020286f..b0a3748e9f 100644
--- a/extensions/Thebloxers998/oauth.js
+++ b/extensions/Thebloxers998/oauth.js
@@ -79,8 +79,8 @@
return {
id: 'oauthExtension',
name: Scratch.translate({ id: 'oauthExtension.name', default: 'OAuth Extension' }),
- blockIconURI: 'data:image/svg+xml;base64,PLACEHOLDER_FOR_BLOCK_ICON',
- menuIconURI: 'data:image/svg+xml;base64,PLACEHOLDER_FOR_MENU_ICON',
+ blockIconURI: 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI1NiIgaGVpZ2h0PSIyNTYiPgo8cGF0aCBkPSJNMCAwIEMyMi4wMzg1MjY1MiAxOC44MTE1OTg1NiAzNi40NjU3OTMzNCA0MS4wNjM3MzM3NyA0NC4zNTE1NjI1IDY4LjkxMDE1NjI1IEM0NC42OTMxNjQwNiA3MC4wODgzNTkzNyA0NS4wMzQ3NjU2MyA3MS4yNjY1NjI1IDQ1LjM4NjcxODc1IDcyLjQ4MDQ2ODc1IEM1MS41OTA5Mjc1NSA5OC43NDAxNDMyMiA0OC4xMTkzNTU5NyAxMjguNDA3NTUzODkgMzcuMzUxNTYyNSAxNTIuOTEwMTU2MjUgQzM2LjkyNjY1NTI3IDE1My44OTE0NTUwOCAzNi45MjY2NTUyNyAxNTMuODkxNDU1MDggMzYuNDkzMTY0MDYgMTU0Ljg5MjU3ODEyIEMyNi41NTAxNTk0MyAxNzcuNDE1NDA2MzEgOS4zNjgzODI4MiAxOTcuMDgzNzE0NDMgLTExLjY0ODQzNzUgMjA5LjkxMDE1NjI1IEMtMTIuNzIwOTM3NSAyMTAuNTkzMzU5MzggLTEzLjc5MzQzNzUgMjExLjI3NjU2MjUgLTE0Ljg5ODQzNzUgMjExLjk4MDQ2ODc1IEMtNDIuNzU5MjI3OTQgMjI4Ljk0MjAxNDc4IC03OC4yNTA2MTE4OSAyMzMuOTI2NDg1NDUgLTExMC4wMzAyNzM0NCAyMjYuNzQ3MDcwMzEgQy0xMTcuODE5NDE3MjkgMjI0Ljc3NzM2MzU3IC0xMjUuMjk4MDI2MiAyMjIuMTQwMzMxOTUgLTEzMi42NDg0Mzc1IDIxOC45MTAxNTYyNSBDLTEzMy4zMDI2MzY3MiAyMTguNjI2ODg0NzcgLTEzMy45NTY4MzU5NCAyMTguMzQzNjEzMjggLTEzNC42MzA4NTkzOCAyMTguMDUxNzU3ODEgQy0xNjQuNzI1OTMyMzQgMjA0Ljc2NTg4NDE0IC0xODguNDMyNjIzMzkgMTc5LjE4ODU5MzM5IC0yMDAuNTE5NTMxMjUgMTQ4LjcxMzg2NzE5IEMtMjAyLjQ3ODkwMDc3IDE0My41MTUyMTc0MiAtMjA0LjEzNTA4MjUgMTM4LjI1NDE1Mjc0IC0yMDUuNjQ4NDM3NSAxMzIuOTEwMTU2MjUgQy0yMDUuOTkwMDM5MDYgMTMxLjczMTk1MzEyIC0yMDYuMzMxNjQwNjMgMTMwLjU1Mzc1IC0yMDYuNjgzNTkzNzUgMTI5LjMzOTg0Mzc1IEMtMjE0LjIxNzQzOTk4IDk3LjQ1MjQwMTU3IC0yMDcuODM1NTc0NTYgNjEuNDM0NjUxNjEgLTE5MS4wMDc4MTI1IDMzLjYwNTQ2ODc1IEMtMTcyLjcxOTMxMzkzIDQuNTE1NjA4MTggLTE0NS40NzI3MDQ5NSAtMTQuNzk0NDA5MjYgLTExMi42NDg0Mzc1IC0yNC4wODk4NDM3NSBDLTExMS40NzAyMzQzOCAtMjQuNDMxNDQ1MzEgLTExMC4yOTIwMzEyNSAtMjQuNzczMDQ2ODcgLTEwOS4wNzgxMjUgLTI1LjEyNSBDLTcxLjkxMjE2MjA0IC0zMy45MDU5NjkyNyAtMjkuNDM4MzUxODQgLTI0LjE0NjUyMjQyIDAgMCBaIE0tMTU2LjY0ODQzNzUgMzguOTEwMTU2MjUgQy0xNzIuNjc2OTQzNTIgNTguMDg4NzczMjggLTE4MC4zOTY0OTAzOCA4NC41ODg4MzUyMyAtMTc4LjM3MTA5Mzc1IDEwOS4yOTI5Njg3NSBDLTE3NS40NzE3NjMxNSAxMzUuNzQ1OTA4ODUgLTE2Mi45NTU1MTQxMyAxNTkuNTg0NTMzMDggLTE0Mi42NDg0Mzc1IDE3Ni45MTAxNTYyNSBDLTEyNi41NDMxNjcwNSAxODkuNjk5NjM1NzIgLTEwNi4zMjExMTA2MiAxOTguMDkxNzg4ODEgLTg1LjY0ODQzNzUgMTk4LjkxMDE1NjI1IEMtODQuODg5MTc5NjkgMTk4Ljk1MDExNzE5IC04NC4xMjk5MjE4NyAxOTguOTkwMDc4MTIgLTgzLjM0NzY1NjI1IDE5OS4wMzEyNSBDLTU2LjU4MDI3NzA5IDE5OS43NzYwMDUyMyAtMzEuNDM2MTQxNzYgMTg4LjgxNjI3MjU4IC0xMi4wNTQ0NDMzNiAxNzAuNzY1NjI1IEM1LjI3MjM5MDEyIDE1NC4wMTA3MzQ1MiAxNi4zOTQyODMxMyAxMzAuMDkxODY1NjUgMTcuMzUxNTYyNSAxMDUuOTEwMTU2MjUgQzE3LjM5MTUyMzQ0IDEwNS4xNTA4OTg0NCAxNy40MzE0ODQzNyAxMDQuMzkxNjQwNjIgMTcuNDcyNjU2MjUgMTAzLjYwOTM3NSBDMTguMjE3NDExNDggNzYuODQxOTk1ODQgNy4yNTc2Nzg4MyA1MS42OTc4NjA1MSAtMTAuNzkyOTY4NzUgMzIuMzE2MTYyMTEgQy0yNy41NDc4NTkyMyAxNC45ODkzMjg2MyAtNTEuNDY2NzI4MSAzLjg2NzQzNTYyIC03NS42NDg0Mzc1IDIuOTEwMTU2MjUgQy03Ni43ODczMjQyMiAyLjg1MDIxNDg0IC03Ni43ODczMjQyMiAyLjg1MDIxNDg0IC03Ny45NDkyMTg3NSAyLjc4OTA2MjUgQy0xMDguODU5OTYwMDYgMS45MjkwMjU1MSAtMTM2LjI0OTk3Njk4IDE2LjQzMzI0OTk3IC0xNTYuNjQ4NDM3NSAzOC45MTAxNTYyNSBaICIgZmlsbD0iIzlFOUU5RSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjA4LjY0ODQzNzUsMjcuMDg5ODQzNzUpIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuNzc5NDM0NjYgMC4wMDIyMjA2MSAxLjU1ODg2OTMyIDAuMDA0NDQxMjIgMi4zNjE5MjMyMiAwLjAwNjcyOTEzIEMzLjI0Mjc2MDc3IDAuMDA2ODA0NjYgNC4xMjM1OTgzMyAwLjAwNjg4MDE5IDUuMDMxMTI3OTMgMC4wMDY5NTgwMSBDNS45ODg0MTI5MyAwLjAxMjExOTI5IDYuOTQ1Njk3OTQgMC4wMTcyODA1OCA3LjkzMTk5MTU4IDAuMDIyNTk4MjcgQzkuMzk0ODA4MTIgMC4wMjQ3MjA2OSA5LjM5NDgwODEyIDAuMDI0NzIwNjkgMTAuODg3MTc2NTEgMC4wMjY4ODU5OSBDMTQuMDE1NDI2NzUgMC4wMzI1MDMxOSAxNy4xNDM2MDY1NiAwLjA0NTA1ODU5IDIwLjI3MTgzNTMzIDAuMDU3NzU0NTIgQzIyLjM4NzA2ODY3IDAuMDYyNzY3MyAyNC41MDIzMDMxMyAwLjA2NzMzMDU5IDI2LjYxNzUzODQ1IDAuMDcxNDI2MzkgQzMxLjgxNDgyODI5IDAuMDgyNDc4MiAzNy4wMTIwNzY3OCAwLjA5OTIzMzA1IDQyLjIwOTMzNTMzIDAuMTIwMjU0NTIgQzQ0Ljk5MTE0MDUxIDYuMjUxMzU5MTEgNDcuNTc5MTE3NDUgMTIuNDM1MDc1MzMgNTAuMDM3NDYwMzMgMTguNzAyMjg1NzcgQzUwLjM5MDE1OTkxIDE5LjU5NjU0NzcgNTAuNzQyODU5NSAyMC40OTA4MDk2MyA1MS4xMDYyNDY5NSAyMS40MTIxNzA0MSBDNTIuMjI1NzczMjEgMjQuMjUxNjQ4MTQgNTMuMzQyNjgwOCAyNy4wOTIxNDYzOCA1NC40NTkzMzUzMyAyOS45MzI3NTQ1MiBDNTUuNTU3NzAyMTUgMzIuNzIyNDMxMiA1Ni42NTY2Mzk1MiAzNS41MTE4ODE3NCA1Ny43NTYwODgyNiAzOC4zMDExMzIyIEM1OC40ODMyNDk1MSA0MC4xNDY2MDUxNSA1OS4yMDk1NzI4OCA0MS45OTI0MDg0OCA1OS45MzUwNDMzMyA0My44Mzg1NDY3NSBDNjEuNzc4MzM5NjQgNDguNTIyNzUzMjQgNjMuNjQxMjU5NzcgNTMuMTk3NzI3NjUgNjUuNTM5NDEzNDUgNTcuODYwMDAwNjEgQzY1LjkxMTc3MTI0IDU4Ljc3Nzg2ODUgNjYuMjg0MTI5MDMgNTkuNjk1NzM2MzkgNjYuNjY3NzcwMzkgNjAuNjQxNDE4NDYgQzY3LjM3NzQxMTc2IDYyLjM4NzQ1NzM3IDY4LjA5MTI4MzIxIDY0LjEzMTc4NDgzIDY4LjgwOTk4MjMgNjUuODc0MTE0OTkgQzY5LjEyNTc4MjQ3IDY2LjY1MjMyMTAxIDY5LjQ0MTU4MjY0IDY3LjQzMDUyNzA0IDY5Ljc2Njk1MjUxIDY4LjIzMjMxNTA2IEM3MC4wNDY0MTcyNCA2OC45MTMyNzc0NCA3MC4zMjU4ODE5NiA2OS41OTQyMzk4MSA3MC42MTM4MTUzMSA3MC4yOTU4Mzc0IEM3MS4yMDkzMzUzMyA3Mi4xMjAyNTQ1MiA3MS4yMDkzMzUzMyA3Mi4xMjAyNTQ1MiA3MS4yMDkzMzUzMyA3NS4xMjAyNTQ1MiBDNzkuNDU5MzM1MzMgNzUuMTIwMjU0NTIgODcuNzA5MzM1MzMgNzUuMTIwMjU0NTIgOTYuMjA5MzM1MzMgNzUuMTIwMjU0NTIgQzk2LjIwOTMzNTMzIDgwLjA3MDI1NDUyIDk2LjIwOTMzNTMzIDg1LjAyMDI1NDUyIDk2LjIwOTMzNTMzIDkwLjEyMDI1NDUyIEM5MC4yNjkzMzUzMyA5MC4xMjAyNTQ1MiA4NC4zMjkzMzUzMyA5MC4xMjAyNTQ1MiA3OC4yMDkzMzUzMyA5MC4xMjAyNTQ1MiBDNzkuMTk5MzM1MzMgOTMuNTg1MjU0NTIgNzkuMTk5MzM1MzMgOTMuNTg1MjU0NTIgODAuMjA5MzM1MzMgOTcuMTIwMjU0NTIgQzg1LjQ4OTMzNTMzIDk3LjEyMDI1NDUyIDkwLjc2OTMzNTMzIDk3LjEyMDI1NDUyIDk2LjIwOTMzNTMzIDk3LjEyMDI1NDUyIEM5Ni4yMDkzMzUzMyAxMDIuMDcwMjU0NTIgOTYuMjA5MzM1MzMgMTA3LjAyMDI1NDUyIDk2LjIwOTMzNTMzIDExMi4xMjAyNTQ1MiBDOTEuNzU0MzM1MzMgMTEyLjYxNTI1NDUyIDkxLjc1NDMzNTMzIDExMi42MTUyNTQ1MiA4Ny4yMDkzMzUzMyAxMTMuMTIwMjU0NTIgQzg3LjcxNDY0NzgzIDExNC4zODQ4MjQ4MyA4OC4yMTk5NjAzMyAxMTUuNjQ5Mzk1MTQgODguNzQwNTg1MzMgMTE2Ljk1MjI4NTc3IEM4OS4zOTcxMDI1MiAxMTguNjEyMzM2MzcgOTAuMDUzMzM3ODkgMTIwLjI3MjQ5ODQ1IDkwLjcwOTMzNTMzIDEyMS45MzI3NTQ1MiBDOTEuMjEwMTM2MTEgMTIzLjE4MjgyMjg4IDkxLjIxMDEzNjExIDEyMy4xODI4MjI4OCA5MS43MjEwNTQwOCAxMjQuNDU4MTQ1MTQgQzkyLjE5NDc4NDU1IDEyNS42NjE4MDcyNSA5Mi4xOTQ3ODQ1NSAxMjUuNjYxODA3MjUgOTIuNjc4MDg1MzMgMTI2Ljg4OTc4NTc3IEM5Mi45NzEzNDcwNSAxMjcuNjI4MTc2ODggOTMuMjY0NjA4NzYgMTI4LjM2NjU2Nzk5IDkzLjU2Njc1NzIgMTI5LjEyNzMzNDU5IEM5NC4yMDkzMzUzMyAxMzEuMTIwMjU0NTIgOTQuMjA5MzM1MzMgMTMxLjEyMDI1NDUyIDk0LjIwOTMzNTMzIDEzNC4xMjAyNTQ1MiBDODEuOTk5MzM1MzMgMTM0LjEyMDI1NDUyIDY5Ljc4OTMzNTMzIDEzNC4xMjAyNTQ1MiA1Ny4yMDkzMzUzMyAxMzQuMTIwMjU0NTIgQzUyLjIwOTMzNTMzIDEyMi4xMjAyNTQ1MiA1Mi4yMDkzMzUzMyAxMjIuMTIwMjU0NTIgNDkuMjA5MzM1MzMgMTEyLjEyMDI1NDUyIEMzMC4wNjkzMzUzMyAxMTIuMTIwMjU0NTIgMTAuOTI5MzM1MzMgMTEyLjEyMDI1NDUyIC04Ljc5MDY2NDY3IDExMi4xMjAyNTQ1MiBDLTkuNzgwNjY0NjcgMTE1LjQyMDI1NDUyIC0xMC43NzA2NjQ2NyAxMTguNzIwMjU0NTIgLTExLjc5MDY2NDY3IDEyMi4xMjAyNTQ1MiBDLTEzLjQ0MDY2NDY3IDEyNi4wODAyNTQ1MiAtMTUuMDkwNjY0NjcgMTMwLjA0MDI1NDUyIC0xNi43OTA2NjQ2NyAxMzQuMTIwMjU0NTIgQy0yOS4wMDA2NjQ2NyAxMzQuMTIwMjU0NTIgLTQxLjIxMDY2NDY3IDEzNC4xMjAyNTQ1MiAtNTMuNzkwNjY0NjcgMTM0LjEyMDI1NDUyIEMtNTMuMTI2NDQxNjkgMTMwLjc5OTEzOTYgLTUyLjU1MzU4NjExIDEyOC4yMDE5NDI1MyAtNTEuMzgwNTA4NDIgMTI1LjEzMTk3MzI3IEMtNTAuOTc5Mjg3NzIgMTI0LjA3MzMzMDY5IC01MC45NzkyODc3MiAxMjQuMDczMzMwNjkgLTUwLjU2OTk2MTU1IDEyMi45OTMzMDEzOSBDLTUwLjI5MjE2ODU4IDEyMi4yNzIwNzA5MiAtNTAuMDE0Mzc1NjEgMTIxLjU1MDg0MDQ1IC00OS43MjgxNjQ2NyAxMjAuODA3NzU0NTIgQy00OS4zMDU2NzQ0NCAxMTkuNjk2OTA0OTEgLTQ5LjMwNTY3NDQ0IDExOS42OTY5MDQ5MSAtNDguODc0NjQ5MDUgMTE4LjU2MzYxMzg5IEMtNDguMTgzNDc4OTIgMTE2Ljc0NzgyNzk2IC00Ny40ODc1NDc3OSAxMTQuOTMzODU1NTIgLTQ2Ljc5MDY2NDY3IDExMy4xMjAyNTQ1MiBDLTQ5Ljc2MDY2NDY3IDExMi43OTAyNTQ1MiAtNTIuNzMwNjY0NjcgMTEyLjQ2MDI1NDUyIC01NS43OTA2NjQ2NyAxMTIuMTIwMjU0NTIgQy01NS43OTA2NjQ2NyAxMDcuMTcwMjU0NTIgLTU1Ljc5MDY2NDY3IDEwMi4yMjAyNTQ1MiAtNTUuNzkwNjY0NjcgOTcuMTIwMjU0NTIgQy01MC41MTA2NjQ2NyA5Ny4xMjAyNTQ1MiAtNDUuMjMwNjY0NjcgOTcuMTIwMjU0NTIgLTM5Ljc5MDY2NDY3IDk3LjEyMDI1NDUyIEMtMzkuMTMwNjY0NjcgOTQuODEwMjU0NTIgLTM4LjQ3MDY2NDY3IDkyLjUwMDI1NDUyIC0zNy43OTA2NjQ2NyA5MC4xMjAyNTQ1MiBDLTQzLjczMDY2NDY3IDkwLjEyMDI1NDUyIC00OS42NzA2NjQ2NyA5MC4xMjAyNTQ1MiAtNTUuNzkwNjY0NjcgOTAuMTIwMjU0NTIgQy01NS43OTA2NjQ2NyA4NS4xNzAyNTQ1MiAtNTUuNzkwNjY0NjcgODAuMjIwMjU0NTIgLTU1Ljc5MDY2NDY3IDc1LjEyMDI1NDUyIEMtNDcuNTQwNjY0NjcgNzUuMTIwMjU0NTIgLTM5LjI5MDY2NDY3IDc1LjEyMDI1NDUyIC0zMC43OTA2NjQ2NyA3NS4xMjAyNTQ1MiBDLTMwLjQ2MDY2NDY3IDczLjQ3MDI1NDUyIC0zMC4xMzA2NjQ2NyA3MS44MjAyNTQ1MiAtMjkuNzkwNjY0NjcgNzAuMTIwMjU0NTIgQy0yOS4zNTY1NzU4MyA2OC44MTI0MDQ1NiAtMjguODg3MjM5MjEgNjcuNTE1NzA5OTggLTI4LjM4Mjk0OTgzIDY2LjIzMzI5MTYzIEMtMjcuOTU1MjcwNjEgNjUuMTM2NzU1MTQgLTI3Ljk1NTI3MDYxIDY1LjEzNjc1NTE0IC0yNy41MTg5NTE0MiA2NC4wMTgwNjY0MSBDLTI3LjIwOTAwNzQyIDYzLjIzNTgxMTkyIC0yNi44OTkwNjM0MiA2Mi40NTM1NTc0MyAtMjYuNTc5NzI3MTcgNjEuNjQ3NTk4MjcgQy0yNi4wOTMyMzk1MiA2MC40MDUyNzE4NCAtMjYuMDkzMjM5NTIgNjAuNDA1MjcxODQgLTI1LjU5NjkyMzgzIDU5LjEzNzg0NzkgQy0yNC41NDA0OTM5NyA1Ni40NDI4OTc0OSAtMjMuNDc4MjE0MDQgNTMuNzUwMjk3MzYgLTIyLjQxNTY2NDY3IDUxLjA1Nzc1NDUyIEMtMjEuNjg4NjgwNTUgNDkuMjA3NjI3NzYgLTIwLjk2MjAzODM5IDQ3LjM1NzM2NjU5IC0yMC4yMzU3MzMwMyA0NS41MDY5NzMyNyBDLTE4Ljc3OTY4MzY3IDQxLjc5ODk3MzEgLTE3LjMyMTM4MjQ0IDM4LjA5MTg3MDIyIC0xNS44NjE0NjU0NSAzNC4zODUzOTEyNCBDLTE0LjAwMzg3MjU1IDI5LjY2NjY4MzE1IC0xMi4xNTg0NzMxNyAyNC45NDMzMjA2NSAtMTAuMzE4MDA4NDIgMjAuMjE3OTEwNzcgQy05LjgwNjIzMTMyIDE4LjkwNjEwMjQ1IC05LjI5NDM1Mzc3IDE3LjU5NDMzMzMyIC04Ljc4MjM2Mzg5IDE2LjI4MjYwODAzIEMtNy44NDYzMDQ5OSAxMy44ODM5MzcxMSAtNi45MTE2ODAwOCAxMS40ODQ3MDU5NyAtNS45Nzg2NTI5NSA5LjA4NDg1NDEzIEMtNS41NjcyODA4OCA4LjAzNDM0ODc1IC01LjE1NTkwODgxIDYuOTgzODQzMzggLTQuNzMyMDcwOTIgNS45MDE1MDQ1MiBDLTQuMzc4MzAzODMgNC45OTQ2NDkwNSAtNC4wMjQ1MzY3NCA0LjA4Nzc5MzU4IC0zLjY2MDA0OTQ0IDMuMTUzNDU3NjQgQy0yLjM3OTk5Mzk4IDAuMTU5ODMxNzMgLTIuMzc5OTkzOTggMC4xNTk4MzE3MyAwIDAgWiBNMjAuMjA5MzM1MzMgMzQuMTIwMjU0NTIgQzE2LjgxMTU1MDQyIDQxLjQ0MTY3MiAxMy45NzAzMDk5MyA0OC45Mjk2MjIxMiAxMS4yMDc4NzA0OCA1Ni41MDY3MjkxMyBDMTAuNDUxMzgyMzUgNTguNTc5NTQ2MDkgOS42ODgwNjYyNSA2MC42NDk3NjM3OSA4LjkyNDE3OTA4IDYyLjcxOTg2Mzg5IEM4LjQ0MDY5OTkyIDY0LjAzOTM3NjU3IDcuOTU3NjEyMjcgNjUuMzU5MDMyNzggNy40NzQ5NjAzMyA2Ni42Nzg4NDgyNyBDNy4wMzk1Nzk0NyA2Ny44Njc5Mjc4NiA2LjYwNDE5ODYxIDY5LjA1NzAwNzQ1IDYuMTU1NjI0MzkgNzAuMjgyMTE5NzUgQzUuMTAzOTAxNTkgNzIuOTM3ODUxOCA1LjEwMzkwMTU5IDcyLjkzNzg1MTggNS4yMDkzMzUzMyA3NS4xMjAyNTQ1MiBDMTUuMTA5MzM1MzMgNzUuMTIwMjU0NTIgMjUuMDA5MzM1MzMgNzUuMTIwMjU0NTIgMzUuMjA5MzM1MzMgNzUuMTIwMjU0NTIgQzMzLjQxMTgzNzk3IDY5LjEyODU5NjY3IDMxLjYyMDI3MzkyIDYzLjIzNDQ4Mzc4IDI5LjUxMDExNjU4IDU3LjM2MjQ0MjAyIEMyOS4yNzAyMDQ5MyA1Ni42ODg1MTQxIDI5LjAzMDI5MzI3IDU2LjAxNDU4NjE4IDI4Ljc4MzExMTU3IDU1LjMyMDIzNjIxIEMyOC4wMzE2Nzg1NiA1My4yMTEwNzA1NyAyNy4yNzY4MzI1IDUxLjEwMzE0NjU4IDI2LjUyMTgzNTMzIDQ4Ljk5NTI1NDUyIEMyNi4wMDUzMzA1NCA0Ny41NDc0MTk0MyAyNS40ODkwNTI4MSA0Ni4wOTk1MDMzMyAyNC45NzMwMDcyIDQ0LjY1MTUwNDUyIEMyMy43MjEwNjM0NyA0MS4xNDAxNTA4OCAyMi40NjYwNjAxOSAzNy42Mjk5MDAyNSAyMS4yMDkzMzUzMyAzNC4xMjAyNTQ1MiBDMjAuODc5MzM1MzMgMzQuMTIwMjU0NTIgMjAuNTQ5MzM1MzMgMzQuMTIwMjU0NTIgMjAuMjA5MzM1MzMgMzQuMTIwMjU0NTIgWiBNLTAuNzkwNjY0NjcgOTAuMTIwMjU0NTIgQy0xLjQ1MDY2NDY3IDkyLjQzMDI1NDUyIC0yLjExMDY2NDY3IDk0Ljc0MDI1NDUyIC0yLjc5MDY2NDY3IDk3LjEyMDI1NDUyIEMxMi4zODkzMzUzMyA5Ny4xMjAyNTQ1MiAyNy41NjkzMzUzMyA5Ny4xMjAyNTQ1MiA0My4yMDkzMzUzMyA5Ny4xMjAyNTQ1MiBDNDIuNTQ5MzM1MzMgOTQuODEwMjU0NTIgNDEuODg5MzM1MzMgOTIuNTAwMjU0NTIgNDEuMjA5MzM1MzMgOTAuMTIwMjU0NTIgQzI3LjM0OTMzNTMzIDkwLjEyMDI1NDUyIDEzLjQ4OTMzNTMzIDkwLjEyMDI1NDUyIC0wLjc5MDY2NDY3IDkwLjEyMDI1NDUyIFogIiBmaWxsPSIjOUU5RTlFIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMDcuNzkwNjY0NjcyODUxNTYsNDUuODc5NzQ1NDgzMzk4NDQpIi8+Cjwvc3ZnPgo=',
+ menuIconURI: 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI1NiIgaGVpZ2h0PSIyNTYiPgo8cGF0aCBkPSJNMCAwIEMyMi4wMzg1MjY1MiAxOC44MTE1OTg1NiAzNi40NjU3OTMzNCA0MS4wNjM3MzM3NyA0NC4zNTE1NjI1IDY4LjkxMDE1NjI1IEM0NC42OTMxNjQwNiA3MC4wODgzNTkzNyA0NS4wMzQ3NjU2MyA3MS4yNjY1NjI1IDQ1LjM4NjcxODc1IDcyLjQ4MDQ2ODc1IEM1MS41OTA5Mjc1NSA5OC43NDAxNDMyMiA0OC4xMTkzNTU5NyAxMjguNDA3NTUzODkgMzcuMzUxNTYyNSAxNTIuOTEwMTU2MjUgQzM2LjkyNjY1NTI3IDE1My44OTE0NTUwOCAzNi45MjY2NTUyNyAxNTMuODkxNDU1MDggMzYuNDkzMTY0MDYgMTU0Ljg5MjU3ODEyIEMyNi41NTAxNTk0MyAxNzcuNDE1NDA2MzEgOS4zNjgzODI4MiAxOTcuMDgzNzE0NDMgLTExLjY0ODQzNzUgMjA5LjkxMDE1NjI1IEMtMTIuNzIwOTM3NSAyMTAuNTkzMzU5MzggLTEzLjc5MzQzNzUgMjExLjI3NjU2MjUgLTE0Ljg5ODQzNzUgMjExLjk4MDQ2ODc1IEMtNDIuNzU5MjI3OTQgMjI4Ljk0MjAxNDc4IC03OC4yNTA2MTE4OSAyMzMuOTI2NDg1NDUgLTExMC4wMzAyNzM0NCAyMjYuNzQ3MDcwMzEgQy0xMTcuODE5NDE3MjkgMjI0Ljc3NzM2MzU3IC0xMjUuMjk4MDI2MiAyMjIuMTQwMzMxOTUgLTEzMi42NDg0Mzc1IDIxOC45MTAxNTYyNSBDLTEzMy4zMDI2MzY3MiAyMTguNjI2ODg0NzcgLTEzMy45NTY4MzU5NCAyMTguMzQzNjEzMjggLTEzNC42MzA4NTkzOCAyMTguMDUxNzU3ODEgQy0xNjQuNzI1OTMyMzQgMjA0Ljc2NTg4NDE0IC0xODguNDMyNjIzMzkgMTc5LjE4ODU5MzM5IC0yMDAuNTE5NTMxMjUgMTQ4LjcxMzg2NzE5IEMtMjAyLjQ3ODkwMDc3IDE0My41MTUyMTc0MiAtMjA0LjEzNTA4MjUgMTM4LjI1NDE1Mjc0IC0yMDUuNjQ4NDM3NSAxMzIuOTEwMTU2MjUgQy0yMDUuOTkwMDM5MDYgMTMxLjczMTk1MzEyIC0yMDYuMzMxNjQwNjMgMTMwLjU1Mzc1IC0yMDYuNjgzNTkzNzUgMTI5LjMzOTg0Mzc1IEMtMjE0LjIxNzQzOTk4IDk3LjQ1MjQwMTU3IC0yMDcuODM1NTc0NTYgNjEuNDM0NjUxNjEgLTE5MS4wMDc4MTI1IDMzLjYwNTQ2ODc1IEMtMTcyLjcxOTMxMzkzIDQuNTE1NjA4MTggLTE0NS40NzI3MDQ5NSAtMTQuNzk0NDA5MjYgLTExMi42NDg0Mzc1IC0yNC4wODk4NDM3NSBDLTExMS40NzAyMzQzOCAtMjQuNDMxNDQ1MzEgLTExMC4yOTIwMzEyNSAtMjQuNzczMDQ2ODcgLTEwOS4wNzgxMjUgLTI1LjEyNSBDLTcxLjkxMjE2MjA0IC0zMy45MDU5NjkyNyAtMjkuNDM4MzUxODQgLTI0LjE0NjUyMjQyIDAgMCBaIE0tMTU2LjY0ODQzNzUgMzguOTEwMTU2MjUgQy0xNzIuNjc2OTQzNTIgNTguMDg4NzczMjggLTE4MC4zOTY0OTAzOCA4NC41ODg4MzUyMyAtMTc4LjM3MTA5Mzc1IDEwOS4yOTI5Njg3NSBDLTE3NS40NzE3NjMxNSAxMzUuNzQ1OTA4ODUgLTE2Mi45NTU1MTQxMyAxNTkuNTg0NTMzMDggLTE0Mi42NDg0Mzc1IDE3Ni45MTAxNTYyNSBDLTEyNi41NDMxNjcwNSAxODkuNjk5NjM1NzIgLTEwNi4zMjExMTA2MiAxOTguMDkxNzg4ODEgLTg1LjY0ODQzNzUgMTk4LjkxMDE1NjI1IEMtODQuODg5MTc5NjkgMTk4Ljk1MDExNzE5IC04NC4xMjk5MjE4NyAxOTguOTkwMDc4MTIgLTgzLjM0NzY1NjI1IDE5OS4wMzEyNSBDLTU2LjU4MDI3NzA5IDE5OS43NzYwMDUyMyAtMzEuNDM2MTQxNzYgMTg4LjgxNjI3MjU4IC0xMi4wNTQ0NDMzNiAxNzAuNzY1NjI1IEM1LjI3MjM5MDEyIDE1NC4wMTA3MzQ1MiAxNi4zOTQyODMxMyAxMzAuMDkxODY1NjUgMTcuMzUxNTYyNSAxMDUuOTEwMTU2MjUgQzE3LjM5MTUyMzQ0IDEwNS4xNTA4OTg0NCAxNy40MzE0ODQzNyAxMDQuMzkxNjQwNjIgMTcuNDcyNjU2MjUgMTAzLjYwOTM3NSBDMTguMjE3NDExNDggNzYuODQxOTk1ODQgNy4yNTc2Nzg4MyA1MS42OTc4NjA1MSAtMTAuNzkyOTY4NzUgMzIuMzE2MTYyMTEgQy0yNy41NDc4NTkyMyAxNC45ODkzMjg2MyAtNTEuNDY2NzI4MSAzLjg2NzQzNTYyIC03NS42NDg0Mzc1IDIuOTEwMTU2MjUgQy03Ni43ODczMjQyMiAyLjg1MDIxNDg0IC03Ni43ODczMjQyMiAyLjg1MDIxNDg0IC03Ny45NDkyMTg3NSAyLjc4OTA2MjUgQy0xMDguODU5OTYwMDYgMS45MjkwMjU1MSAtMTM2LjI0OTk3Njk4IDE2LjQzMzI0OTk3IC0xNTYuNjQ4NDM3NSAzOC45MTAxNTYyNSBaICIgZmlsbD0iIzlFOUU5RSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjA4LjY0ODQzNzUsMjcuMDg5ODQzNzUpIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuNzc5NDM0NjYgMC4wMDIyMjA2MSAxLjU1ODg2OTMyIDAuMDA0NDQxMjIgMi4zNjE5MjMyMiAwLjAwNjcyOTEzIEMzLjI0Mjc2MDc3IDAuMDA2ODA0NjYgNC4xMjM1OTgzMyAwLjAwNjg4MDE5IDUuMDMxMTI3OTMgMC4wMDY5NTgwMSBDNS45ODg0MTI5MyAwLjAxMjExOTI5IDYuOTQ1Njk3OTQgMC4wMTcyODA1OCA3LjkzMTk5MTU4IDAuMDIyNTk4MjcgQzkuMzk0ODA4MTIgMC4wMjQ3MjA2OSA5LjM5NDgwODEyIDAuMDI0NzIwNjkgMTAuODg3MTc2NTEgMC4wMjY4ODU5OSBDMTQuMDE1NDI2NzUgMC4wMzI1MDMxOSAxNy4xNDM2MDY1NiAwLjA0NTA1ODU5IDIwLjI3MTgzNTMzIDAuMDU3NzU0NTIgQzIyLjM4NzA2ODY3IDAuMDYyNzY3MyAyNC41MDIzMDMxMyAwLjA2NzMzMDU5IDI2LjYxNzUzODQ1IDAuMDcxNDI2MzkgQzMxLjgxNDgyODI5IDAuMDgyNDc4MiAzNy4wMTIwNzY3OCAwLjA5OTIzMzA1IDQyLjIwOTMzNTMzIDAuMTIwMjU0NTIgQzQ0Ljk5MTE0MDUxIDYuMjUxMzU5MTEgNDcuNTc5MTE3NDUgMTIuNDM1MDc1MzMgNTAuMDM3NDYwMzMgMTguNzAyMjg1NzcgQzUwLjM5MDE1OTkxIDE5LjU5NjU0NzcgNTAuNzQyODU5NSAyMC40OTA4MDk2MyA1MS4xMDYyNDY5NSAyMS40MTIxNzA0MSBDNTIuMjI1NzczMjEgMjQuMjUxNjQ4MTQgNTMuMzQyNjgwOCAyNy4wOTIxNDYzOCA1NC40NTkzMzUzMyAyOS45MzI3NTQ1MiBDNTUuNTU3NzAyMTUgMzIuNzIyNDMxMiA1Ni42NTY2Mzk1MiAzNS41MTE4ODE3NCA1Ny43NTYwODgyNiAzOC4zMDExMzIyIEM1OC40ODMyNDk1MSA0MC4xNDY2MDUxNSA1OS4yMDk1NzI4OCA0MS45OTI0MDg0OCA1OS45MzUwNDMzMyA0My44Mzg1NDY3NSBDNjEuNzc4MzM5NjQgNDguNTIyNzUzMjQgNjMuNjQxMjU5NzcgNTMuMTk3NzI3NjUgNjUuNTM5NDEzNDUgNTcuODYwMDAwNjEgQzY1LjkxMTc3MTI0IDU4Ljc3Nzg2ODUgNjYuMjg0MTI5MDMgNTkuNjk1NzM2MzkgNjYuNjY3NzcwMzkgNjAuNjQxNDE4NDYgQzY3LjM3NzQxMTc2IDYyLjM4NzQ1NzM3IDY4LjA5MTI4MzIxIDY0LjEzMTc4NDgzIDY4LjgwOTk4MjMgNjUuODc0MTE0OTkgQzY5LjEyNTc4MjQ3IDY2LjY1MjMyMTAxIDY5LjQ0MTU4MjY0IDY3LjQzMDUyNzA0IDY5Ljc2Njk1MjUxIDY4LjIzMjMxNTA2IEM3MC4wNDY0MTcyNCA2OC45MTMyNzc0NCA3MC4zMjU4ODE5NiA2OS41OTQyMzk4MSA3MC42MTM4MTUzMSA3MC4yOTU4Mzc0IEM3MS4yMDkzMzUzMyA3Mi4xMjAyNTQ1MiA3MS4yMDkzMzUzMyA3Mi4xMjAyNTQ1MiA3MS4yMDkzMzUzMyA3NS4xMjAyNTQ1MiBDNzkuNDU5MzM1MzMgNzUuMTIwMjU0NTIgODcuNzA5MzM1MzMgNzUuMTIwMjU0NTIgOTYuMjA5MzM1MzMgNzUuMTIwMjU0NTIgQzk2LjIwOTMzNTMzIDgwLjA3MDI1NDUyIDk2LjIwOTMzNTMzIDg1LjAyMDI1NDUyIDk2LjIwOTMzNTMzIDkwLjEyMDI1NDUyIEM5MC4yNjkzMzUzMyA5MC4xMjAyNTQ1MiA4NC4zMjkzMzUzMyA5MC4xMjAyNTQ1MiA3OC4yMDkzMzUzMyA5MC4xMjAyNTQ1MiBDNzkuMTk5MzM1MzMgOTMuNTg1MjU0NTIgNzkuMTk5MzM1MzMgOTMuNTg1MjU0NTIgODAuMjA5MzM1MzMgOTcuMTIwMjU0NTIgQzg1LjQ4OTMzNTMzIDk3LjEyMDI1NDUyIDkwLjc2OTMzNTMzIDk3LjEyMDI1NDUyIDk2LjIwOTMzNTMzIDk3LjEyMDI1NDUyIEM5Ni4yMDkzMzUzMyAxMDIuMDcwMjU0NTIgOTYuMjA5MzM1MzMgMTA3LjAyMDI1NDUyIDk2LjIwOTMzNTMzIDExMi4xMjAyNTQ1MiBDOTEuNzU0MzM1MzMgMTEyLjYxNTI1NDUyIDkxLjc1NDMzNTMzIDExMi42MTUyNTQ1MiA4Ny4yMDkzMzUzMyAxMTMuMTIwMjU0NTIgQzg3LjcxNDY0NzgzIDExNC4zODQ4MjQ4MyA4OC4yMTk5NjAzMyAxMTUuNjQ5Mzk1MTQgODguNzQwNTg1MzMgMTE2Ljk1MjI4NTc3IEM4OS4zOTcxMDI1MiAxMTguNjEyMzM2MzcgOTAuMDUzMzM3ODkgMTIwLjI3MjQ5ODQ1IDkwLjcwOTMzNTMzIDEyMS45MzI3NTQ1MiBDOTEuMjEwMTM2MTEgMTIzLjE4MjgyMjg4IDkxLjIxMDEzNjExIDEyMy4xODI4MjI4OCA5MS43MjEwNTQwOCAxMjQuNDU4MTQ1MTQgQzkyLjE5NDc4NDU1IDEyNS42NjE4MDcyNSA5Mi4xOTQ3ODQ1NSAxMjUuNjYxODA3MjUgOTIuNjc4MDg1MzMgMTI2Ljg4OTc4NTc3IEM5Mi45NzEzNDcwNSAxMjcuNjI4MTc2ODggOTMuMjY0NjA4NzYgMTI4LjM2NjU2Nzk5IDkzLjU2Njc1NzIgMTI5LjEyNzMzNDU5IEM5NC4yMDkzMzUzMyAxMzEuMTIwMjU0NTIgOTQuMjA5MzM1MzMgMTMxLjEyMDI1NDUyIDk0LjIwOTMzNTMzIDEzNC4xMjAyNTQ1MiBDODEuOTk5MzM1MzMgMTM0LjEyMDI1NDUyIDY5Ljc4OTMzNTMzIDEzNC4xMjAyNTQ1MiA1Ny4yMDkzMzUzMyAxMzQuMTIwMjU0NTIgQzUyLjIwOTMzNTMzIDEyMi4xMjAyNTQ1MiA1Mi4yMDkzMzUzMyAxMjIuMTIwMjU0NTIgNDkuMjA5MzM1MzMgMTEyLjEyMDI1NDUyIEMzMC4wNjkzMzUzMyAxMTIuMTIwMjU0NTIgMTAuOTI5MzM1MzMgMTEyLjEyMDI1NDUyIC04Ljc5MDY2NDY3IDExMi4xMjAyNTQ1MiBDLTkuNzgwNjY0NjcgMTE1LjQyMDI1NDUyIC0xMC43NzA2NjQ2NyAxMTguNzIwMjU0NTIgLTExLjc5MDY2NDY3IDEyMi4xMjAyNTQ1MiBDLTEzLjQ0MDY2NDY3IDEyNi4wODAyNTQ1MiAtMTUuMDkwNjY0NjcgMTMwLjA0MDI1NDUyIC0xNi43OTA2NjQ2NyAxMzQuMTIwMjU0NTIgQy0yOS4wMDA2NjQ2NyAxMzQuMTIwMjU0NTIgLTQxLjIxMDY2NDY3IDEzNC4xMjAyNTQ1MiAtNTMuNzkwNjY0NjcgMTM0LjEyMDI1NDUyIEMtNTMuMTI2NDQxNjkgMTMwLjc5OTEzOTYgLTUyLjU1MzU4NjExIDEyOC4yMDE5NDI1MyAtNTEuMzgwNTA4NDIgMTI1LjEzMTk3MzI3IEMtNTAuOTc5Mjg3NzIgMTI0LjA3MzMzMDY5IC01MC45NzkyODc3MiAxMjQuMDczMzMwNjkgLTUwLjU2OTk2MTU1IDEyMi45OTMzMDEzOSBDLTUwLjI5MjE2ODU4IDEyMi4yNzIwNzA5MiAtNTAuMDE0Mzc1NjEgMTIxLjU1MDg0MDQ1IC00OS43MjgxNjQ2NyAxMjAuODA3NzU0NTIgQy00OS4zMDU2NzQ0NCAxMTkuNjk2OTA0OTEgLTQ5LjMwNTY3NDQ0IDExOS42OTY5MDQ5MSAtNDguODc0NjQ5MDUgMTE4LjU2MzYxMzg5IEMtNDguMTgzNDc4OTIgMTE2Ljc0NzgyNzk2IC00Ny40ODc1NDc3OSAxMTQuOTMzODU1NTIgLTQ2Ljc5MDY2NDY3IDExMy4xMjAyNTQ1MiBDLTQ5Ljc2MDY2NDY3IDExMi43OTAyNTQ1MiAtNTIuNzMwNjY0NjcgMTEyLjQ2MDI1NDUyIC01NS43OTA2NjQ2NyAxMTIuMTIwMjU0NTIgQy01NS43OTA2NjQ2NyAxMDcuMTcwMjU0NTIgLTU1Ljc5MDY2NDY3IDEwMi4yMjAyNTQ1MiAtNTUuNzkwNjY0NjcgOTcuMTIwMjU0NTIgQy01MC41MTA2NjQ2NyA5Ny4xMjAyNTQ1MiAtNDUuMjMwNjY0NjcgOTcuMTIwMjU0NTIgLTM5Ljc5MDY2NDY3IDk3LjEyMDI1NDUyIEMtMzkuMTMwNjY0NjcgOTQuODEwMjU0NTIgLTM4LjQ3MDY2NDY3IDkyLjUwMDI1NDUyIC0zNy43OTA2NjQ2NyA5MC4xMjAyNTQ1MiBDLTQzLjczMDY2NDY3IDkwLjEyMDI1NDUyIC00OS42NzA2NjQ2NyA5MC4xMjAyNTQ1MiAtNTUuNzkwNjY0NjcgOTAuMTIwMjU0NTIgQy01NS43OTA2NjQ2NyA4NS4xNzAyNTQ1MiAtNTUuNzkwNjY0NjcgODAuMjIwMjU0NTIgLTU1Ljc5MDY2NDY3IDc1LjEyMDI1NDUyIEMtNDcuNTQwNjY0NjcgNzUuMTIwMjU0NTIgLTM5LjI5MDY2NDY3IDc1LjEyMDI1NDUyIC0zMC43OTA2NjQ2NyA3NS4xMjAyNTQ1MiBDLTMwLjQ2MDY2NDY3IDczLjQ3MDI1NDUyIC0zMC4xMzA2NjQ2NyA3MS44MjAyNTQ1MiAtMjkuNzkwNjY0NjcgNzAuMTIwMjU0NTIgQy0yOS4zNTY1NzU4MyA2OC44MTI0MDQ1NiAtMjguODg3MjM5MjEgNjcuNTE1NzA5OTggLTI4LjM4Mjk0OTgzIDY2LjIzMzI5MTYzIEMtMjcuOTU1MjcwNjEgNjUuMTM2NzU1MTQgLTI3Ljk1NTI3MDYxIDY1LjEzNjc1NTE0IC0yNy41MTg5NTE0MiA2NC4wMTgwNjY0MSBDLTI3LjIwOTAwNzQyIDYzLjIzNTgxMTkyIC0yNi44OTkwNjM0MiA2Mi40NTM1NTc0MyAtMjYuNTc5NzI3MTcgNjEuNjQ3NTk4MjcgQy0yNi4wOTMyMzk1MiA2MC40MDUyNzE4NCAtMjYuMDkzMjM5NTIgNjAuNDA1MjcxODQgLTI1LjU5NjkyMzgzIDU5LjEzNzg0NzkgQy0yNC41NDA0OTM5NyA1Ni40NDI4OTc0OSAtMjMuNDc4MjE0MDQgNTMuNzUwMjk3MzYgLTIyLjQxNTY2NDY3IDUxLjA1Nzc1NDUyIEMtMjEuNjg4NjgwNTUgNDkuMjA3NjI3NzYgLTIwLjk2MjAzODM5IDQ3LjM1NzM2NjU5IC0yMC4yMzU3MzMwMyA0NS41MDY5NzMyNyBDLTE4Ljc3OTY4MzY3IDQxLjc5ODk3MzEgLTE3LjMyMTM4MjQ0IDM4LjA5MTg3MDIyIC0xNS44NjE0NjU0NSAzNC4zODUzOTEyNCBDLTE0LjAwMzg3MjU1IDI5LjY2NjY4MzE1IC0xMi4xNTg0NzMxNyAyNC45NDMzMjA2NSAtMTAuMzE4MDA4NDIgMjAuMjE3OTEwNzcgQy05LjgwNjIzMTMyIDE4LjkwNjEwMjQ1IC05LjI5NDM1Mzc3IDE3LjU5NDMzMzMyIC04Ljc4MjM2Mzg5IDE2LjI4MjYwODAzIEMtNy44NDYzMDQ5OSAxMy44ODM5MzcxMSAtNi45MTE2ODAwOCAxMS40ODQ3MDU5NyAtNS45Nzg2NTI5NSA5LjA4NDg1NDEzIEMtNS41NjcyODA4OCA4LjAzNDM0ODc1IC01LjE1NTkwODgxIDYuOTgzODQzMzggLTQuNzMyMDcwOTIgNS45MDE1MDQ1MiBDLTQuMzc4MzAzODMgNC45OTQ2NDkwNSAtNC4wMjQ1MzY3NCA0LjA4Nzc5MzU4IC0zLjY2MDA0OTQ0IDMuMTUzNDU3NjQgQy0yLjM3OTk5Mzk4IDAuMTU5ODMxNzMgLTIuMzc5OTkzOTggMC4xNTk4MzE3MyAwIDAgWiBNMjAuMjA5MzM1MzMgMzQuMTIwMjU0NTIgQzE2LjgxMTU1MDQyIDQxLjQ0MTY3MiAxMy45NzAzMDk5MyA0OC45Mjk2MjIxMiAxMS4yMDc4NzA0OCA1Ni41MDY3MjkxMyBDMTAuNDUxMzgyMzUgNTguNTc5NTQ2MDkgOS42ODgwNjYyNSA2MC42NDk3NjM3OSA4LjkyNDE3OTA4IDYyLjcxOTg2Mzg5IEM4LjQ0MDY5OTkyIDY0LjAzOTM3NjU3IDcuOTU3NjEyMjcgNjUuMzU5MDMyNzggNy40NzQ5NjAzMyA2Ni42Nzg4NDgyNyBDNy4wMzk1Nzk0NyA2Ny44Njc5Mjc4NiA2LjYwNDE5ODYxIDY5LjA1NzAwNzQ1IDYuMTU1NjI0MzkgNzAuMjgyMTE5NzUgQzUuMTAzOTAxNTkgNzIuOTM3ODUxOCA1LjEwMzkwMTU5IDcyLjkzNzg1MTggNS4yMDkzMzUzMyA3NS4xMjAyNTQ1MiBDMTUuMTA5MzM1MzMgNzUuMTIwMjU0NTIgMjUuMDA5MzM1MzMgNzUuMTIwMjU0NTIgMzUuMjA5MzM1MzMgNzUuMTIwMjU0NTIgQzMzLjQxMTgzNzk3IDY5LjEyODU5NjY3IDMxLjYyMDI3MzkyIDYzLjIzNDQ4Mzc4IDI5LjUxMDExNjU4IDU3LjM2MjQ0MjAyIEMyOS4yNzAyMDQ5MyA1Ni42ODg1MTQxIDI5LjAzMDI5MzI3IDU2LjAxNDU4NjE4IDI4Ljc4MzExMTU3IDU1LjMyMDIzNjIxIEMyOC4wMzE2Nzg1NiA1My4yMTEwNzA1NyAyNy4yNzY4MzI1IDUxLjEwMzE0NjU4IDI2LjUyMTgzNTMzIDQ4Ljk5NTI1NDUyIEMyNi4wMDUzMzA1NCA0Ny41NDc0MTk0MyAyNS40ODkwNTI4MSA0Ni4wOTk1MDMzMyAyNC45NzMwMDcyIDQ0LjY1MTUwNDUyIEMyMy43MjEwNjM0NyA0MS4xNDAxNTA4OCAyMi40NjYwNjAxOSAzNy42Mjk5MDAyNSAyMS4yMDkzMzUzMyAzNC4xMjAyNTQ1MiBDMjAuODc5MzM1MzMgMzQuMTIwMjU0NTIgMjAuNTQ5MzM1MzMgMzQuMTIwMjU0NTIgMjAuMjA5MzM1MzMgMzQuMTIwMjU0NTIgWiBNLTAuNzkwNjY0NjcgOTAuMTIwMjU0NTIgQy0xLjQ1MDY2NDY3IDkyLjQzMDI1NDUyIC0yLjExMDY2NDY3IDk0Ljc0MDI1NDUyIC0yLjc5MDY2NDY3IDk3LjEyMDI1NDUyIEMxMi4zODkzMzUzMyA5Ny4xMjAyNTQ1MiAyNy41NjkzMzUzMyA5Ny4xMjAyNTQ1MiA0My4yMDkzMzUzMyA5Ny4xMjAyNTQ1MiBDNDIuNTQ5MzM1MzMgOTQuODEwMjU0NTIgNDEuODg5MzM1MzMgOTIuNTAwMjU0NTIgNDEuMjA5MzM1MzMgOTAuMTIwMjU0NTIgQzI3LjM0OTMzNTMzIDkwLjEyMDI1NDUyIDEzLjQ4OTMzNTMzIDkwLjEyMDI1NDUyIC0wLjc5MDY2NDY3IDkwLjEyMDI1NDUyIFogIiBmaWxsPSIjOUU5RTlFIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMDcuNzkwNjY0NjcyODUxNTYsNDUuODc5NzQ1NDgzMzk4NDQpIi8+Cjwvc3ZnPgo=',
color1: '#FFAB19',
color2: '#FF8C00',
color3: '#E76F00',
From deb9291cb0ab30910bfb3eb43389f3a069a57dbc Mon Sep 17 00:00:00 2001
From: GoodBoi19 <181642507+Thebloxers998@users.noreply.github.com>
Date: Wed, 5 Feb 2025 17:49:34 +0000
Subject: [PATCH 11/20] Get Icon
---
images/Thebloxers998/OAuth-Icon.svg | 9 +++++++++
1 file changed, 9 insertions(+)
create mode 100644 images/Thebloxers998/OAuth-Icon.svg
diff --git a/images/Thebloxers998/OAuth-Icon.svg b/images/Thebloxers998/OAuth-Icon.svg
new file mode 100644
index 0000000000..8e3eef505e
--- /dev/null
+++ b/images/Thebloxers998/OAuth-Icon.svg
@@ -0,0 +1,9 @@
+
+
From 733b9952ff7b42355e91eb76f8144a58a2ab331c Mon Sep 17 00:00:00 2001
From: GoodBoi19 <181642507+Thebloxers998@users.noreply.github.com>
Date: Wed, 5 Feb 2025 17:51:02 +0000
Subject: [PATCH 12/20] YaY
---
images/Thebloxers998/oauth.svg | 5 -----
1 file changed, 5 deletions(-)
delete mode 100644 images/Thebloxers998/oauth.svg
diff --git a/images/Thebloxers998/oauth.svg b/images/Thebloxers998/oauth.svg
deleted file mode 100644
index 10268f2358..0000000000
--- a/images/Thebloxers998/oauth.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
From c1adf6c3e0385ebeccbbe146038128ee680ec364 Mon Sep 17 00:00:00 2001
From: "DangoCat[bot]"
Date: Wed, 5 Feb 2025 17:52:54 +0000
Subject: [PATCH 13/20] [Automated] Format code
---
extensions/Thebloxers998/oauth.js | 391 ++++++++++++++++--------------
1 file changed, 213 insertions(+), 178 deletions(-)
diff --git a/extensions/Thebloxers998/oauth.js b/extensions/Thebloxers998/oauth.js
index b0a3748e9f..5197922818 100644
--- a/extensions/Thebloxers998/oauth.js
+++ b/extensions/Thebloxers998/oauth.js
@@ -1,198 +1,233 @@
// Name: OAuth Extension
// ID: oauthExtension
-// Description: Provides OAuth login functionality for various services (Google, Microsoft, Discord, Twitter, GitHub, Facebook, LinkedIn, Spotify).
+// Description: Provides OAuth login functionality for various services (Google, Microsoft, Discord, Twitter, GitHub, Facebook, LinkedIn, Spotify).
// By: Thebloxers998
// License: MPL-2.0
(function (Scratch) {
- class OAuthExtension {
- constructor() {
- this.tokens = {};
- this.clients = {
- google: {
- clientId: '',
- clientSecret: '',
- redirectUri: '',
- authUrl: 'https://accounts.google.com/o/oauth2/auth',
- tokenUrl: 'https://oauth2.googleapis.com/token',
- scope: 'https://www.googleapis.com/auth/userinfo.profile',
- },
- microsoft: {
- clientId: '',
- clientSecret: '',
- redirectUri: '',
- authUrl: 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize',
- tokenUrl: 'https://login.microsoftonline.com/common/oauth2/v2.0/token',
- scope: 'https://graph.microsoft.com/User.Read',
- },
- discord: {
- clientId: '',
- clientSecret: '',
- redirectUri: '',
- authUrl: 'https://discord.com/api/oauth2/authorize',
- tokenUrl: 'https://discord.com/api/oauth2/token',
- scope: 'identify',
- },
- twitter: {
- clientId: '',
- clientSecret: '',
- redirectUri: '',
- authUrl: 'https://api.twitter.com/oauth/authorize',
- tokenUrl: 'https://api.twitter.com/oauth/access_token',
- },
- github: {
- clientId: '',
- clientSecret: '',
- redirectUri: '',
- authUrl: 'https://github.com/login/oauth/authorize',
- tokenUrl: 'https://github.com/login/oauth/access_token',
- scope: 'user',
- },
- facebook: {
- clientId: '',
- clientSecret: '',
- redirectUri: '',
- authUrl: 'https://www.facebook.com/v10.0/dialog/oauth',
- tokenUrl: 'https://graph.facebook.com/v10.0/oauth/access_token',
- scope: 'public_profile',
- },
- linkedin: {
- clientId: '',
- clientSecret: '',
- redirectUri: '',
- authUrl: 'https://www.linkedin.com/oauth/v2/authorization',
- tokenUrl: 'https://www.linkedin.com/oauth/v2/accessToken',
- scope: 'r_liteprofile',
- },
- spotify: {
- clientId: '',
- clientSecret: '',
- redirectUri: '',
- authUrl: 'https://accounts.spotify.com/authorize',
- tokenUrl: 'https://accounts.spotify.com/api/token',
- scope: 'user-read-private',
- },
- };
- }
+ class OAuthExtension {
+ constructor() {
+ this.tokens = {};
+ this.clients = {
+ google: {
+ clientId: "",
+ clientSecret: "",
+ redirectUri: "",
+ authUrl: "https://accounts.google.com/o/oauth2/auth",
+ tokenUrl: "https://oauth2.googleapis.com/token",
+ scope: "https://www.googleapis.com/auth/userinfo.profile",
+ },
+ microsoft: {
+ clientId: "",
+ clientSecret: "",
+ redirectUri: "",
+ authUrl:
+ "https://login.microsoftonline.com/common/oauth2/v2.0/authorize",
+ tokenUrl:
+ "https://login.microsoftonline.com/common/oauth2/v2.0/token",
+ scope: "https://graph.microsoft.com/User.Read",
+ },
+ discord: {
+ clientId: "",
+ clientSecret: "",
+ redirectUri: "",
+ authUrl: "https://discord.com/api/oauth2/authorize",
+ tokenUrl: "https://discord.com/api/oauth2/token",
+ scope: "identify",
+ },
+ twitter: {
+ clientId: "",
+ clientSecret: "",
+ redirectUri: "",
+ authUrl: "https://api.twitter.com/oauth/authorize",
+ tokenUrl: "https://api.twitter.com/oauth/access_token",
+ },
+ github: {
+ clientId: "",
+ clientSecret: "",
+ redirectUri: "",
+ authUrl: "https://github.com/login/oauth/authorize",
+ tokenUrl: "https://github.com/login/oauth/access_token",
+ scope: "user",
+ },
+ facebook: {
+ clientId: "",
+ clientSecret: "",
+ redirectUri: "",
+ authUrl: "https://www.facebook.com/v10.0/dialog/oauth",
+ tokenUrl: "https://graph.facebook.com/v10.0/oauth/access_token",
+ scope: "public_profile",
+ },
+ linkedin: {
+ clientId: "",
+ clientSecret: "",
+ redirectUri: "",
+ authUrl: "https://www.linkedin.com/oauth/v2/authorization",
+ tokenUrl: "https://www.linkedin.com/oauth/v2/accessToken",
+ scope: "r_liteprofile",
+ },
+ spotify: {
+ clientId: "",
+ clientSecret: "",
+ redirectUri: "",
+ authUrl: "https://accounts.spotify.com/authorize",
+ tokenUrl: "https://accounts.spotify.com/api/token",
+ scope: "user-read-private",
+ },
+ };
+ }
- getInfo() {
- return {
- id: 'oauthExtension',
- name: Scratch.translate({ id: 'oauthExtension.name', default: 'OAuth Extension' }),
- blockIconURI: 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI1NiIgaGVpZ2h0PSIyNTYiPgo8cGF0aCBkPSJNMCAwIEMyMi4wMzg1MjY1MiAxOC44MTE1OTg1NiAzNi40NjU3OTMzNCA0MS4wNjM3MzM3NyA0NC4zNTE1NjI1IDY4LjkxMDE1NjI1IEM0NC42OTMxNjQwNiA3MC4wODgzNTkzNyA0NS4wMzQ3NjU2MyA3MS4yNjY1NjI1IDQ1LjM4NjcxODc1IDcyLjQ4MDQ2ODc1IEM1MS41OTA5Mjc1NSA5OC43NDAxNDMyMiA0OC4xMTkzNTU5NyAxMjguNDA3NTUzODkgMzcuMzUxNTYyNSAxNTIuOTEwMTU2MjUgQzM2LjkyNjY1NTI3IDE1My44OTE0NTUwOCAzNi45MjY2NTUyNyAxNTMuODkxNDU1MDggMzYuNDkzMTY0MDYgMTU0Ljg5MjU3ODEyIEMyNi41NTAxNTk0MyAxNzcuNDE1NDA2MzEgOS4zNjgzODI4MiAxOTcuMDgzNzE0NDMgLTExLjY0ODQzNzUgMjA5LjkxMDE1NjI1IEMtMTIuNzIwOTM3NSAyMTAuNTkzMzU5MzggLTEzLjc5MzQzNzUgMjExLjI3NjU2MjUgLTE0Ljg5ODQzNzUgMjExLjk4MDQ2ODc1IEMtNDIuNzU5MjI3OTQgMjI4Ljk0MjAxNDc4IC03OC4yNTA2MTE4OSAyMzMuOTI2NDg1NDUgLTExMC4wMzAyNzM0NCAyMjYuNzQ3MDcwMzEgQy0xMTcuODE5NDE3MjkgMjI0Ljc3NzM2MzU3IC0xMjUuMjk4MDI2MiAyMjIuMTQwMzMxOTUgLTEzMi42NDg0Mzc1IDIxOC45MTAxNTYyNSBDLTEzMy4zMDI2MzY3MiAyMTguNjI2ODg0NzcgLTEzMy45NTY4MzU5NCAyMTguMzQzNjEzMjggLTEzNC42MzA4NTkzOCAyMTguMDUxNzU3ODEgQy0xNjQuNzI1OTMyMzQgMjA0Ljc2NTg4NDE0IC0xODguNDMyNjIzMzkgMTc5LjE4ODU5MzM5IC0yMDAuNTE5NTMxMjUgMTQ4LjcxMzg2NzE5IEMtMjAyLjQ3ODkwMDc3IDE0My41MTUyMTc0MiAtMjA0LjEzNTA4MjUgMTM4LjI1NDE1Mjc0IC0yMDUuNjQ4NDM3NSAxMzIuOTEwMTU2MjUgQy0yMDUuOTkwMDM5MDYgMTMxLjczMTk1MzEyIC0yMDYuMzMxNjQwNjMgMTMwLjU1Mzc1IC0yMDYuNjgzNTkzNzUgMTI5LjMzOTg0Mzc1IEMtMjE0LjIxNzQzOTk4IDk3LjQ1MjQwMTU3IC0yMDcuODM1NTc0NTYgNjEuNDM0NjUxNjEgLTE5MS4wMDc4MTI1IDMzLjYwNTQ2ODc1IEMtMTcyLjcxOTMxMzkzIDQuNTE1NjA4MTggLTE0NS40NzI3MDQ5NSAtMTQuNzk0NDA5MjYgLTExMi42NDg0Mzc1IC0yNC4wODk4NDM3NSBDLTExMS40NzAyMzQzOCAtMjQuNDMxNDQ1MzEgLTExMC4yOTIwMzEyNSAtMjQuNzczMDQ2ODcgLTEwOS4wNzgxMjUgLTI1LjEyNSBDLTcxLjkxMjE2MjA0IC0zMy45MDU5NjkyNyAtMjkuNDM4MzUxODQgLTI0LjE0NjUyMjQyIDAgMCBaIE0tMTU2LjY0ODQzNzUgMzguOTEwMTU2MjUgQy0xNzIuNjc2OTQzNTIgNTguMDg4NzczMjggLTE4MC4zOTY0OTAzOCA4NC41ODg4MzUyMyAtMTc4LjM3MTA5Mzc1IDEwOS4yOTI5Njg3NSBDLTE3NS40NzE3NjMxNSAxMzUuNzQ1OTA4ODUgLTE2Mi45NTU1MTQxMyAxNTkuNTg0NTMzMDggLTE0Mi42NDg0Mzc1IDE3Ni45MTAxNTYyNSBDLTEyNi41NDMxNjcwNSAxODkuNjk5NjM1NzIgLTEwNi4zMjExMTA2MiAxOTguMDkxNzg4ODEgLTg1LjY0ODQzNzUgMTk4LjkxMDE1NjI1IEMtODQuODg5MTc5NjkgMTk4Ljk1MDExNzE5IC04NC4xMjk5MjE4NyAxOTguOTkwMDc4MTIgLTgzLjM0NzY1NjI1IDE5OS4wMzEyNSBDLTU2LjU4MDI3NzA5IDE5OS43NzYwMDUyMyAtMzEuNDM2MTQxNzYgMTg4LjgxNjI3MjU4IC0xMi4wNTQ0NDMzNiAxNzAuNzY1NjI1IEM1LjI3MjM5MDEyIDE1NC4wMTA3MzQ1MiAxNi4zOTQyODMxMyAxMzAuMDkxODY1NjUgMTcuMzUxNTYyNSAxMDUuOTEwMTU2MjUgQzE3LjM5MTUyMzQ0IDEwNS4xNTA4OTg0NCAxNy40MzE0ODQzNyAxMDQuMzkxNjQwNjIgMTcuNDcyNjU2MjUgMTAzLjYwOTM3NSBDMTguMjE3NDExNDggNzYuODQxOTk1ODQgNy4yNTc2Nzg4MyA1MS42OTc4NjA1MSAtMTAuNzkyOTY4NzUgMzIuMzE2MTYyMTEgQy0yNy41NDc4NTkyMyAxNC45ODkzMjg2MyAtNTEuNDY2NzI4MSAzLjg2NzQzNTYyIC03NS42NDg0Mzc1IDIuOTEwMTU2MjUgQy03Ni43ODczMjQyMiAyLjg1MDIxNDg0IC03Ni43ODczMjQyMiAyLjg1MDIxNDg0IC03Ny45NDkyMTg3NSAyLjc4OTA2MjUgQy0xMDguODU5OTYwMDYgMS45MjkwMjU1MSAtMTM2LjI0OTk3Njk4IDE2LjQzMzI0OTk3IC0xNTYuNjQ4NDM3NSAzOC45MTAxNTYyNSBaICIgZmlsbD0iIzlFOUU5RSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjA4LjY0ODQzNzUsMjcuMDg5ODQzNzUpIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuNzc5NDM0NjYgMC4wMDIyMjA2MSAxLjU1ODg2OTMyIDAuMDA0NDQxMjIgMi4zNjE5MjMyMiAwLjAwNjcyOTEzIEMzLjI0Mjc2MDc3IDAuMDA2ODA0NjYgNC4xMjM1OTgzMyAwLjAwNjg4MDE5IDUuMDMxMTI3OTMgMC4wMDY5NTgwMSBDNS45ODg0MTI5MyAwLjAxMjExOTI5IDYuOTQ1Njk3OTQgMC4wMTcyODA1OCA3LjkzMTk5MTU4IDAuMDIyNTk4MjcgQzkuMzk0ODA4MTIgMC4wMjQ3MjA2OSA5LjM5NDgwODEyIDAuMDI0NzIwNjkgMTAuODg3MTc2NTEgMC4wMjY4ODU5OSBDMTQuMDE1NDI2NzUgMC4wMzI1MDMxOSAxNy4xNDM2MDY1NiAwLjA0NTA1ODU5IDIwLjI3MTgzNTMzIDAuMDU3NzU0NTIgQzIyLjM4NzA2ODY3IDAuMDYyNzY3MyAyNC41MDIzMDMxMyAwLjA2NzMzMDU5IDI2LjYxNzUzODQ1IDAuMDcxNDI2MzkgQzMxLjgxNDgyODI5IDAuMDgyNDc4MiAzNy4wMTIwNzY3OCAwLjA5OTIzMzA1IDQyLjIwOTMzNTMzIDAuMTIwMjU0NTIgQzQ0Ljk5MTE0MDUxIDYuMjUxMzU5MTEgNDcuNTc5MTE3NDUgMTIuNDM1MDc1MzMgNTAuMDM3NDYwMzMgMTguNzAyMjg1NzcgQzUwLjM5MDE1OTkxIDE5LjU5NjU0NzcgNTAuNzQyODU5NSAyMC40OTA4MDk2MyA1MS4xMDYyNDY5NSAyMS40MTIxNzA0MSBDNTIuMjI1NzczMjEgMjQuMjUxNjQ4MTQgNTMuMzQyNjgwOCAyNy4wOTIxNDYzOCA1NC40NTkzMzUzMyAyOS45MzI3NTQ1MiBDNTUuNTU3NzAyMTUgMzIuNzIyNDMxMiA1Ni42NTY2Mzk1MiAzNS41MTE4ODE3NCA1Ny43NTYwODgyNiAzOC4zMDExMzIyIEM1OC40ODMyNDk1MSA0MC4xNDY2MDUxNSA1OS4yMDk1NzI4OCA0MS45OTI0MDg0OCA1OS45MzUwNDMzMyA0My44Mzg1NDY3NSBDNjEuNzc4MzM5NjQgNDguNTIyNzUzMjQgNjMuNjQxMjU5NzcgNTMuMTk3NzI3NjUgNjUuNTM5NDEzNDUgNTcuODYwMDAwNjEgQzY1LjkxMTc3MTI0IDU4Ljc3Nzg2ODUgNjYuMjg0MTI5MDMgNTkuNjk1NzM2MzkgNjYuNjY3NzcwMzkgNjAuNjQxNDE4NDYgQzY3LjM3NzQxMTc2IDYyLjM4NzQ1NzM3IDY4LjA5MTI4MzIxIDY0LjEzMTc4NDgzIDY4LjgwOTk4MjMgNjUuODc0MTE0OTkgQzY5LjEyNTc4MjQ3IDY2LjY1MjMyMTAxIDY5LjQ0MTU4MjY0IDY3LjQzMDUyNzA0IDY5Ljc2Njk1MjUxIDY4LjIzMjMxNTA2IEM3MC4wNDY0MTcyNCA2OC45MTMyNzc0NCA3MC4zMjU4ODE5NiA2OS41OTQyMzk4MSA3MC42MTM4MTUzMSA3MC4yOTU4Mzc0IEM3MS4yMDkzMzUzMyA3Mi4xMjAyNTQ1MiA3MS4yMDkzMzUzMyA3Mi4xMjAyNTQ1MiA3MS4yMDkzMzUzMyA3NS4xMjAyNTQ1MiBDNzkuNDU5MzM1MzMgNzUuMTIwMjU0NTIgODcuNzA5MzM1MzMgNzUuMTIwMjU0NTIgOTYuMjA5MzM1MzMgNzUuMTIwMjU0NTIgQzk2LjIwOTMzNTMzIDgwLjA3MDI1NDUyIDk2LjIwOTMzNTMzIDg1LjAyMDI1NDUyIDk2LjIwOTMzNTMzIDkwLjEyMDI1NDUyIEM5MC4yNjkzMzUzMyA5MC4xMjAyNTQ1MiA4NC4zMjkzMzUzMyA5MC4xMjAyNTQ1MiA3OC4yMDkzMzUzMyA5MC4xMjAyNTQ1MiBDNzkuMTk5MzM1MzMgOTMuNTg1MjU0NTIgNzkuMTk5MzM1MzMgOTMuNTg1MjU0NTIgODAuMjA5MzM1MzMgOTcuMTIwMjU0NTIgQzg1LjQ4OTMzNTMzIDk3LjEyMDI1NDUyIDkwLjc2OTMzNTMzIDk3LjEyMDI1NDUyIDk2LjIwOTMzNTMzIDk3LjEyMDI1NDUyIEM5Ni4yMDkzMzUzMyAxMDIuMDcwMjU0NTIgOTYuMjA5MzM1MzMgMTA3LjAyMDI1NDUyIDk2LjIwOTMzNTMzIDExMi4xMjAyNTQ1MiBDOTEuNzU0MzM1MzMgMTEyLjYxNTI1NDUyIDkxLjc1NDMzNTMzIDExMi42MTUyNTQ1MiA4Ny4yMDkzMzUzMyAxMTMuMTIwMjU0NTIgQzg3LjcxNDY0NzgzIDExNC4zODQ4MjQ4MyA4OC4yMTk5NjAzMyAxMTUuNjQ5Mzk1MTQgODguNzQwNTg1MzMgMTE2Ljk1MjI4NTc3IEM4OS4zOTcxMDI1MiAxMTguNjEyMzM2MzcgOTAuMDUzMzM3ODkgMTIwLjI3MjQ5ODQ1IDkwLjcwOTMzNTMzIDEyMS45MzI3NTQ1MiBDOTEuMjEwMTM2MTEgMTIzLjE4MjgyMjg4IDkxLjIxMDEzNjExIDEyMy4xODI4MjI4OCA5MS43MjEwNTQwOCAxMjQuNDU4MTQ1MTQgQzkyLjE5NDc4NDU1IDEyNS42NjE4MDcyNSA5Mi4xOTQ3ODQ1NSAxMjUuNjYxODA3MjUgOTIuNjc4MDg1MzMgMTI2Ljg4OTc4NTc3IEM5Mi45NzEzNDcwNSAxMjcuNjI4MTc2ODggOTMuMjY0NjA4NzYgMTI4LjM2NjU2Nzk5IDkzLjU2Njc1NzIgMTI5LjEyNzMzNDU5IEM5NC4yMDkzMzUzMyAxMzEuMTIwMjU0NTIgOTQuMjA5MzM1MzMgMTMxLjEyMDI1NDUyIDk0LjIwOTMzNTMzIDEzNC4xMjAyNTQ1MiBDODEuOTk5MzM1MzMgMTM0LjEyMDI1NDUyIDY5Ljc4OTMzNTMzIDEzNC4xMjAyNTQ1MiA1Ny4yMDkzMzUzMyAxMzQuMTIwMjU0NTIgQzUyLjIwOTMzNTMzIDEyMi4xMjAyNTQ1MiA1Mi4yMDkzMzUzMyAxMjIuMTIwMjU0NTIgNDkuMjA5MzM1MzMgMTEyLjEyMDI1NDUyIEMzMC4wNjkzMzUzMyAxMTIuMTIwMjU0NTIgMTAuOTI5MzM1MzMgMTEyLjEyMDI1NDUyIC04Ljc5MDY2NDY3IDExMi4xMjAyNTQ1MiBDLTkuNzgwNjY0NjcgMTE1LjQyMDI1NDUyIC0xMC43NzA2NjQ2NyAxMTguNzIwMjU0NTIgLTExLjc5MDY2NDY3IDEyMi4xMjAyNTQ1MiBDLTEzLjQ0MDY2NDY3IDEyNi4wODAyNTQ1MiAtMTUuMDkwNjY0NjcgMTMwLjA0MDI1NDUyIC0xNi43OTA2NjQ2NyAxMzQuMTIwMjU0NTIgQy0yOS4wMDA2NjQ2NyAxMzQuMTIwMjU0NTIgLTQxLjIxMDY2NDY3IDEzNC4xMjAyNTQ1MiAtNTMuNzkwNjY0NjcgMTM0LjEyMDI1NDUyIEMtNTMuMTI2NDQxNjkgMTMwLjc5OTEzOTYgLTUyLjU1MzU4NjExIDEyOC4yMDE5NDI1MyAtNTEuMzgwNTA4NDIgMTI1LjEzMTk3MzI3IEMtNTAuOTc5Mjg3NzIgMTI0LjA3MzMzMDY5IC01MC45NzkyODc3MiAxMjQuMDczMzMwNjkgLTUwLjU2OTk2MTU1IDEyMi45OTMzMDEzOSBDLTUwLjI5MjE2ODU4IDEyMi4yNzIwNzA5MiAtNTAuMDE0Mzc1NjEgMTIxLjU1MDg0MDQ1IC00OS43MjgxNjQ2NyAxMjAuODA3NzU0NTIgQy00OS4zMDU2NzQ0NCAxMTkuNjk2OTA0OTEgLTQ5LjMwNTY3NDQ0IDExOS42OTY5MDQ5MSAtNDguODc0NjQ5MDUgMTE4LjU2MzYxMzg5IEMtNDguMTgzNDc4OTIgMTE2Ljc0NzgyNzk2IC00Ny40ODc1NDc3OSAxMTQuOTMzODU1NTIgLTQ2Ljc5MDY2NDY3IDExMy4xMjAyNTQ1MiBDLTQ5Ljc2MDY2NDY3IDExMi43OTAyNTQ1MiAtNTIuNzMwNjY0NjcgMTEyLjQ2MDI1NDUyIC01NS43OTA2NjQ2NyAxMTIuMTIwMjU0NTIgQy01NS43OTA2NjQ2NyAxMDcuMTcwMjU0NTIgLTU1Ljc5MDY2NDY3IDEwMi4yMjAyNTQ1MiAtNTUuNzkwNjY0NjcgOTcuMTIwMjU0NTIgQy01MC41MTA2NjQ2NyA5Ny4xMjAyNTQ1MiAtNDUuMjMwNjY0NjcgOTcuMTIwMjU0NTIgLTM5Ljc5MDY2NDY3IDk3LjEyMDI1NDUyIEMtMzkuMTMwNjY0NjcgOTQuODEwMjU0NTIgLTM4LjQ3MDY2NDY3IDkyLjUwMDI1NDUyIC0zNy43OTA2NjQ2NyA5MC4xMjAyNTQ1MiBDLTQzLjczMDY2NDY3IDkwLjEyMDI1NDUyIC00OS42NzA2NjQ2NyA5MC4xMjAyNTQ1MiAtNTUuNzkwNjY0NjcgOTAuMTIwMjU0NTIgQy01NS43OTA2NjQ2NyA4NS4xNzAyNTQ1MiAtNTUuNzkwNjY0NjcgODAuMjIwMjU0NTIgLTU1Ljc5MDY2NDY3IDc1LjEyMDI1NDUyIEMtNDcuNTQwNjY0NjcgNzUuMTIwMjU0NTIgLTM5LjI5MDY2NDY3IDc1LjEyMDI1NDUyIC0zMC43OTA2NjQ2NyA3NS4xMjAyNTQ1MiBDLTMwLjQ2MDY2NDY3IDczLjQ3MDI1NDUyIC0zMC4xMzA2NjQ2NyA3MS44MjAyNTQ1MiAtMjkuNzkwNjY0NjcgNzAuMTIwMjU0NTIgQy0yOS4zNTY1NzU4MyA2OC44MTI0MDQ1NiAtMjguODg3MjM5MjEgNjcuNTE1NzA5OTggLTI4LjM4Mjk0OTgzIDY2LjIzMzI5MTYzIEMtMjcuOTU1MjcwNjEgNjUuMTM2NzU1MTQgLTI3Ljk1NTI3MDYxIDY1LjEzNjc1NTE0IC0yNy41MTg5NTE0MiA2NC4wMTgwNjY0MSBDLTI3LjIwOTAwNzQyIDYzLjIzNTgxMTkyIC0yNi44OTkwNjM0MiA2Mi40NTM1NTc0MyAtMjYuNTc5NzI3MTcgNjEuNjQ3NTk4MjcgQy0yNi4wOTMyMzk1MiA2MC40MDUyNzE4NCAtMjYuMDkzMjM5NTIgNjAuNDA1MjcxODQgLTI1LjU5NjkyMzgzIDU5LjEzNzg0NzkgQy0yNC41NDA0OTM5NyA1Ni40NDI4OTc0OSAtMjMuNDc4MjE0MDQgNTMuNzUwMjk3MzYgLTIyLjQxNTY2NDY3IDUxLjA1Nzc1NDUyIEMtMjEuNjg4NjgwNTUgNDkuMjA3NjI3NzYgLTIwLjk2MjAzODM5IDQ3LjM1NzM2NjU5IC0yMC4yMzU3MzMwMyA0NS41MDY5NzMyNyBDLTE4Ljc3OTY4MzY3IDQxLjc5ODk3MzEgLTE3LjMyMTM4MjQ0IDM4LjA5MTg3MDIyIC0xNS44NjE0NjU0NSAzNC4zODUzOTEyNCBDLTE0LjAwMzg3MjU1IDI5LjY2NjY4MzE1IC0xMi4xNTg0NzMxNyAyNC45NDMzMjA2NSAtMTAuMzE4MDA4NDIgMjAuMjE3OTEwNzcgQy05LjgwNjIzMTMyIDE4LjkwNjEwMjQ1IC05LjI5NDM1Mzc3IDE3LjU5NDMzMzMyIC04Ljc4MjM2Mzg5IDE2LjI4MjYwODAzIEMtNy44NDYzMDQ5OSAxMy44ODM5MzcxMSAtNi45MTE2ODAwOCAxMS40ODQ3MDU5NyAtNS45Nzg2NTI5NSA5LjA4NDg1NDEzIEMtNS41NjcyODA4OCA4LjAzNDM0ODc1IC01LjE1NTkwODgxIDYuOTgzODQzMzggLTQuNzMyMDcwOTIgNS45MDE1MDQ1MiBDLTQuMzc4MzAzODMgNC45OTQ2NDkwNSAtNC4wMjQ1MzY3NCA0LjA4Nzc5MzU4IC0zLjY2MDA0OTQ0IDMuMTUzNDU3NjQgQy0yLjM3OTk5Mzk4IDAuMTU5ODMxNzMgLTIuMzc5OTkzOTggMC4xNTk4MzE3MyAwIDAgWiBNMjAuMjA5MzM1MzMgMzQuMTIwMjU0NTIgQzE2LjgxMTU1MDQyIDQxLjQ0MTY3MiAxMy45NzAzMDk5MyA0OC45Mjk2MjIxMiAxMS4yMDc4NzA0OCA1Ni41MDY3MjkxMyBDMTAuNDUxMzgyMzUgNTguNTc5NTQ2MDkgOS42ODgwNjYyNSA2MC42NDk3NjM3OSA4LjkyNDE3OTA4IDYyLjcxOTg2Mzg5IEM4LjQ0MDY5OTkyIDY0LjAzOTM3NjU3IDcuOTU3NjEyMjcgNjUuMzU5MDMyNzggNy40NzQ5NjAzMyA2Ni42Nzg4NDgyNyBDNy4wMzk1Nzk0NyA2Ny44Njc5Mjc4NiA2LjYwNDE5ODYxIDY5LjA1NzAwNzQ1IDYuMTU1NjI0MzkgNzAuMjgyMTE5NzUgQzUuMTAzOTAxNTkgNzIuOTM3ODUxOCA1LjEwMzkwMTU5IDcyLjkzNzg1MTggNS4yMDkzMzUzMyA3NS4xMjAyNTQ1MiBDMTUuMTA5MzM1MzMgNzUuMTIwMjU0NTIgMjUuMDA5MzM1MzMgNzUuMTIwMjU0NTIgMzUuMjA5MzM1MzMgNzUuMTIwMjU0NTIgQzMzLjQxMTgzNzk3IDY5LjEyODU5NjY3IDMxLjYyMDI3MzkyIDYzLjIzNDQ4Mzc4IDI5LjUxMDExNjU4IDU3LjM2MjQ0MjAyIEMyOS4yNzAyMDQ5MyA1Ni42ODg1MTQxIDI5LjAzMDI5MzI3IDU2LjAxNDU4NjE4IDI4Ljc4MzExMTU3IDU1LjMyMDIzNjIxIEMyOC4wMzE2Nzg1NiA1My4yMTEwNzA1NyAyNy4yNzY4MzI1IDUxLjEwMzE0NjU4IDI2LjUyMTgzNTMzIDQ4Ljk5NTI1NDUyIEMyNi4wMDUzMzA1NCA0Ny41NDc0MTk0MyAyNS40ODkwNTI4MSA0Ni4wOTk1MDMzMyAyNC45NzMwMDcyIDQ0LjY1MTUwNDUyIEMyMy43MjEwNjM0NyA0MS4xNDAxNTA4OCAyMi40NjYwNjAxOSAzNy42Mjk5MDAyNSAyMS4yMDkzMzUzMyAzNC4xMjAyNTQ1MiBDMjAuODc5MzM1MzMgMzQuMTIwMjU0NTIgMjAuNTQ5MzM1MzMgMzQuMTIwMjU0NTIgMjAuMjA5MzM1MzMgMzQuMTIwMjU0NTIgWiBNLTAuNzkwNjY0NjcgOTAuMTIwMjU0NTIgQy0xLjQ1MDY2NDY3IDkyLjQzMDI1NDUyIC0yLjExMDY2NDY3IDk0Ljc0MDI1NDUyIC0yLjc5MDY2NDY3IDk3LjEyMDI1NDUyIEMxMi4zODkzMzUzMyA5Ny4xMjAyNTQ1MiAyNy41NjkzMzUzMyA5Ny4xMjAyNTQ1MiA0My4yMDkzMzUzMyA5Ny4xMjAyNTQ1MiBDNDIuNTQ5MzM1MzMgOTQuODEwMjU0NTIgNDEuODg5MzM1MzMgOTIuNTAwMjU0NTIgNDEuMjA5MzM1MzMgOTAuMTIwMjU0NTIgQzI3LjM0OTMzNTMzIDkwLjEyMDI1NDUyIDEzLjQ4OTMzNTMzIDkwLjEyMDI1NDUyIC0wLjc5MDY2NDY3IDkwLjEyMDI1NDUyIFogIiBmaWxsPSIjOUU5RTlFIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMDcuNzkwNjY0NjcyODUxNTYsNDUuODc5NzQ1NDgzMzk4NDQpIi8+Cjwvc3ZnPgo=',
- menuIconURI: 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI1NiIgaGVpZ2h0PSIyNTYiPgo8cGF0aCBkPSJNMCAwIEMyMi4wMzg1MjY1MiAxOC44MTE1OTg1NiAzNi40NjU3OTMzNCA0MS4wNjM3MzM3NyA0NC4zNTE1NjI1IDY4LjkxMDE1NjI1IEM0NC42OTMxNjQwNiA3MC4wODgzNTkzNyA0NS4wMzQ3NjU2MyA3MS4yNjY1NjI1IDQ1LjM4NjcxODc1IDcyLjQ4MDQ2ODc1IEM1MS41OTA5Mjc1NSA5OC43NDAxNDMyMiA0OC4xMTkzNTU5NyAxMjguNDA3NTUzODkgMzcuMzUxNTYyNSAxNTIuOTEwMTU2MjUgQzM2LjkyNjY1NTI3IDE1My44OTE0NTUwOCAzNi45MjY2NTUyNyAxNTMuODkxNDU1MDggMzYuNDkzMTY0MDYgMTU0Ljg5MjU3ODEyIEMyNi41NTAxNTk0MyAxNzcuNDE1NDA2MzEgOS4zNjgzODI4MiAxOTcuMDgzNzE0NDMgLTExLjY0ODQzNzUgMjA5LjkxMDE1NjI1IEMtMTIuNzIwOTM3NSAyMTAuNTkzMzU5MzggLTEzLjc5MzQzNzUgMjExLjI3NjU2MjUgLTE0Ljg5ODQzNzUgMjExLjk4MDQ2ODc1IEMtNDIuNzU5MjI3OTQgMjI4Ljk0MjAxNDc4IC03OC4yNTA2MTE4OSAyMzMuOTI2NDg1NDUgLTExMC4wMzAyNzM0NCAyMjYuNzQ3MDcwMzEgQy0xMTcuODE5NDE3MjkgMjI0Ljc3NzM2MzU3IC0xMjUuMjk4MDI2MiAyMjIuMTQwMzMxOTUgLTEzMi42NDg0Mzc1IDIxOC45MTAxNTYyNSBDLTEzMy4zMDI2MzY3MiAyMTguNjI2ODg0NzcgLTEzMy45NTY4MzU5NCAyMTguMzQzNjEzMjggLTEzNC42MzA4NTkzOCAyMTguMDUxNzU3ODEgQy0xNjQuNzI1OTMyMzQgMjA0Ljc2NTg4NDE0IC0xODguNDMyNjIzMzkgMTc5LjE4ODU5MzM5IC0yMDAuNTE5NTMxMjUgMTQ4LjcxMzg2NzE5IEMtMjAyLjQ3ODkwMDc3IDE0My41MTUyMTc0MiAtMjA0LjEzNTA4MjUgMTM4LjI1NDE1Mjc0IC0yMDUuNjQ4NDM3NSAxMzIuOTEwMTU2MjUgQy0yMDUuOTkwMDM5MDYgMTMxLjczMTk1MzEyIC0yMDYuMzMxNjQwNjMgMTMwLjU1Mzc1IC0yMDYuNjgzNTkzNzUgMTI5LjMzOTg0Mzc1IEMtMjE0LjIxNzQzOTk4IDk3LjQ1MjQwMTU3IC0yMDcuODM1NTc0NTYgNjEuNDM0NjUxNjEgLTE5MS4wMDc4MTI1IDMzLjYwNTQ2ODc1IEMtMTcyLjcxOTMxMzkzIDQuNTE1NjA4MTggLTE0NS40NzI3MDQ5NSAtMTQuNzk0NDA5MjYgLTExMi42NDg0Mzc1IC0yNC4wODk4NDM3NSBDLTExMS40NzAyMzQzOCAtMjQuNDMxNDQ1MzEgLTExMC4yOTIwMzEyNSAtMjQuNzczMDQ2ODcgLTEwOS4wNzgxMjUgLTI1LjEyNSBDLTcxLjkxMjE2MjA0IC0zMy45MDU5NjkyNyAtMjkuNDM4MzUxODQgLTI0LjE0NjUyMjQyIDAgMCBaIE0tMTU2LjY0ODQzNzUgMzguOTEwMTU2MjUgQy0xNzIuNjc2OTQzNTIgNTguMDg4NzczMjggLTE4MC4zOTY0OTAzOCA4NC41ODg4MzUyMyAtMTc4LjM3MTA5Mzc1IDEwOS4yOTI5Njg3NSBDLTE3NS40NzE3NjMxNSAxMzUuNzQ1OTA4ODUgLTE2Mi45NTU1MTQxMyAxNTkuNTg0NTMzMDggLTE0Mi42NDg0Mzc1IDE3Ni45MTAxNTYyNSBDLTEyNi41NDMxNjcwNSAxODkuNjk5NjM1NzIgLTEwNi4zMjExMTA2MiAxOTguMDkxNzg4ODEgLTg1LjY0ODQzNzUgMTk4LjkxMDE1NjI1IEMtODQuODg5MTc5NjkgMTk4Ljk1MDExNzE5IC04NC4xMjk5MjE4NyAxOTguOTkwMDc4MTIgLTgzLjM0NzY1NjI1IDE5OS4wMzEyNSBDLTU2LjU4MDI3NzA5IDE5OS43NzYwMDUyMyAtMzEuNDM2MTQxNzYgMTg4LjgxNjI3MjU4IC0xMi4wNTQ0NDMzNiAxNzAuNzY1NjI1IEM1LjI3MjM5MDEyIDE1NC4wMTA3MzQ1MiAxNi4zOTQyODMxMyAxMzAuMDkxODY1NjUgMTcuMzUxNTYyNSAxMDUuOTEwMTU2MjUgQzE3LjM5MTUyMzQ0IDEwNS4xNTA4OTg0NCAxNy40MzE0ODQzNyAxMDQuMzkxNjQwNjIgMTcuNDcyNjU2MjUgMTAzLjYwOTM3NSBDMTguMjE3NDExNDggNzYuODQxOTk1ODQgNy4yNTc2Nzg4MyA1MS42OTc4NjA1MSAtMTAuNzkyOTY4NzUgMzIuMzE2MTYyMTEgQy0yNy41NDc4NTkyMyAxNC45ODkzMjg2MyAtNTEuNDY2NzI4MSAzLjg2NzQzNTYyIC03NS42NDg0Mzc1IDIuOTEwMTU2MjUgQy03Ni43ODczMjQyMiAyLjg1MDIxNDg0IC03Ni43ODczMjQyMiAyLjg1MDIxNDg0IC03Ny45NDkyMTg3NSAyLjc4OTA2MjUgQy0xMDguODU5OTYwMDYgMS45MjkwMjU1MSAtMTM2LjI0OTk3Njk4IDE2LjQzMzI0OTk3IC0xNTYuNjQ4NDM3NSAzOC45MTAxNTYyNSBaICIgZmlsbD0iIzlFOUU5RSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjA4LjY0ODQzNzUsMjcuMDg5ODQzNzUpIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuNzc5NDM0NjYgMC4wMDIyMjA2MSAxLjU1ODg2OTMyIDAuMDA0NDQxMjIgMi4zNjE5MjMyMiAwLjAwNjcyOTEzIEMzLjI0Mjc2MDc3IDAuMDA2ODA0NjYgNC4xMjM1OTgzMyAwLjAwNjg4MDE5IDUuMDMxMTI3OTMgMC4wMDY5NTgwMSBDNS45ODg0MTI5MyAwLjAxMjExOTI5IDYuOTQ1Njk3OTQgMC4wMTcyODA1OCA3LjkzMTk5MTU4IDAuMDIyNTk4MjcgQzkuMzk0ODA4MTIgMC4wMjQ3MjA2OSA5LjM5NDgwODEyIDAuMDI0NzIwNjkgMTAuODg3MTc2NTEgMC4wMjY4ODU5OSBDMTQuMDE1NDI2NzUgMC4wMzI1MDMxOSAxNy4xNDM2MDY1NiAwLjA0NTA1ODU5IDIwLjI3MTgzNTMzIDAuMDU3NzU0NTIgQzIyLjM4NzA2ODY3IDAuMDYyNzY3MyAyNC41MDIzMDMxMyAwLjA2NzMzMDU5IDI2LjYxNzUzODQ1IDAuMDcxNDI2MzkgQzMxLjgxNDgyODI5IDAuMDgyNDc4MiAzNy4wMTIwNzY3OCAwLjA5OTIzMzA1IDQyLjIwOTMzNTMzIDAuMTIwMjU0NTIgQzQ0Ljk5MTE0MDUxIDYuMjUxMzU5MTEgNDcuNTc5MTE3NDUgMTIuNDM1MDc1MzMgNTAuMDM3NDYwMzMgMTguNzAyMjg1NzcgQzUwLjM5MDE1OTkxIDE5LjU5NjU0NzcgNTAuNzQyODU5NSAyMC40OTA4MDk2MyA1MS4xMDYyNDY5NSAyMS40MTIxNzA0MSBDNTIuMjI1NzczMjEgMjQuMjUxNjQ4MTQgNTMuMzQyNjgwOCAyNy4wOTIxNDYzOCA1NC40NTkzMzUzMyAyOS45MzI3NTQ1MiBDNTUuNTU3NzAyMTUgMzIuNzIyNDMxMiA1Ni42NTY2Mzk1MiAzNS41MTE4ODE3NCA1Ny43NTYwODgyNiAzOC4zMDExMzIyIEM1OC40ODMyNDk1MSA0MC4xNDY2MDUxNSA1OS4yMDk1NzI4OCA0MS45OTI0MDg0OCA1OS45MzUwNDMzMyA0My44Mzg1NDY3NSBDNjEuNzc4MzM5NjQgNDguNTIyNzUzMjQgNjMuNjQxMjU5NzcgNTMuMTk3NzI3NjUgNjUuNTM5NDEzNDUgNTcuODYwMDAwNjEgQzY1LjkxMTc3MTI0IDU4Ljc3Nzg2ODUgNjYuMjg0MTI5MDMgNTkuNjk1NzM2MzkgNjYuNjY3NzcwMzkgNjAuNjQxNDE4NDYgQzY3LjM3NzQxMTc2IDYyLjM4NzQ1NzM3IDY4LjA5MTI4MzIxIDY0LjEzMTc4NDgzIDY4LjgwOTk4MjMgNjUuODc0MTE0OTkgQzY5LjEyNTc4MjQ3IDY2LjY1MjMyMTAxIDY5LjQ0MTU4MjY0IDY3LjQzMDUyNzA0IDY5Ljc2Njk1MjUxIDY4LjIzMjMxNTA2IEM3MC4wNDY0MTcyNCA2OC45MTMyNzc0NCA3MC4zMjU4ODE5NiA2OS41OTQyMzk4MSA3MC42MTM4MTUzMSA3MC4yOTU4Mzc0IEM3MS4yMDkzMzUzMyA3Mi4xMjAyNTQ1MiA3MS4yMDkzMzUzMyA3Mi4xMjAyNTQ1MiA3MS4yMDkzMzUzMyA3NS4xMjAyNTQ1MiBDNzkuNDU5MzM1MzMgNzUuMTIwMjU0NTIgODcuNzA5MzM1MzMgNzUuMTIwMjU0NTIgOTYuMjA5MzM1MzMgNzUuMTIwMjU0NTIgQzk2LjIwOTMzNTMzIDgwLjA3MDI1NDUyIDk2LjIwOTMzNTMzIDg1LjAyMDI1NDUyIDk2LjIwOTMzNTMzIDkwLjEyMDI1NDUyIEM5MC4yNjkzMzUzMyA5MC4xMjAyNTQ1MiA4NC4zMjkzMzUzMyA5MC4xMjAyNTQ1MiA3OC4yMDkzMzUzMyA5MC4xMjAyNTQ1MiBDNzkuMTk5MzM1MzMgOTMuNTg1MjU0NTIgNzkuMTk5MzM1MzMgOTMuNTg1MjU0NTIgODAuMjA5MzM1MzMgOTcuMTIwMjU0NTIgQzg1LjQ4OTMzNTMzIDk3LjEyMDI1NDUyIDkwLjc2OTMzNTMzIDk3LjEyMDI1NDUyIDk2LjIwOTMzNTMzIDk3LjEyMDI1NDUyIEM5Ni4yMDkzMzUzMyAxMDIuMDcwMjU0NTIgOTYuMjA5MzM1MzMgMTA3LjAyMDI1NDUyIDk2LjIwOTMzNTMzIDExMi4xMjAyNTQ1MiBDOTEuNzU0MzM1MzMgMTEyLjYxNTI1NDUyIDkxLjc1NDMzNTMzIDExMi42MTUyNTQ1MiA4Ny4yMDkzMzUzMyAxMTMuMTIwMjU0NTIgQzg3LjcxNDY0NzgzIDExNC4zODQ4MjQ4MyA4OC4yMTk5NjAzMyAxMTUuNjQ5Mzk1MTQgODguNzQwNTg1MzMgMTE2Ljk1MjI4NTc3IEM4OS4zOTcxMDI1MiAxMTguNjEyMzM2MzcgOTAuMDUzMzM3ODkgMTIwLjI3MjQ5ODQ1IDkwLjcwOTMzNTMzIDEyMS45MzI3NTQ1MiBDOTEuMjEwMTM2MTEgMTIzLjE4MjgyMjg4IDkxLjIxMDEzNjExIDEyMy4xODI4MjI4OCA5MS43MjEwNTQwOCAxMjQuNDU4MTQ1MTQgQzkyLjE5NDc4NDU1IDEyNS42NjE4MDcyNSA5Mi4xOTQ3ODQ1NSAxMjUuNjYxODA3MjUgOTIuNjc4MDg1MzMgMTI2Ljg4OTc4NTc3IEM5Mi45NzEzNDcwNSAxMjcuNjI4MTc2ODggOTMuMjY0NjA4NzYgMTI4LjM2NjU2Nzk5IDkzLjU2Njc1NzIgMTI5LjEyNzMzNDU5IEM5NC4yMDkzMzUzMyAxMzEuMTIwMjU0NTIgOTQuMjA5MzM1MzMgMTMxLjEyMDI1NDUyIDk0LjIwOTMzNTMzIDEzNC4xMjAyNTQ1MiBDODEuOTk5MzM1MzMgMTM0LjEyMDI1NDUyIDY5Ljc4OTMzNTMzIDEzNC4xMjAyNTQ1MiA1Ny4yMDkzMzUzMyAxMzQuMTIwMjU0NTIgQzUyLjIwOTMzNTMzIDEyMi4xMjAyNTQ1MiA1Mi4yMDkzMzUzMyAxMjIuMTIwMjU0NTIgNDkuMjA5MzM1MzMgMTEyLjEyMDI1NDUyIEMzMC4wNjkzMzUzMyAxMTIuMTIwMjU0NTIgMTAuOTI5MzM1MzMgMTEyLjEyMDI1NDUyIC04Ljc5MDY2NDY3IDExMi4xMjAyNTQ1MiBDLTkuNzgwNjY0NjcgMTE1LjQyMDI1NDUyIC0xMC43NzA2NjQ2NyAxMTguNzIwMjU0NTIgLTExLjc5MDY2NDY3IDEyMi4xMjAyNTQ1MiBDLTEzLjQ0MDY2NDY3IDEyNi4wODAyNTQ1MiAtMTUuMDkwNjY0NjcgMTMwLjA0MDI1NDUyIC0xNi43OTA2NjQ2NyAxMzQuMTIwMjU0NTIgQy0yOS4wMDA2NjQ2NyAxMzQuMTIwMjU0NTIgLTQxLjIxMDY2NDY3IDEzNC4xMjAyNTQ1MiAtNTMuNzkwNjY0NjcgMTM0LjEyMDI1NDUyIEMtNTMuMTI2NDQxNjkgMTMwLjc5OTEzOTYgLTUyLjU1MzU4NjExIDEyOC4yMDE5NDI1MyAtNTEuMzgwNTA4NDIgMTI1LjEzMTk3MzI3IEMtNTAuOTc5Mjg3NzIgMTI0LjA3MzMzMDY5IC01MC45NzkyODc3MiAxMjQuMDczMzMwNjkgLTUwLjU2OTk2MTU1IDEyMi45OTMzMDEzOSBDLTUwLjI5MjE2ODU4IDEyMi4yNzIwNzA5MiAtNTAuMDE0Mzc1NjEgMTIxLjU1MDg0MDQ1IC00OS43MjgxNjQ2NyAxMjAuODA3NzU0NTIgQy00OS4zMDU2NzQ0NCAxMTkuNjk2OTA0OTEgLTQ5LjMwNTY3NDQ0IDExOS42OTY5MDQ5MSAtNDguODc0NjQ5MDUgMTE4LjU2MzYxMzg5IEMtNDguMTgzNDc4OTIgMTE2Ljc0NzgyNzk2IC00Ny40ODc1NDc3OSAxMTQuOTMzODU1NTIgLTQ2Ljc5MDY2NDY3IDExMy4xMjAyNTQ1MiBDLTQ5Ljc2MDY2NDY3IDExMi43OTAyNTQ1MiAtNTIuNzMwNjY0NjcgMTEyLjQ2MDI1NDUyIC01NS43OTA2NjQ2NyAxMTIuMTIwMjU0NTIgQy01NS43OTA2NjQ2NyAxMDcuMTcwMjU0NTIgLTU1Ljc5MDY2NDY3IDEwMi4yMjAyNTQ1MiAtNTUuNzkwNjY0NjcgOTcuMTIwMjU0NTIgQy01MC41MTA2NjQ2NyA5Ny4xMjAyNTQ1MiAtNDUuMjMwNjY0NjcgOTcuMTIwMjU0NTIgLTM5Ljc5MDY2NDY3IDk3LjEyMDI1NDUyIEMtMzkuMTMwNjY0NjcgOTQuODEwMjU0NTIgLTM4LjQ3MDY2NDY3IDkyLjUwMDI1NDUyIC0zNy43OTA2NjQ2NyA5MC4xMjAyNTQ1MiBDLTQzLjczMDY2NDY3IDkwLjEyMDI1NDUyIC00OS42NzA2NjQ2NyA5MC4xMjAyNTQ1MiAtNTUuNzkwNjY0NjcgOTAuMTIwMjU0NTIgQy01NS43OTA2NjQ2NyA4NS4xNzAyNTQ1MiAtNTUuNzkwNjY0NjcgODAuMjIwMjU0NTIgLTU1Ljc5MDY2NDY3IDc1LjEyMDI1NDUyIEMtNDcuNTQwNjY0NjcgNzUuMTIwMjU0NTIgLTM5LjI5MDY2NDY3IDc1LjEyMDI1NDUyIC0zMC43OTA2NjQ2NyA3NS4xMjAyNTQ1MiBDLTMwLjQ2MDY2NDY3IDczLjQ3MDI1NDUyIC0zMC4xMzA2NjQ2NyA3MS44MjAyNTQ1MiAtMjkuNzkwNjY0NjcgNzAuMTIwMjU0NTIgQy0yOS4zNTY1NzU4MyA2OC44MTI0MDQ1NiAtMjguODg3MjM5MjEgNjcuNTE1NzA5OTggLTI4LjM4Mjk0OTgzIDY2LjIzMzI5MTYzIEMtMjcuOTU1MjcwNjEgNjUuMTM2NzU1MTQgLTI3Ljk1NTI3MDYxIDY1LjEzNjc1NTE0IC0yNy41MTg5NTE0MiA2NC4wMTgwNjY0MSBDLTI3LjIwOTAwNzQyIDYzLjIzNTgxMTkyIC0yNi44OTkwNjM0MiA2Mi40NTM1NTc0MyAtMjYuNTc5NzI3MTcgNjEuNjQ3NTk4MjcgQy0yNi4wOTMyMzk1MiA2MC40MDUyNzE4NCAtMjYuMDkzMjM5NTIgNjAuNDA1MjcxODQgLTI1LjU5NjkyMzgzIDU5LjEzNzg0NzkgQy0yNC41NDA0OTM5NyA1Ni40NDI4OTc0OSAtMjMuNDc4MjE0MDQgNTMuNzUwMjk3MzYgLTIyLjQxNTY2NDY3IDUxLjA1Nzc1NDUyIEMtMjEuNjg4NjgwNTUgNDkuMjA3NjI3NzYgLTIwLjk2MjAzODM5IDQ3LjM1NzM2NjU5IC0yMC4yMzU3MzMwMyA0NS41MDY5NzMyNyBDLTE4Ljc3OTY4MzY3IDQxLjc5ODk3MzEgLTE3LjMyMTM4MjQ0IDM4LjA5MTg3MDIyIC0xNS44NjE0NjU0NSAzNC4zODUzOTEyNCBDLTE0LjAwMzg3MjU1IDI5LjY2NjY4MzE1IC0xMi4xNTg0NzMxNyAyNC45NDMzMjA2NSAtMTAuMzE4MDA4NDIgMjAuMjE3OTEwNzcgQy05LjgwNjIzMTMyIDE4LjkwNjEwMjQ1IC05LjI5NDM1Mzc3IDE3LjU5NDMzMzMyIC04Ljc4MjM2Mzg5IDE2LjI4MjYwODAzIEMtNy44NDYzMDQ5OSAxMy44ODM5MzcxMSAtNi45MTE2ODAwOCAxMS40ODQ3MDU5NyAtNS45Nzg2NTI5NSA5LjA4NDg1NDEzIEMtNS41NjcyODA4OCA4LjAzNDM0ODc1IC01LjE1NTkwODgxIDYuOTgzODQzMzggLTQuNzMyMDcwOTIgNS45MDE1MDQ1MiBDLTQuMzc4MzAzODMgNC45OTQ2NDkwNSAtNC4wMjQ1MzY3NCA0LjA4Nzc5MzU4IC0zLjY2MDA0OTQ0IDMuMTUzNDU3NjQgQy0yLjM3OTk5Mzk4IDAuMTU5ODMxNzMgLTIuMzc5OTkzOTggMC4xNTk4MzE3MyAwIDAgWiBNMjAuMjA5MzM1MzMgMzQuMTIwMjU0NTIgQzE2LjgxMTU1MDQyIDQxLjQ0MTY3MiAxMy45NzAzMDk5MyA0OC45Mjk2MjIxMiAxMS4yMDc4NzA0OCA1Ni41MDY3MjkxMyBDMTAuNDUxMzgyMzUgNTguNTc5NTQ2MDkgOS42ODgwNjYyNSA2MC42NDk3NjM3OSA4LjkyNDE3OTA4IDYyLjcxOTg2Mzg5IEM4LjQ0MDY5OTkyIDY0LjAzOTM3NjU3IDcuOTU3NjEyMjcgNjUuMzU5MDMyNzggNy40NzQ5NjAzMyA2Ni42Nzg4NDgyNyBDNy4wMzk1Nzk0NyA2Ny44Njc5Mjc4NiA2LjYwNDE5ODYxIDY5LjA1NzAwNzQ1IDYuMTU1NjI0MzkgNzAuMjgyMTE5NzUgQzUuMTAzOTAxNTkgNzIuOTM3ODUxOCA1LjEwMzkwMTU5IDcyLjkzNzg1MTggNS4yMDkzMzUzMyA3NS4xMjAyNTQ1MiBDMTUuMTA5MzM1MzMgNzUuMTIwMjU0NTIgMjUuMDA5MzM1MzMgNzUuMTIwMjU0NTIgMzUuMjA5MzM1MzMgNzUuMTIwMjU0NTIgQzMzLjQxMTgzNzk3IDY5LjEyODU5NjY3IDMxLjYyMDI3MzkyIDYzLjIzNDQ4Mzc4IDI5LjUxMDExNjU4IDU3LjM2MjQ0MjAyIEMyOS4yNzAyMDQ5MyA1Ni42ODg1MTQxIDI5LjAzMDI5MzI3IDU2LjAxNDU4NjE4IDI4Ljc4MzExMTU3IDU1LjMyMDIzNjIxIEMyOC4wMzE2Nzg1NiA1My4yMTEwNzA1NyAyNy4yNzY4MzI1IDUxLjEwMzE0NjU4IDI2LjUyMTgzNTMzIDQ4Ljk5NTI1NDUyIEMyNi4wMDUzMzA1NCA0Ny41NDc0MTk0MyAyNS40ODkwNTI4MSA0Ni4wOTk1MDMzMyAyNC45NzMwMDcyIDQ0LjY1MTUwNDUyIEMyMy43MjEwNjM0NyA0MS4xNDAxNTA4OCAyMi40NjYwNjAxOSAzNy42Mjk5MDAyNSAyMS4yMDkzMzUzMyAzNC4xMjAyNTQ1MiBDMjAuODc5MzM1MzMgMzQuMTIwMjU0NTIgMjAuNTQ5MzM1MzMgMzQuMTIwMjU0NTIgMjAuMjA5MzM1MzMgMzQuMTIwMjU0NTIgWiBNLTAuNzkwNjY0NjcgOTAuMTIwMjU0NTIgQy0xLjQ1MDY2NDY3IDkyLjQzMDI1NDUyIC0yLjExMDY2NDY3IDk0Ljc0MDI1NDUyIC0yLjc5MDY2NDY3IDk3LjEyMDI1NDUyIEMxMi4zODkzMzUzMyA5Ny4xMjAyNTQ1MiAyNy41NjkzMzUzMyA5Ny4xMjAyNTQ1MiA0My4yMDkzMzUzMyA5Ny4xMjAyNTQ1MiBDNDIuNTQ5MzM1MzMgOTQuODEwMjU0NTIgNDEuODg5MzM1MzMgOTIuNTAwMjU0NTIgNDEuMjA5MzM1MzMgOTAuMTIwMjU0NTIgQzI3LjM0OTMzNTMzIDkwLjEyMDI1NDUyIDEzLjQ4OTMzNTMzIDkwLjEyMDI1NDUyIC0wLjc5MDY2NDY3IDkwLjEyMDI1NDUyIFogIiBmaWxsPSIjOUU5RTlFIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMDcuNzkwNjY0NjcyODUxNTYsNDUuODc5NzQ1NDgzMzk4NDQpIi8+Cjwvc3ZnPgo=',
- color1: '#FFAB19',
- color2: '#FF8C00',
- color3: '#E76F00',
- blocks: [
- {
- opcode: 'login',
- text: Scratch.translate({ id: 'oauthExtension.login', default: 'Log in with [SERVICE]' }),
- blockType: Scratch.BlockType.COMMAND,
- arguments: {
- SERVICE: { type: Scratch.ArgumentType.STRING, menu: 'SERVICE' },
- },
- },
- {
- opcode: 'isLoggedIn',
- text: Scratch.translate({ id: 'oauthExtension.isLoggedIn', default: 'Is user logged in with [SERVICE]?' }),
- blockType: Scratch.BlockType.BOOLEAN,
- arguments: {
- SERVICE: { type: Scratch.ArgumentType.STRING, menu: 'SERVICE' },
- },
- },
- {
- opcode: 'setClientId',
- text: Scratch.translate({ id: 'oauthExtension.setClientId', default: 'Set client ID for [SERVICE] to [CLIENT_ID]' }),
- blockType: Scratch.BlockType.COMMAND,
- arguments: {
- SERVICE: { type: Scratch.ArgumentType.STRING, menu: 'SERVICE' },
- CLIENT_ID: { type: Scratch.ArgumentType.STRING, defaultValue: '' },
- },
- },
- {
- opcode: 'setClientSecret',
- text: Scratch.translate({ id: 'oauthExtension.setClientSecret', default: 'Set client secret for [SERVICE] to [CLIENT_SECRET]' }),
- blockType: Scratch.BlockType.COMMAND,
- arguments: {
- SERVICE: { type: Scratch.ArgumentType.STRING, menu: 'SERVICE' },
- CLIENT_SECRET: { type: Scratch.ArgumentType.STRING, defaultValue: '' },
- },
- },
- {
- opcode: 'setRedirectUri',
- text: Scratch.translate({ id: 'oauthExtension.setRedirectUri', default: 'Set redirect URI for [SERVICE] to [REDIRECT_URI]' }),
- blockType: Scratch.BlockType.COMMAND,
- arguments: {
- SERVICE: { type: Scratch.ArgumentType.STRING, menu: 'SERVICE' },
- REDIRECT_URI: { type: Scratch.ArgumentType.STRING, defaultValue: '' },
- },
- },
- ],
- menus: {
- SERVICE: {
- items: [
- { text: 'Google', value: 'google' },
- { text: 'Microsoft', value: 'microsoft' },
- { text: 'Discord', value: 'discord' },
- { text: 'Twitter', value: 'twitter' },
- { text: 'GitHub', value: 'github' },
- { text: 'Facebook', value: 'facebook' },
- { text: 'LinkedIn', value: 'linkedin' },
- { text: 'Spotify', value: 'spotify' },
- ],
- },
- },
- };
- }
+ getInfo() {
+ return {
+ id: "oauthExtension",
+ name: Scratch.translate({
+ id: "oauthExtension.name",
+ default: "OAuth Extension",
+ }),
+ blockIconURI:
+ "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI1NiIgaGVpZ2h0PSIyNTYiPgo8cGF0aCBkPSJNMCAwIEMyMi4wMzg1MjY1MiAxOC44MTE1OTg1NiAzNi40NjU3OTMzNCA0MS4wNjM3MzM3NyA0NC4zNTE1NjI1IDY4LjkxMDE1NjI1IEM0NC42OTMxNjQwNiA3MC4wODgzNTkzNyA0NS4wMzQ3NjU2MyA3MS4yNjY1NjI1IDQ1LjM4NjcxODc1IDcyLjQ4MDQ2ODc1IEM1MS41OTA5Mjc1NSA5OC43NDAxNDMyMiA0OC4xMTkzNTU5NyAxMjguNDA3NTUzODkgMzcuMzUxNTYyNSAxNTIuOTEwMTU2MjUgQzM2LjkyNjY1NTI3IDE1My44OTE0NTUwOCAzNi45MjY2NTUyNyAxNTMuODkxNDU1MDggMzYuNDkzMTY0MDYgMTU0Ljg5MjU3ODEyIEMyNi41NTAxNTk0MyAxNzcuNDE1NDA2MzEgOS4zNjgzODI4MiAxOTcuMDgzNzE0NDMgLTExLjY0ODQzNzUgMjA5LjkxMDE1NjI1IEMtMTIuNzIwOTM3NSAyMTAuNTkzMzU5MzggLTEzLjc5MzQzNzUgMjExLjI3NjU2MjUgLTE0Ljg5ODQzNzUgMjExLjk4MDQ2ODc1IEMtNDIuNzU5MjI3OTQgMjI4Ljk0MjAxNDc4IC03OC4yNTA2MTE4OSAyMzMuOTI2NDg1NDUgLTExMC4wMzAyNzM0NCAyMjYuNzQ3MDcwMzEgQy0xMTcuODE5NDE3MjkgMjI0Ljc3NzM2MzU3IC0xMjUuMjk4MDI2MiAyMjIuMTQwMzMxOTUgLTEzMi42NDg0Mzc1IDIxOC45MTAxNTYyNSBDLTEzMy4zMDI2MzY3MiAyMTguNjI2ODg0NzcgLTEzMy45NTY4MzU5NCAyMTguMzQzNjEzMjggLTEzNC42MzA4NTkzOCAyMTguMDUxNzU3ODEgQy0xNjQuNzI1OTMyMzQgMjA0Ljc2NTg4NDE0IC0xODguNDMyNjIzMzkgMTc5LjE4ODU5MzM5IC0yMDAuNTE5NTMxMjUgMTQ4LjcxMzg2NzE5IEMtMjAyLjQ3ODkwMDc3IDE0My41MTUyMTc0MiAtMjA0LjEzNTA4MjUgMTM4LjI1NDE1Mjc0IC0yMDUuNjQ4NDM3NSAxMzIuOTEwMTU2MjUgQy0yMDUuOTkwMDM5MDYgMTMxLjczMTk1MzEyIC0yMDYuMzMxNjQwNjMgMTMwLjU1Mzc1IC0yMDYuNjgzNTkzNzUgMTI5LjMzOTg0Mzc1IEMtMjE0LjIxNzQzOTk4IDk3LjQ1MjQwMTU3IC0yMDcuODM1NTc0NTYgNjEuNDM0NjUxNjEgLTE5MS4wMDc4MTI1IDMzLjYwNTQ2ODc1IEMtMTcyLjcxOTMxMzkzIDQuNTE1NjA4MTggLTE0NS40NzI3MDQ5NSAtMTQuNzk0NDA5MjYgLTExMi42NDg0Mzc1IC0yNC4wODk4NDM3NSBDLTExMS40NzAyMzQzOCAtMjQuNDMxNDQ1MzEgLTExMC4yOTIwMzEyNSAtMjQuNzczMDQ2ODcgLTEwOS4wNzgxMjUgLTI1LjEyNSBDLTcxLjkxMjE2MjA0IC0zMy45MDU5NjkyNyAtMjkuNDM4MzUxODQgLTI0LjE0NjUyMjQyIDAgMCBaIE0tMTU2LjY0ODQzNzUgMzguOTEwMTU2MjUgQy0xNzIuNjc2OTQzNTIgNTguMDg4NzczMjggLTE4MC4zOTY0OTAzOCA4NC41ODg4MzUyMyAtMTc4LjM3MTA5Mzc1IDEwOS4yOTI5Njg3NSBDLTE3NS40NzE3NjMxNSAxMzUuNzQ1OTA4ODUgLTE2Mi45NTU1MTQxMyAxNTkuNTg0NTMzMDggLTE0Mi42NDg0Mzc1IDE3Ni45MTAxNTYyNSBDLTEyNi41NDMxNjcwNSAxODkuNjk5NjM1NzIgLTEwNi4zMjExMTA2MiAxOTguMDkxNzg4ODEgLTg1LjY0ODQzNzUgMTk4LjkxMDE1NjI1IEMtODQuODg5MTc5NjkgMTk4Ljk1MDExNzE5IC04NC4xMjk5MjE4NyAxOTguOTkwMDc4MTIgLTgzLjM0NzY1NjI1IDE5OS4wMzEyNSBDLTU2LjU4MDI3NzA5IDE5OS43NzYwMDUyMyAtMzEuNDM2MTQxNzYgMTg4LjgxNjI3MjU4IC0xMi4wNTQ0NDMzNiAxNzAuNzY1NjI1IEM1LjI3MjM5MDEyIDE1NC4wMTA3MzQ1MiAxNi4zOTQyODMxMyAxMzAuMDkxODY1NjUgMTcuMzUxNTYyNSAxMDUuOTEwMTU2MjUgQzE3LjM5MTUyMzQ0IDEwNS4xNTA4OTg0NCAxNy40MzE0ODQzNyAxMDQuMzkxNjQwNjIgMTcuNDcyNjU2MjUgMTAzLjYwOTM3NSBDMTguMjE3NDExNDggNzYuODQxOTk1ODQgNy4yNTc2Nzg4MyA1MS42OTc4NjA1MSAtMTAuNzkyOTY4NzUgMzIuMzE2MTYyMTEgQy0yNy41NDc4NTkyMyAxNC45ODkzMjg2MyAtNTEuNDY2NzI4MSAzLjg2NzQzNTYyIC03NS42NDg0Mzc1IDIuOTEwMTU2MjUgQy03Ni43ODczMjQyMiAyLjg1MDIxNDg0IC03Ni43ODczMjQyMiAyLjg1MDIxNDg0IC03Ny45NDkyMTg3NSAyLjc4OTA2MjUgQy0xMDguODU5OTYwMDYgMS45MjkwMjU1MSAtMTM2LjI0OTk3Njk4IDE2LjQzMzI0OTk3IC0xNTYuNjQ4NDM3NSAzOC45MTAxNTYyNSBaICIgZmlsbD0iIzlFOUU5RSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjA4LjY0ODQzNzUsMjcuMDg5ODQzNzUpIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuNzc5NDM0NjYgMC4wMDIyMjA2MSAxLjU1ODg2OTMyIDAuMDA0NDQxMjIgMi4zNjE5MjMyMiAwLjAwNjcyOTEzIEMzLjI0Mjc2MDc3IDAuMDA2ODA0NjYgNC4xMjM1OTgzMyAwLjAwNjg4MDE5IDUuMDMxMTI3OTMgMC4wMDY5NTgwMSBDNS45ODg0MTI5MyAwLjAxMjExOTI5IDYuOTQ1Njk3OTQgMC4wMTcyODA1OCA3LjkzMTk5MTU4IDAuMDIyNTk4MjcgQzkuMzk0ODA4MTIgMC4wMjQ3MjA2OSA5LjM5NDgwODEyIDAuMDI0NzIwNjkgMTAuODg3MTc2NTEgMC4wMjY4ODU5OSBDMTQuMDE1NDI2NzUgMC4wMzI1MDMxOSAxNy4xNDM2MDY1NiAwLjA0NTA1ODU5IDIwLjI3MTgzNTMzIDAuMDU3NzU0NTIgQzIyLjM4NzA2ODY3IDAuMDYyNzY3MyAyNC41MDIzMDMxMyAwLjA2NzMzMDU5IDI2LjYxNzUzODQ1IDAuMDcxNDI2MzkgQzMxLjgxNDgyODI5IDAuMDgyNDc4MiAzNy4wMTIwNzY3OCAwLjA5OTIzMzA1IDQyLjIwOTMzNTMzIDAuMTIwMjU0NTIgQzQ0Ljk5MTE0MDUxIDYuMjUxMzU5MTEgNDcuNTc5MTE3NDUgMTIuNDM1MDc1MzMgNTAuMDM3NDYwMzMgMTguNzAyMjg1NzcgQzUwLjM5MDE1OTkxIDE5LjU5NjU0NzcgNTAuNzQyODU5NSAyMC40OTA4MDk2MyA1MS4xMDYyNDY5NSAyMS40MTIxNzA0MSBDNTIuMjI1NzczMjEgMjQuMjUxNjQ4MTQgNTMuMzQyNjgwOCAyNy4wOTIxNDYzOCA1NC40NTkzMzUzMyAyOS45MzI3NTQ1MiBDNTUuNTU3NzAyMTUgMzIuNzIyNDMxMiA1Ni42NTY2Mzk1MiAzNS41MTE4ODE3NCA1Ny43NTYwODgyNiAzOC4zMDExMzIyIEM1OC40ODMyNDk1MSA0MC4xNDY2MDUxNSA1OS4yMDk1NzI4OCA0MS45OTI0MDg0OCA1OS45MzUwNDMzMyA0My44Mzg1NDY3NSBDNjEuNzc4MzM5NjQgNDguNTIyNzUzMjQgNjMuNjQxMjU5NzcgNTMuMTk3NzI3NjUgNjUuNTM5NDEzNDUgNTcuODYwMDAwNjEgQzY1LjkxMTc3MTI0IDU4Ljc3Nzg2ODUgNjYuMjg0MTI5MDMgNTkuNjk1NzM2MzkgNjYuNjY3NzcwMzkgNjAuNjQxNDE4NDYgQzY3LjM3NzQxMTc2IDYyLjM4NzQ1NzM3IDY4LjA5MTI4MzIxIDY0LjEzMTc4NDgzIDY4LjgwOTk4MjMgNjUuODc0MTE0OTkgQzY5LjEyNTc4MjQ3IDY2LjY1MjMyMTAxIDY5LjQ0MTU4MjY0IDY3LjQzMDUyNzA0IDY5Ljc2Njk1MjUxIDY4LjIzMjMxNTA2IEM3MC4wNDY0MTcyNCA2OC45MTMyNzc0NCA3MC4zMjU4ODE5NiA2OS41OTQyMzk4MSA3MC42MTM4MTUzMSA3MC4yOTU4Mzc0IEM3MS4yMDkzMzUzMyA3Mi4xMjAyNTQ1MiA3MS4yMDkzMzUzMyA3Mi4xMjAyNTQ1MiA3MS4yMDkzMzUzMyA3NS4xMjAyNTQ1MiBDNzkuNDU5MzM1MzMgNzUuMTIwMjU0NTIgODcuNzA5MzM1MzMgNzUuMTIwMjU0NTIgOTYuMjA5MzM1MzMgNzUuMTIwMjU0NTIgQzk2LjIwOTMzNTMzIDgwLjA3MDI1NDUyIDk2LjIwOTMzNTMzIDg1LjAyMDI1NDUyIDk2LjIwOTMzNTMzIDkwLjEyMDI1NDUyIEM5MC4yNjkzMzUzMyA5MC4xMjAyNTQ1MiA4NC4zMjkzMzUzMyA5MC4xMjAyNTQ1MiA3OC4yMDkzMzUzMyA5MC4xMjAyNTQ1MiBDNzkuMTk5MzM1MzMgOTMuNTg1MjU0NTIgNzkuMTk5MzM1MzMgOTMuNTg1MjU0NTIgODAuMjA5MzM1MzMgOTcuMTIwMjU0NTIgQzg1LjQ4OTMzNTMzIDk3LjEyMDI1NDUyIDkwLjc2OTMzNTMzIDk3LjEyMDI1NDUyIDk2LjIwOTMzNTMzIDk3LjEyMDI1NDUyIEM5Ni4yMDkzMzUzMyAxMDIuMDcwMjU0NTIgOTYuMjA5MzM1MzMgMTA3LjAyMDI1NDUyIDk2LjIwOTMzNTMzIDExMi4xMjAyNTQ1MiBDOTEuNzU0MzM1MzMgMTEyLjYxNTI1NDUyIDkxLjc1NDMzNTMzIDExMi42MTUyNTQ1MiA4Ny4yMDkzMzUzMyAxMTMuMTIwMjU0NTIgQzg3LjcxNDY0NzgzIDExNC4zODQ4MjQ4MyA4OC4yMTk5NjAzMyAxMTUuNjQ5Mzk1MTQgODguNzQwNTg1MzMgMTE2Ljk1MjI4NTc3IEM4OS4zOTcxMDI1MiAxMTguNjEyMzM2MzcgOTAuMDUzMzM3ODkgMTIwLjI3MjQ5ODQ1IDkwLjcwOTMzNTMzIDEyMS45MzI3NTQ1MiBDOTEuMjEwMTM2MTEgMTIzLjE4MjgyMjg4IDkxLjIxMDEzNjExIDEyMy4xODI4MjI4OCA5MS43MjEwNTQwOCAxMjQuNDU4MTQ1MTQgQzkyLjE5NDc4NDU1IDEyNS42NjE4MDcyNSA5Mi4xOTQ3ODQ1NSAxMjUuNjYxODA3MjUgOTIuNjc4MDg1MzMgMTI2Ljg4OTc4NTc3IEM5Mi45NzEzNDcwNSAxMjcuNjI4MTc2ODggOTMuMjY0NjA4NzYgMTI4LjM2NjU2Nzk5IDkzLjU2Njc1NzIgMTI5LjEyNzMzNDU5IEM5NC4yMDkzMzUzMyAxMzEuMTIwMjU0NTIgOTQuMjA5MzM1MzMgMTMxLjEyMDI1NDUyIDk0LjIwOTMzNTMzIDEzNC4xMjAyNTQ1MiBDODEuOTk5MzM1MzMgMTM0LjEyMDI1NDUyIDY5Ljc4OTMzNTMzIDEzNC4xMjAyNTQ1MiA1Ny4yMDkzMzUzMyAxMzQuMTIwMjU0NTIgQzUyLjIwOTMzNTMzIDEyMi4xMjAyNTQ1MiA1Mi4yMDkzMzUzMyAxMjIuMTIwMjU0NTIgNDkuMjA5MzM1MzMgMTEyLjEyMDI1NDUyIEMzMC4wNjkzMzUzMyAxMTIuMTIwMjU0NTIgMTAuOTI5MzM1MzMgMTEyLjEyMDI1NDUyIC04Ljc5MDY2NDY3IDExMi4xMjAyNTQ1MiBDLTkuNzgwNjY0NjcgMTE1LjQyMDI1NDUyIC0xMC43NzA2NjQ2NyAxMTguNzIwMjU0NTIgLTExLjc5MDY2NDY3IDEyMi4xMjAyNTQ1MiBDLTEzLjQ0MDY2NDY3IDEyNi4wODAyNTQ1MiAtMTUuMDkwNjY0NjcgMTMwLjA0MDI1NDUyIC0xNi43OTA2NjQ2NyAxMzQuMTIwMjU0NTIgQy0yOS4wMDA2NjQ2NyAxMzQuMTIwMjU0NTIgLTQxLjIxMDY2NDY3IDEzNC4xMjAyNTQ1MiAtNTMuNzkwNjY0NjcgMTM0LjEyMDI1NDUyIEMtNTMuMTI2NDQxNjkgMTMwLjc5OTEzOTYgLTUyLjU1MzU4NjExIDEyOC4yMDE5NDI1MyAtNTEuMzgwNTA4NDIgMTI1LjEzMTk3MzI3IEMtNTAuOTc5Mjg3NzIgMTI0LjA3MzMzMDY5IC01MC45NzkyODc3MiAxMjQuMDczMzMwNjkgLTUwLjU2OTk2MTU1IDEyMi45OTMzMDEzOSBDLTUwLjI5MjE2ODU4IDEyMi4yNzIwNzA5MiAtNTAuMDE0Mzc1NjEgMTIxLjU1MDg0MDQ1IC00OS43MjgxNjQ2NyAxMjAuODA3NzU0NTIgQy00OS4zMDU2NzQ0NCAxMTkuNjk2OTA0OTEgLTQ5LjMwNTY3NDQ0IDExOS42OTY5MDQ5MSAtNDguODc0NjQ5MDUgMTE4LjU2MzYxMzg5IEMtNDguMTgzNDc4OTIgMTE2Ljc0NzgyNzk2IC00Ny40ODc1NDc3OSAxMTQuOTMzODU1NTIgLTQ2Ljc5MDY2NDY3IDExMy4xMjAyNTQ1MiBDLTQ5Ljc2MDY2NDY3IDExMi43OTAyNTQ1MiAtNTIuNzMwNjY0NjcgMTEyLjQ2MDI1NDUyIC01NS43OTA2NjQ2NyAxMTIuMTIwMjU0NTIgQy01NS43OTA2NjQ2NyAxMDcuMTcwMjU0NTIgLTU1Ljc5MDY2NDY3IDEwMi4yMjAyNTQ1MiAtNTUuNzkwNjY0NjcgOTcuMTIwMjU0NTIgQy01MC41MTA2NjQ2NyA5Ny4xMjAyNTQ1MiAtNDUuMjMwNjY0NjcgOTcuMTIwMjU0NTIgLTM5Ljc5MDY2NDY3IDk3LjEyMDI1NDUyIEMtMzkuMTMwNjY0NjcgOTQuODEwMjU0NTIgLTM4LjQ3MDY2NDY3IDkyLjUwMDI1NDUyIC0zNy43OTA2NjQ2NyA5MC4xMjAyNTQ1MiBDLTQzLjczMDY2NDY3IDkwLjEyMDI1NDUyIC00OS42NzA2NjQ2NyA5MC4xMjAyNTQ1MiAtNTUuNzkwNjY0NjcgOTAuMTIwMjU0NTIgQy01NS43OTA2NjQ2NyA4NS4xNzAyNTQ1MiAtNTUuNzkwNjY0NjcgODAuMjIwMjU0NTIgLTU1Ljc5MDY2NDY3IDc1LjEyMDI1NDUyIEMtNDcuNTQwNjY0NjcgNzUuMTIwMjU0NTIgLTM5LjI5MDY2NDY3IDc1LjEyMDI1NDUyIC0zMC43OTA2NjQ2NyA3NS4xMjAyNTQ1MiBDLTMwLjQ2MDY2NDY3IDczLjQ3MDI1NDUyIC0zMC4xMzA2NjQ2NyA3MS44MjAyNTQ1MiAtMjkuNzkwNjY0NjcgNzAuMTIwMjU0NTIgQy0yOS4zNTY1NzU4MyA2OC44MTI0MDQ1NiAtMjguODg3MjM5MjEgNjcuNTE1NzA5OTggLTI4LjM4Mjk0OTgzIDY2LjIzMzI5MTYzIEMtMjcuOTU1MjcwNjEgNjUuMTM2NzU1MTQgLTI3Ljk1NTI3MDYxIDY1LjEzNjc1NTE0IC0yNy41MTg5NTE0MiA2NC4wMTgwNjY0MSBDLTI3LjIwOTAwNzQyIDYzLjIzNTgxMTkyIC0yNi44OTkwNjM0MiA2Mi40NTM1NTc0MyAtMjYuNTc5NzI3MTcgNjEuNjQ3NTk4MjcgQy0yNi4wOTMyMzk1MiA2MC40MDUyNzE4NCAtMjYuMDkzMjM5NTIgNjAuNDA1MjcxODQgLTI1LjU5NjkyMzgzIDU5LjEzNzg0NzkgQy0yNC41NDA0OTM5NyA1Ni40NDI4OTc0OSAtMjMuNDc4MjE0MDQgNTMuNzUwMjk3MzYgLTIyLjQxNTY2NDY3IDUxLjA1Nzc1NDUyIEMtMjEuNjg4NjgwNTUgNDkuMjA3NjI3NzYgLTIwLjk2MjAzODM5IDQ3LjM1NzM2NjU5IC0yMC4yMzU3MzMwMyA0NS41MDY5NzMyNyBDLTE4Ljc3OTY4MzY3IDQxLjc5ODk3MzEgLTE3LjMyMTM4MjQ0IDM4LjA5MTg3MDIyIC0xNS44NjE0NjU0NSAzNC4zODUzOTEyNCBDLTE0LjAwMzg3MjU1IDI5LjY2NjY4MzE1IC0xMi4xNTg0NzMxNyAyNC45NDMzMjA2NSAtMTAuMzE4MDA4NDIgMjAuMjE3OTEwNzcgQy05LjgwNjIzMTMyIDE4LjkwNjEwMjQ1IC05LjI5NDM1Mzc3IDE3LjU5NDMzMzMyIC04Ljc4MjM2Mzg5IDE2LjI4MjYwODAzIEMtNy44NDYzMDQ5OSAxMy44ODM5MzcxMSAtNi45MTE2ODAwOCAxMS40ODQ3MDU5NyAtNS45Nzg2NTI5NSA5LjA4NDg1NDEzIEMtNS41NjcyODA4OCA4LjAzNDM0ODc1IC01LjE1NTkwODgxIDYuOTgzODQzMzggLTQuNzMyMDcwOTIgNS45MDE1MDQ1MiBDLTQuMzc4MzAzODMgNC45OTQ2NDkwNSAtNC4wMjQ1MzY3NCA0LjA4Nzc5MzU4IC0zLjY2MDA0OTQ0IDMuMTUzNDU3NjQgQy0yLjM3OTk5Mzk4IDAuMTU5ODMxNzMgLTIuMzc5OTkzOTggMC4xNTk4MzE3MyAwIDAgWiBNMjAuMjA5MzM1MzMgMzQuMTIwMjU0NTIgQzE2LjgxMTU1MDQyIDQxLjQ0MTY3MiAxMy45NzAzMDk5MyA0OC45Mjk2MjIxMiAxMS4yMDc4NzA0OCA1Ni41MDY3MjkxMyBDMTAuNDUxMzgyMzUgNTguNTc5NTQ2MDkgOS42ODgwNjYyNSA2MC42NDk3NjM3OSA4LjkyNDE3OTA4IDYyLjcxOTg2Mzg5IEM4LjQ0MDY5OTkyIDY0LjAzOTM3NjU3IDcuOTU3NjEyMjcgNjUuMzU5MDMyNzggNy40NzQ5NjAzMyA2Ni42Nzg4NDgyNyBDNy4wMzk1Nzk0NyA2Ny44Njc5Mjc4NiA2LjYwNDE5ODYxIDY5LjA1NzAwNzQ1IDYuMTU1NjI0MzkgNzAuMjgyMTE5NzUgQzUuMTAzOTAxNTkgNzIuOTM3ODUxOCA1LjEwMzkwMTU5IDcyLjkzNzg1MTggNS4yMDkzMzUzMyA3NS4xMjAyNTQ1MiBDMTUuMTA5MzM1MzMgNzUuMTIwMjU0NTIgMjUuMDA5MzM1MzMgNzUuMTIwMjU0NTIgMzUuMjA5MzM1MzMgNzUuMTIwMjU0NTIgQzMzLjQxMTgzNzk3IDY5LjEyODU5NjY3IDMxLjYyMDI3MzkyIDYzLjIzNDQ4Mzc4IDI5LjUxMDExNjU4IDU3LjM2MjQ0MjAyIEMyOS4yNzAyMDQ5MyA1Ni42ODg1MTQxIDI5LjAzMDI5MzI3IDU2LjAxNDU4NjE4IDI4Ljc4MzExMTU3IDU1LjMyMDIzNjIxIEMyOC4wMzE2Nzg1NiA1My4yMTEwNzA1NyAyNy4yNzY4MzI1IDUxLjEwMzE0NjU4IDI2LjUyMTgzNTMzIDQ4Ljk5NTI1NDUyIEMyNi4wMDUzMzA1NCA0Ny41NDc0MTk0MyAyNS40ODkwNTI4MSA0Ni4wOTk1MDMzMyAyNC45NzMwMDcyIDQ0LjY1MTUwNDUyIEMyMy43MjEwNjM0NyA0MS4xNDAxNTA4OCAyMi40NjYwNjAxOSAzNy42Mjk5MDAyNSAyMS4yMDkzMzUzMyAzNC4xMjAyNTQ1MiBDMjAuODc5MzM1MzMgMzQuMTIwMjU0NTIgMjAuNTQ5MzM1MzMgMzQuMTIwMjU0NTIgMjAuMjA5MzM1MzMgMzQuMTIwMjU0NTIgWiBNLTAuNzkwNjY0NjcgOTAuMTIwMjU0NTIgQy0xLjQ1MDY2NDY3IDkyLjQzMDI1NDUyIC0yLjExMDY2NDY3IDk0Ljc0MDI1NDUyIC0yLjc5MDY2NDY3IDk3LjEyMDI1NDUyIEMxMi4zODkzMzUzMyA5Ny4xMjAyNTQ1MiAyNy41NjkzMzUzMyA5Ny4xMjAyNTQ1MiA0My4yMDkzMzUzMyA5Ny4xMjAyNTQ1MiBDNDIuNTQ5MzM1MzMgOTQuODEwMjU0NTIgNDEuODg5MzM1MzMgOTIuNTAwMjU0NTIgNDEuMjA5MzM1MzMgOTAuMTIwMjU0NTIgQzI3LjM0OTMzNTMzIDkwLjEyMDI1NDUyIDEzLjQ4OTMzNTMzIDkwLjEyMDI1NDUyIC0wLjc5MDY2NDY3IDkwLjEyMDI1NDUyIFogIiBmaWxsPSIjOUU5RTlFIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMDcuNzkwNjY0NjcyODUxNTYsNDUuODc5NzQ1NDgzMzk4NDQpIi8+Cjwvc3ZnPgo=",
+ menuIconURI:
+ "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI1NiIgaGVpZ2h0PSIyNTYiPgo8cGF0aCBkPSJNMCAwIEMyMi4wMzg1MjY1MiAxOC44MTE1OTg1NiAzNi40NjU3OTMzNCA0MS4wNjM3MzM3NyA0NC4zNTE1NjI1IDY4LjkxMDE1NjI1IEM0NC42OTMxNjQwNiA3MC4wODgzNTkzNyA0NS4wMzQ3NjU2MyA3MS4yNjY1NjI1IDQ1LjM4NjcxODc1IDcyLjQ4MDQ2ODc1IEM1MS41OTA5Mjc1NSA5OC43NDAxNDMyMiA0OC4xMTkzNTU5NyAxMjguNDA3NTUzODkgMzcuMzUxNTYyNSAxNTIuOTEwMTU2MjUgQzM2LjkyNjY1NTI3IDE1My44OTE0NTUwOCAzNi45MjY2NTUyNyAxNTMuODkxNDU1MDggMzYuNDkzMTY0MDYgMTU0Ljg5MjU3ODEyIEMyNi41NTAxNTk0MyAxNzcuNDE1NDA2MzEgOS4zNjgzODI4MiAxOTcuMDgzNzE0NDMgLTExLjY0ODQzNzUgMjA5LjkxMDE1NjI1IEMtMTIuNzIwOTM3NSAyMTAuNTkzMzU5MzggLTEzLjc5MzQzNzUgMjExLjI3NjU2MjUgLTE0Ljg5ODQzNzUgMjExLjk4MDQ2ODc1IEMtNDIuNzU5MjI3OTQgMjI4Ljk0MjAxNDc4IC03OC4yNTA2MTE4OSAyMzMuOTI2NDg1NDUgLTExMC4wMzAyNzM0NCAyMjYuNzQ3MDcwMzEgQy0xMTcuODE5NDE3MjkgMjI0Ljc3NzM2MzU3IC0xMjUuMjk4MDI2MiAyMjIuMTQwMzMxOTUgLTEzMi42NDg0Mzc1IDIxOC45MTAxNTYyNSBDLTEzMy4zMDI2MzY3MiAyMTguNjI2ODg0NzcgLTEzMy45NTY4MzU5NCAyMTguMzQzNjEzMjggLTEzNC42MzA4NTkzOCAyMTguMDUxNzU3ODEgQy0xNjQuNzI1OTMyMzQgMjA0Ljc2NTg4NDE0IC0xODguNDMyNjIzMzkgMTc5LjE4ODU5MzM5IC0yMDAuNTE5NTMxMjUgMTQ4LjcxMzg2NzE5IEMtMjAyLjQ3ODkwMDc3IDE0My41MTUyMTc0MiAtMjA0LjEzNTA4MjUgMTM4LjI1NDE1Mjc0IC0yMDUuNjQ4NDM3NSAxMzIuOTEwMTU2MjUgQy0yMDUuOTkwMDM5MDYgMTMxLjczMTk1MzEyIC0yMDYuMzMxNjQwNjMgMTMwLjU1Mzc1IC0yMDYuNjgzNTkzNzUgMTI5LjMzOTg0Mzc1IEMtMjE0LjIxNzQzOTk4IDk3LjQ1MjQwMTU3IC0yMDcuODM1NTc0NTYgNjEuNDM0NjUxNjEgLTE5MS4wMDc4MTI1IDMzLjYwNTQ2ODc1IEMtMTcyLjcxOTMxMzkzIDQuNTE1NjA4MTggLTE0NS40NzI3MDQ5NSAtMTQuNzk0NDA5MjYgLTExMi42NDg0Mzc1IC0yNC4wODk4NDM3NSBDLTExMS40NzAyMzQzOCAtMjQuNDMxNDQ1MzEgLTExMC4yOTIwMzEyNSAtMjQuNzczMDQ2ODcgLTEwOS4wNzgxMjUgLTI1LjEyNSBDLTcxLjkxMjE2MjA0IC0zMy45MDU5NjkyNyAtMjkuNDM4MzUxODQgLTI0LjE0NjUyMjQyIDAgMCBaIE0tMTU2LjY0ODQzNzUgMzguOTEwMTU2MjUgQy0xNzIuNjc2OTQzNTIgNTguMDg4NzczMjggLTE4MC4zOTY0OTAzOCA4NC41ODg4MzUyMyAtMTc4LjM3MTA5Mzc1IDEwOS4yOTI5Njg3NSBDLTE3NS40NzE3NjMxNSAxMzUuNzQ1OTA4ODUgLTE2Mi45NTU1MTQxMyAxNTkuNTg0NTMzMDggLTE0Mi42NDg0Mzc1IDE3Ni45MTAxNTYyNSBDLTEyNi41NDMxNjcwNSAxODkuNjk5NjM1NzIgLTEwNi4zMjExMTA2MiAxOTguMDkxNzg4ODEgLTg1LjY0ODQzNzUgMTk4LjkxMDE1NjI1IEMtODQuODg5MTc5NjkgMTk4Ljk1MDExNzE5IC04NC4xMjk5MjE4NyAxOTguOTkwMDc4MTIgLTgzLjM0NzY1NjI1IDE5OS4wMzEyNSBDLTU2LjU4MDI3NzA5IDE5OS43NzYwMDUyMyAtMzEuNDM2MTQxNzYgMTg4LjgxNjI3MjU4IC0xMi4wNTQ0NDMzNiAxNzAuNzY1NjI1IEM1LjI3MjM5MDEyIDE1NC4wMTA3MzQ1MiAxNi4zOTQyODMxMyAxMzAuMDkxODY1NjUgMTcuMzUxNTYyNSAxMDUuOTEwMTU2MjUgQzE3LjM5MTUyMzQ0IDEwNS4xNTA4OTg0NCAxNy40MzE0ODQzNyAxMDQuMzkxNjQwNjIgMTcuNDcyNjU2MjUgMTAzLjYwOTM3NSBDMTguMjE3NDExNDggNzYuODQxOTk1ODQgNy4yNTc2Nzg4MyA1MS42OTc4NjA1MSAtMTAuNzkyOTY4NzUgMzIuMzE2MTYyMTEgQy0yNy41NDc4NTkyMyAxNC45ODkzMjg2MyAtNTEuNDY2NzI4MSAzLjg2NzQzNTYyIC03NS42NDg0Mzc1IDIuOTEwMTU2MjUgQy03Ni43ODczMjQyMiAyLjg1MDIxNDg0IC03Ni43ODczMjQyMiAyLjg1MDIxNDg0IC03Ny45NDkyMTg3NSAyLjc4OTA2MjUgQy0xMDguODU5OTYwMDYgMS45MjkwMjU1MSAtMTM2LjI0OTk3Njk4IDE2LjQzMzI0OTk3IC0xNTYuNjQ4NDM3NSAzOC45MTAxNTYyNSBaICIgZmlsbD0iIzlFOUU5RSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjA4LjY0ODQzNzUsMjcuMDg5ODQzNzUpIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuNzc5NDM0NjYgMC4wMDIyMjA2MSAxLjU1ODg2OTMyIDAuMDA0NDQxMjIgMi4zNjE5MjMyMiAwLjAwNjcyOTEzIEMzLjI0Mjc2MDc3IDAuMDA2ODA0NjYgNC4xMjM1OTgzMyAwLjAwNjg4MDE5IDUuMDMxMTI3OTMgMC4wMDY5NTgwMSBDNS45ODg0MTI5MyAwLjAxMjExOTI5IDYuOTQ1Njk3OTQgMC4wMTcyODA1OCA3LjkzMTk5MTU4IDAuMDIyNTk4MjcgQzkuMzk0ODA4MTIgMC4wMjQ3MjA2OSA5LjM5NDgwODEyIDAuMDI0NzIwNjkgMTAuODg3MTc2NTEgMC4wMjY4ODU5OSBDMTQuMDE1NDI2NzUgMC4wMzI1MDMxOSAxNy4xNDM2MDY1NiAwLjA0NTA1ODU5IDIwLjI3MTgzNTMzIDAuMDU3NzU0NTIgQzIyLjM4NzA2ODY3IDAuMDYyNzY3MyAyNC41MDIzMDMxMyAwLjA2NzMzMDU5IDI2LjYxNzUzODQ1IDAuMDcxNDI2MzkgQzMxLjgxNDgyODI5IDAuMDgyNDc4MiAzNy4wMTIwNzY3OCAwLjA5OTIzMzA1IDQyLjIwOTMzNTMzIDAuMTIwMjU0NTIgQzQ0Ljk5MTE0MDUxIDYuMjUxMzU5MTEgNDcuNTc5MTE3NDUgMTIuNDM1MDc1MzMgNTAuMDM3NDYwMzMgMTguNzAyMjg1NzcgQzUwLjM5MDE1OTkxIDE5LjU5NjU0NzcgNTAuNzQyODU5NSAyMC40OTA4MDk2MyA1MS4xMDYyNDY5NSAyMS40MTIxNzA0MSBDNTIuMjI1NzczMjEgMjQuMjUxNjQ4MTQgNTMuMzQyNjgwOCAyNy4wOTIxNDYzOCA1NC40NTkzMzUzMyAyOS45MzI3NTQ1MiBDNTUuNTU3NzAyMTUgMzIuNzIyNDMxMiA1Ni42NTY2Mzk1MiAzNS41MTE4ODE3NCA1Ny43NTYwODgyNiAzOC4zMDExMzIyIEM1OC40ODMyNDk1MSA0MC4xNDY2MDUxNSA1OS4yMDk1NzI4OCA0MS45OTI0MDg0OCA1OS45MzUwNDMzMyA0My44Mzg1NDY3NSBDNjEuNzc4MzM5NjQgNDguNTIyNzUzMjQgNjMuNjQxMjU5NzcgNTMuMTk3NzI3NjUgNjUuNTM5NDEzNDUgNTcuODYwMDAwNjEgQzY1LjkxMTc3MTI0IDU4Ljc3Nzg2ODUgNjYuMjg0MTI5MDMgNTkuNjk1NzM2MzkgNjYuNjY3NzcwMzkgNjAuNjQxNDE4NDYgQzY3LjM3NzQxMTc2IDYyLjM4NzQ1NzM3IDY4LjA5MTI4MzIxIDY0LjEzMTc4NDgzIDY4LjgwOTk4MjMgNjUuODc0MTE0OTkgQzY5LjEyNTc4MjQ3IDY2LjY1MjMyMTAxIDY5LjQ0MTU4MjY0IDY3LjQzMDUyNzA0IDY5Ljc2Njk1MjUxIDY4LjIzMjMxNTA2IEM3MC4wNDY0MTcyNCA2OC45MTMyNzc0NCA3MC4zMjU4ODE5NiA2OS41OTQyMzk4MSA3MC42MTM4MTUzMSA3MC4yOTU4Mzc0IEM3MS4yMDkzMzUzMyA3Mi4xMjAyNTQ1MiA3MS4yMDkzMzUzMyA3Mi4xMjAyNTQ1MiA3MS4yMDkzMzUzMyA3NS4xMjAyNTQ1MiBDNzkuNDU5MzM1MzMgNzUuMTIwMjU0NTIgODcuNzA5MzM1MzMgNzUuMTIwMjU0NTIgOTYuMjA5MzM1MzMgNzUuMTIwMjU0NTIgQzk2LjIwOTMzNTMzIDgwLjA3MDI1NDUyIDk2LjIwOTMzNTMzIDg1LjAyMDI1NDUyIDk2LjIwOTMzNTMzIDkwLjEyMDI1NDUyIEM5MC4yNjkzMzUzMyA5MC4xMjAyNTQ1MiA4NC4zMjkzMzUzMyA5MC4xMjAyNTQ1MiA3OC4yMDkzMzUzMyA5MC4xMjAyNTQ1MiBDNzkuMTk5MzM1MzMgOTMuNTg1MjU0NTIgNzkuMTk5MzM1MzMgOTMuNTg1MjU0NTIgODAuMjA5MzM1MzMgOTcuMTIwMjU0NTIgQzg1LjQ4OTMzNTMzIDk3LjEyMDI1NDUyIDkwLjc2OTMzNTMzIDk3LjEyMDI1NDUyIDk2LjIwOTMzNTMzIDk3LjEyMDI1NDUyIEM5Ni4yMDkzMzUzMyAxMDIuMDcwMjU0NTIgOTYuMjA5MzM1MzMgMTA3LjAyMDI1NDUyIDk2LjIwOTMzNTMzIDExMi4xMjAyNTQ1MiBDOTEuNzU0MzM1MzMgMTEyLjYxNTI1NDUyIDkxLjc1NDMzNTMzIDExMi42MTUyNTQ1MiA4Ny4yMDkzMzUzMyAxMTMuMTIwMjU0NTIgQzg3LjcxNDY0NzgzIDExNC4zODQ4MjQ4MyA4OC4yMTk5NjAzMyAxMTUuNjQ5Mzk1MTQgODguNzQwNTg1MzMgMTE2Ljk1MjI4NTc3IEM4OS4zOTcxMDI1MiAxMTguNjEyMzM2MzcgOTAuMDUzMzM3ODkgMTIwLjI3MjQ5ODQ1IDkwLjcwOTMzNTMzIDEyMS45MzI3NTQ1MiBDOTEuMjEwMTM2MTEgMTIzLjE4MjgyMjg4IDkxLjIxMDEzNjExIDEyMy4xODI4MjI4OCA5MS43MjEwNTQwOCAxMjQuNDU4MTQ1MTQgQzkyLjE5NDc4NDU1IDEyNS42NjE4MDcyNSA5Mi4xOTQ3ODQ1NSAxMjUuNjYxODA3MjUgOTIuNjc4MDg1MzMgMTI2Ljg4OTc4NTc3IEM5Mi45NzEzNDcwNSAxMjcuNjI4MTc2ODggOTMuMjY0NjA4NzYgMTI4LjM2NjU2Nzk5IDkzLjU2Njc1NzIgMTI5LjEyNzMzNDU5IEM5NC4yMDkzMzUzMyAxMzEuMTIwMjU0NTIgOTQuMjA5MzM1MzMgMTMxLjEyMDI1NDUyIDk0LjIwOTMzNTMzIDEzNC4xMjAyNTQ1MiBDODEuOTk5MzM1MzMgMTM0LjEyMDI1NDUyIDY5Ljc4OTMzNTMzIDEzNC4xMjAyNTQ1MiA1Ny4yMDkzMzUzMyAxMzQuMTIwMjU0NTIgQzUyLjIwOTMzNTMzIDEyMi4xMjAyNTQ1MiA1Mi4yMDkzMzUzMyAxMjIuMTIwMjU0NTIgNDkuMjA5MzM1MzMgMTEyLjEyMDI1NDUyIEMzMC4wNjkzMzUzMyAxMTIuMTIwMjU0NTIgMTAuOTI5MzM1MzMgMTEyLjEyMDI1NDUyIC04Ljc5MDY2NDY3IDExMi4xMjAyNTQ1MiBDLTkuNzgwNjY0NjcgMTE1LjQyMDI1NDUyIC0xMC43NzA2NjQ2NyAxMTguNzIwMjU0NTIgLTExLjc5MDY2NDY3IDEyMi4xMjAyNTQ1MiBDLTEzLjQ0MDY2NDY3IDEyNi4wODAyNTQ1MiAtMTUuMDkwNjY0NjcgMTMwLjA0MDI1NDUyIC0xNi43OTA2NjQ2NyAxMzQuMTIwMjU0NTIgQy0yOS4wMDA2NjQ2NyAxMzQuMTIwMjU0NTIgLTQxLjIxMDY2NDY3IDEzNC4xMjAyNTQ1MiAtNTMuNzkwNjY0NjcgMTM0LjEyMDI1NDUyIEMtNTMuMTI2NDQxNjkgMTMwLjc5OTEzOTYgLTUyLjU1MzU4NjExIDEyOC4yMDE5NDI1MyAtNTEuMzgwNTA4NDIgMTI1LjEzMTk3MzI3IEMtNTAuOTc5Mjg3NzIgMTI0LjA3MzMzMDY5IC01MC45NzkyODc3MiAxMjQuMDczMzMwNjkgLTUwLjU2OTk2MTU1IDEyMi45OTMzMDEzOSBDLTUwLjI5MjE2ODU4IDEyMi4yNzIwNzA5MiAtNTAuMDE0Mzc1NjEgMTIxLjU1MDg0MDQ1IC00OS43MjgxNjQ2NyAxMjAuODA3NzU0NTIgQy00OS4zMDU2NzQ0NCAxMTkuNjk2OTA0OTEgLTQ5LjMwNTY3NDQ0IDExOS42OTY5MDQ5MSAtNDguODc0NjQ5MDUgMTE4LjU2MzYxMzg5IEMtNDguMTgzNDc4OTIgMTE2Ljc0NzgyNzk2IC00Ny40ODc1NDc3OSAxMTQuOTMzODU1NTIgLTQ2Ljc5MDY2NDY3IDExMy4xMjAyNTQ1MiBDLTQ5Ljc2MDY2NDY3IDExMi43OTAyNTQ1MiAtNTIuNzMwNjY0NjcgMTEyLjQ2MDI1NDUyIC01NS43OTA2NjQ2NyAxMTIuMTIwMjU0NTIgQy01NS43OTA2NjQ2NyAxMDcuMTcwMjU0NTIgLTU1Ljc5MDY2NDY3IDEwMi4yMjAyNTQ1MiAtNTUuNzkwNjY0NjcgOTcuMTIwMjU0NTIgQy01MC41MTA2NjQ2NyA5Ny4xMjAyNTQ1MiAtNDUuMjMwNjY0NjcgOTcuMTIwMjU0NTIgLTM5Ljc5MDY2NDY3IDk3LjEyMDI1NDUyIEMtMzkuMTMwNjY0NjcgOTQuODEwMjU0NTIgLTM4LjQ3MDY2NDY3IDkyLjUwMDI1NDUyIC0zNy43OTA2NjQ2NyA5MC4xMjAyNTQ1MiBDLTQzLjczMDY2NDY3IDkwLjEyMDI1NDUyIC00OS42NzA2NjQ2NyA5MC4xMjAyNTQ1MiAtNTUuNzkwNjY0NjcgOTAuMTIwMjU0NTIgQy01NS43OTA2NjQ2NyA4NS4xNzAyNTQ1MiAtNTUuNzkwNjY0NjcgODAuMjIwMjU0NTIgLTU1Ljc5MDY2NDY3IDc1LjEyMDI1NDUyIEMtNDcuNTQwNjY0NjcgNzUuMTIwMjU0NTIgLTM5LjI5MDY2NDY3IDc1LjEyMDI1NDUyIC0zMC43OTA2NjQ2NyA3NS4xMjAyNTQ1MiBDLTMwLjQ2MDY2NDY3IDczLjQ3MDI1NDUyIC0zMC4xMzA2NjQ2NyA3MS44MjAyNTQ1MiAtMjkuNzkwNjY0NjcgNzAuMTIwMjU0NTIgQy0yOS4zNTY1NzU4MyA2OC44MTI0MDQ1NiAtMjguODg3MjM5MjEgNjcuNTE1NzA5OTggLTI4LjM4Mjk0OTgzIDY2LjIzMzI5MTYzIEMtMjcuOTU1MjcwNjEgNjUuMTM2NzU1MTQgLTI3Ljk1NTI3MDYxIDY1LjEzNjc1NTE0IC0yNy41MTg5NTE0MiA2NC4wMTgwNjY0MSBDLTI3LjIwOTAwNzQyIDYzLjIzNTgxMTkyIC0yNi44OTkwNjM0MiA2Mi40NTM1NTc0MyAtMjYuNTc5NzI3MTcgNjEuNjQ3NTk4MjcgQy0yNi4wOTMyMzk1MiA2MC40MDUyNzE4NCAtMjYuMDkzMjM5NTIgNjAuNDA1MjcxODQgLTI1LjU5NjkyMzgzIDU5LjEzNzg0NzkgQy0yNC41NDA0OTM5NyA1Ni40NDI4OTc0OSAtMjMuNDc4MjE0MDQgNTMuNzUwMjk3MzYgLTIyLjQxNTY2NDY3IDUxLjA1Nzc1NDUyIEMtMjEuNjg4NjgwNTUgNDkuMjA3NjI3NzYgLTIwLjk2MjAzODM5IDQ3LjM1NzM2NjU5IC0yMC4yMzU3MzMwMyA0NS41MDY5NzMyNyBDLTE4Ljc3OTY4MzY3IDQxLjc5ODk3MzEgLTE3LjMyMTM4MjQ0IDM4LjA5MTg3MDIyIC0xNS44NjE0NjU0NSAzNC4zODUzOTEyNCBDLTE0LjAwMzg3MjU1IDI5LjY2NjY4MzE1IC0xMi4xNTg0NzMxNyAyNC45NDMzMjA2NSAtMTAuMzE4MDA4NDIgMjAuMjE3OTEwNzcgQy05LjgwNjIzMTMyIDE4LjkwNjEwMjQ1IC05LjI5NDM1Mzc3IDE3LjU5NDMzMzMyIC04Ljc4MjM2Mzg5IDE2LjI4MjYwODAzIEMtNy44NDYzMDQ5OSAxMy44ODM5MzcxMSAtNi45MTE2ODAwOCAxMS40ODQ3MDU5NyAtNS45Nzg2NTI5NSA5LjA4NDg1NDEzIEMtNS41NjcyODA4OCA4LjAzNDM0ODc1IC01LjE1NTkwODgxIDYuOTgzODQzMzggLTQuNzMyMDcwOTIgNS45MDE1MDQ1MiBDLTQuMzc4MzAzODMgNC45OTQ2NDkwNSAtNC4wMjQ1MzY3NCA0LjA4Nzc5MzU4IC0zLjY2MDA0OTQ0IDMuMTUzNDU3NjQgQy0yLjM3OTk5Mzk4IDAuMTU5ODMxNzMgLTIuMzc5OTkzOTggMC4xNTk4MzE3MyAwIDAgWiBNMjAuMjA5MzM1MzMgMzQuMTIwMjU0NTIgQzE2LjgxMTU1MDQyIDQxLjQ0MTY3MiAxMy45NzAzMDk5MyA0OC45Mjk2MjIxMiAxMS4yMDc4NzA0OCA1Ni41MDY3MjkxMyBDMTAuNDUxMzgyMzUgNTguNTc5NTQ2MDkgOS42ODgwNjYyNSA2MC42NDk3NjM3OSA4LjkyNDE3OTA4IDYyLjcxOTg2Mzg5IEM4LjQ0MDY5OTkyIDY0LjAzOTM3NjU3IDcuOTU3NjEyMjcgNjUuMzU5MDMyNzggNy40NzQ5NjAzMyA2Ni42Nzg4NDgyNyBDNy4wMzk1Nzk0NyA2Ny44Njc5Mjc4NiA2LjYwNDE5ODYxIDY5LjA1NzAwNzQ1IDYuMTU1NjI0MzkgNzAuMjgyMTE5NzUgQzUuMTAzOTAxNTkgNzIuOTM3ODUxOCA1LjEwMzkwMTU5IDcyLjkzNzg1MTggNS4yMDkzMzUzMyA3NS4xMjAyNTQ1MiBDMTUuMTA5MzM1MzMgNzUuMTIwMjU0NTIgMjUuMDA5MzM1MzMgNzUuMTIwMjU0NTIgMzUuMjA5MzM1MzMgNzUuMTIwMjU0NTIgQzMzLjQxMTgzNzk3IDY5LjEyODU5NjY3IDMxLjYyMDI3MzkyIDYzLjIzNDQ4Mzc4IDI5LjUxMDExNjU4IDU3LjM2MjQ0MjAyIEMyOS4yNzAyMDQ5MyA1Ni42ODg1MTQxIDI5LjAzMDI5MzI3IDU2LjAxNDU4NjE4IDI4Ljc4MzExMTU3IDU1LjMyMDIzNjIxIEMyOC4wMzE2Nzg1NiA1My4yMTEwNzA1NyAyNy4yNzY4MzI1IDUxLjEwMzE0NjU4IDI2LjUyMTgzNTMzIDQ4Ljk5NTI1NDUyIEMyNi4wMDUzMzA1NCA0Ny41NDc0MTk0MyAyNS40ODkwNTI4MSA0Ni4wOTk1MDMzMyAyNC45NzMwMDcyIDQ0LjY1MTUwNDUyIEMyMy43MjEwNjM0NyA0MS4xNDAxNTA4OCAyMi40NjYwNjAxOSAzNy42Mjk5MDAyNSAyMS4yMDkzMzUzMyAzNC4xMjAyNTQ1MiBDMjAuODc5MzM1MzMgMzQuMTIwMjU0NTIgMjAuNTQ5MzM1MzMgMzQuMTIwMjU0NTIgMjAuMjA5MzM1MzMgMzQuMTIwMjU0NTIgWiBNLTAuNzkwNjY0NjcgOTAuMTIwMjU0NTIgQy0xLjQ1MDY2NDY3IDkyLjQzMDI1NDUyIC0yLjExMDY2NDY3IDk0Ljc0MDI1NDUyIC0yLjc5MDY2NDY3IDk3LjEyMDI1NDUyIEMxMi4zODkzMzUzMyA5Ny4xMjAyNTQ1MiAyNy41NjkzMzUzMyA5Ny4xMjAyNTQ1MiA0My4yMDkzMzUzMyA5Ny4xMjAyNTQ1MiBDNDIuNTQ5MzM1MzMgOTQuODEwMjU0NTIgNDEuODg5MzM1MzMgOTIuNTAwMjU0NTIgNDEuMjA5MzM1MzMgOTAuMTIwMjU0NTIgQzI3LjM0OTMzNTMzIDkwLjEyMDI1NDUyIDEzLjQ4OTMzNTMzIDkwLjEyMDI1NDUyIC0wLjc5MDY2NDY3IDkwLjEyMDI1NDUyIFogIiBmaWxsPSIjOUU5RTlFIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMDcuNzkwNjY0NjcyODUxNTYsNDUuODc5NzQ1NDgzMzk4NDQpIi8+Cjwvc3ZnPgo=",
+ color1: "#FFAB19",
+ color2: "#FF8C00",
+ color3: "#E76F00",
+ blocks: [
+ {
+ opcode: "login",
+ text: Scratch.translate({
+ id: "oauthExtension.login",
+ default: "Log in with [SERVICE]",
+ }),
+ blockType: Scratch.BlockType.COMMAND,
+ arguments: {
+ SERVICE: { type: Scratch.ArgumentType.STRING, menu: "SERVICE" },
+ },
+ },
+ {
+ opcode: "isLoggedIn",
+ text: Scratch.translate({
+ id: "oauthExtension.isLoggedIn",
+ default: "Is user logged in with [SERVICE]?",
+ }),
+ blockType: Scratch.BlockType.BOOLEAN,
+ arguments: {
+ SERVICE: { type: Scratch.ArgumentType.STRING, menu: "SERVICE" },
+ },
+ },
+ {
+ opcode: "setClientId",
+ text: Scratch.translate({
+ id: "oauthExtension.setClientId",
+ default: "Set client ID for [SERVICE] to [CLIENT_ID]",
+ }),
+ blockType: Scratch.BlockType.COMMAND,
+ arguments: {
+ SERVICE: { type: Scratch.ArgumentType.STRING, menu: "SERVICE" },
+ CLIENT_ID: {
+ type: Scratch.ArgumentType.STRING,
+ defaultValue: "",
+ },
+ },
+ },
+ {
+ opcode: "setClientSecret",
+ text: Scratch.translate({
+ id: "oauthExtension.setClientSecret",
+ default: "Set client secret for [SERVICE] to [CLIENT_SECRET]",
+ }),
+ blockType: Scratch.BlockType.COMMAND,
+ arguments: {
+ SERVICE: { type: Scratch.ArgumentType.STRING, menu: "SERVICE" },
+ CLIENT_SECRET: {
+ type: Scratch.ArgumentType.STRING,
+ defaultValue: "",
+ },
+ },
+ },
+ {
+ opcode: "setRedirectUri",
+ text: Scratch.translate({
+ id: "oauthExtension.setRedirectUri",
+ default: "Set redirect URI for [SERVICE] to [REDIRECT_URI]",
+ }),
+ blockType: Scratch.BlockType.COMMAND,
+ arguments: {
+ SERVICE: { type: Scratch.ArgumentType.STRING, menu: "SERVICE" },
+ REDIRECT_URI: {
+ type: Scratch.ArgumentType.STRING,
+ defaultValue: "",
+ },
+ },
+ },
+ ],
+ menus: {
+ SERVICE: {
+ items: [
+ { text: "Google", value: "google" },
+ { text: "Microsoft", value: "microsoft" },
+ { text: "Discord", value: "discord" },
+ { text: "Twitter", value: "twitter" },
+ { text: "GitHub", value: "github" },
+ { text: "Facebook", value: "facebook" },
+ { text: "LinkedIn", value: "linkedin" },
+ { text: "Spotify", value: "spotify" },
+ ],
+ },
+ },
+ };
+ }
- setClientId(args) {
- const service = args.SERVICE;
- this.clients[service].clientId = args.CLIENT_ID;
- }
+ setClientId(args) {
+ const service = args.SERVICE;
+ this.clients[service].clientId = args.CLIENT_ID;
+ }
- setClientSecret(args) {
- const service = args.SERVICE;
- this.clients[service].clientSecret = args.CLIENT_SECRET;
- }
+ setClientSecret(args) {
+ const service = args.SERVICE;
+ this.clients[service].clientSecret = args.CLIENT_SECRET;
+ }
- setRedirectUri(args) {
- const service = args.SERVICE;
- this.clients[service].redirectUri = args.REDIRECT_URI;
- }
+ setRedirectUri(args) {
+ const service = args.SERVICE;
+ this.clients[service].redirectUri = args.REDIRECT_URI;
+ }
- async login(args) {
- const service = args.SERVICE;
- const client = this.clients[service];
- const authUrl = `${client.authUrl}?response_type=code&client_id=${client.clientId}&redirect_uri=${client.redirectUri}&scope=${encodeURIComponent(client.scope)}`;
+ async login(args) {
+ const service = args.SERVICE;
+ const client = this.clients[service];
+ const authUrl = `${client.authUrl}?response_type=code&client_id=${client.clientId}&redirect_uri=${client.redirectUri}&scope=${encodeURIComponent(client.scope)}`;
- // Open a new tab for the user to authorize the app
- Scratch.openWindow(authUrl, '_blank');
+ // Open a new tab for the user to authorize the app
+ Scratch.openWindow(authUrl, "_blank");
- // Listen for message with authorization code (assuming your app handles this securely)
- window.addEventListener('message', async (event) => {
- if (event.origin !== window.location.origin) return;
+ // Listen for message with authorization code (assuming your app handles this securely)
+ window.addEventListener(
+ "message",
+ async (event) => {
+ if (event.origin !== window.location.origin) return;
- const authorizationCode = event.data.code;
+ const authorizationCode = event.data.code;
- const tokenResponse = await Scratch.fetch(client.tokenUrl, {
- method: 'POST',
- headers: {
- 'Content-Type': 'application/x-www-form-urlencoded',
- },
- body: `code=${authorizationCode}&client_id=${client.clientId}&client_secret=${client.clientSecret}&redirect_uri=${client.redirectUri}&grant_type=authorization_code`,
- });
+ const tokenResponse = await Scratch.fetch(client.tokenUrl, {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/x-www-form-urlencoded",
+ },
+ body: `code=${authorizationCode}&client_id=${client.clientId}&client_secret=${client.clientSecret}&redirect_uri=${client.redirectUri}&grant_type=authorization_code`,
+ });
- const tokens = await tokenResponse.json();
- this.tokens[service] = tokens;
- }, { once: true });
- }
+ const tokens = await tokenResponse.json();
+ this.tokens[service] = tokens;
+ },
+ { once: true }
+ );
+ }
- isLoggedIn(args) {
- const service = args.SERVICE;
- return !!this.tokens[service];
- }
+ isLoggedIn(args) {
+ const service = args.SERVICE;
+ return !!this.tokens[service];
}
+ }
- Scratch.extensions.register(new OAuthExtension());
+ Scratch.extensions.register(new OAuthExtension());
})(Scratch);
From 79577a1aba091c4de230bd075bef8c1fdf924b1d Mon Sep 17 00:00:00 2001
From: GoodBoi19 <181642507+Thebloxers998@users.noreply.github.com>
Date: Wed, 5 Feb 2025 17:57:20 +0000
Subject: [PATCH 14/20] Update oauth.js
---
extensions/Thebloxers998/oauth.js | 394 ++++++++++++++----------------
1 file changed, 181 insertions(+), 213 deletions(-)
diff --git a/extensions/Thebloxers998/oauth.js b/extensions/Thebloxers998/oauth.js
index 5197922818..736a5917bb 100644
--- a/extensions/Thebloxers998/oauth.js
+++ b/extensions/Thebloxers998/oauth.js
@@ -1,233 +1,201 @@
// Name: OAuth Extension
// ID: oauthExtension
-// Description: Provides OAuth login functionality for various services (Google, Microsoft, Discord, Twitter, GitHub, Facebook, LinkedIn, Spotify).
+// Description: Provides OAuth login functionality for various services (Google, Microsoft, Discord, Twitter, GitHub, Facebook, LinkedIn, Spotify).
// By: Thebloxers998
// License: MPL-2.0
(function (Scratch) {
- class OAuthExtension {
- constructor() {
- this.tokens = {};
- this.clients = {
- google: {
- clientId: "",
- clientSecret: "",
- redirectUri: "",
- authUrl: "https://accounts.google.com/o/oauth2/auth",
- tokenUrl: "https://oauth2.googleapis.com/token",
- scope: "https://www.googleapis.com/auth/userinfo.profile",
- },
- microsoft: {
- clientId: "",
- clientSecret: "",
- redirectUri: "",
- authUrl:
- "https://login.microsoftonline.com/common/oauth2/v2.0/authorize",
- tokenUrl:
- "https://login.microsoftonline.com/common/oauth2/v2.0/token",
- scope: "https://graph.microsoft.com/User.Read",
- },
- discord: {
- clientId: "",
- clientSecret: "",
- redirectUri: "",
- authUrl: "https://discord.com/api/oauth2/authorize",
- tokenUrl: "https://discord.com/api/oauth2/token",
- scope: "identify",
- },
- twitter: {
- clientId: "",
- clientSecret: "",
- redirectUri: "",
- authUrl: "https://api.twitter.com/oauth/authorize",
- tokenUrl: "https://api.twitter.com/oauth/access_token",
- },
- github: {
- clientId: "",
- clientSecret: "",
- redirectUri: "",
- authUrl: "https://github.com/login/oauth/authorize",
- tokenUrl: "https://github.com/login/oauth/access_token",
- scope: "user",
- },
- facebook: {
- clientId: "",
- clientSecret: "",
- redirectUri: "",
- authUrl: "https://www.facebook.com/v10.0/dialog/oauth",
- tokenUrl: "https://graph.facebook.com/v10.0/oauth/access_token",
- scope: "public_profile",
- },
- linkedin: {
- clientId: "",
- clientSecret: "",
- redirectUri: "",
- authUrl: "https://www.linkedin.com/oauth/v2/authorization",
- tokenUrl: "https://www.linkedin.com/oauth/v2/accessToken",
- scope: "r_liteprofile",
- },
- spotify: {
- clientId: "",
- clientSecret: "",
- redirectUri: "",
- authUrl: "https://accounts.spotify.com/authorize",
- tokenUrl: "https://accounts.spotify.com/api/token",
- scope: "user-read-private",
- },
- };
- }
+ "use strict";
- getInfo() {
- return {
- id: "oauthExtension",
- name: Scratch.translate({
- id: "oauthExtension.name",
- default: "OAuth Extension",
- }),
- blockIconURI:
- "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI1NiIgaGVpZ2h0PSIyNTYiPgo8cGF0aCBkPSJNMCAwIEMyMi4wMzg1MjY1MiAxOC44MTE1OTg1NiAzNi40NjU3OTMzNCA0MS4wNjM3MzM3NyA0NC4zNTE1NjI1IDY4LjkxMDE1NjI1IEM0NC42OTMxNjQwNiA3MC4wODgzNTkzNyA0NS4wMzQ3NjU2MyA3MS4yNjY1NjI1IDQ1LjM4NjcxODc1IDcyLjQ4MDQ2ODc1IEM1MS41OTA5Mjc1NSA5OC43NDAxNDMyMiA0OC4xMTkzNTU5NyAxMjguNDA3NTUzODkgMzcuMzUxNTYyNSAxNTIuOTEwMTU2MjUgQzM2LjkyNjY1NTI3IDE1My44OTE0NTUwOCAzNi45MjY2NTUyNyAxNTMuODkxNDU1MDggMzYuNDkzMTY0MDYgMTU0Ljg5MjU3ODEyIEMyNi41NTAxNTk0MyAxNzcuNDE1NDA2MzEgOS4zNjgzODI4MiAxOTcuMDgzNzE0NDMgLTExLjY0ODQzNzUgMjA5LjkxMDE1NjI1IEMtMTIuNzIwOTM3NSAyMTAuNTkzMzU5MzggLTEzLjc5MzQzNzUgMjExLjI3NjU2MjUgLTE0Ljg5ODQzNzUgMjExLjk4MDQ2ODc1IEMtNDIuNzU5MjI3OTQgMjI4Ljk0MjAxNDc4IC03OC4yNTA2MTE4OSAyMzMuOTI2NDg1NDUgLTExMC4wMzAyNzM0NCAyMjYuNzQ3MDcwMzEgQy0xMTcuODE5NDE3MjkgMjI0Ljc3NzM2MzU3IC0xMjUuMjk4MDI2MiAyMjIuMTQwMzMxOTUgLTEzMi42NDg0Mzc1IDIxOC45MTAxNTYyNSBDLTEzMy4zMDI2MzY3MiAyMTguNjI2ODg0NzcgLTEzMy45NTY4MzU5NCAyMTguMzQzNjEzMjggLTEzNC42MzA4NTkzOCAyMTguMDUxNzU3ODEgQy0xNjQuNzI1OTMyMzQgMjA0Ljc2NTg4NDE0IC0xODguNDMyNjIzMzkgMTc5LjE4ODU5MzM5IC0yMDAuNTE5NTMxMjUgMTQ4LjcxMzg2NzE5IEMtMjAyLjQ3ODkwMDc3IDE0My41MTUyMTc0MiAtMjA0LjEzNTA4MjUgMTM4LjI1NDE1Mjc0IC0yMDUuNjQ4NDM3NSAxMzIuOTEwMTU2MjUgQy0yMDUuOTkwMDM5MDYgMTMxLjczMTk1MzEyIC0yMDYuMzMxNjQwNjMgMTMwLjU1Mzc1IC0yMDYuNjgzNTkzNzUgMTI5LjMzOTg0Mzc1IEMtMjE0LjIxNzQzOTk4IDk3LjQ1MjQwMTU3IC0yMDcuODM1NTc0NTYgNjEuNDM0NjUxNjEgLTE5MS4wMDc4MTI1IDMzLjYwNTQ2ODc1IEMtMTcyLjcxOTMxMzkzIDQuNTE1NjA4MTggLTE0NS40NzI3MDQ5NSAtMTQuNzk0NDA5MjYgLTExMi42NDg0Mzc1IC0yNC4wODk4NDM3NSBDLTExMS40NzAyMzQzOCAtMjQuNDMxNDQ1MzEgLTExMC4yOTIwMzEyNSAtMjQuNzczMDQ2ODcgLTEwOS4wNzgxMjUgLTI1LjEyNSBDLTcxLjkxMjE2MjA0IC0zMy45MDU5NjkyNyAtMjkuNDM4MzUxODQgLTI0LjE0NjUyMjQyIDAgMCBaIE0tMTU2LjY0ODQzNzUgMzguOTEwMTU2MjUgQy0xNzIuNjc2OTQzNTIgNTguMDg4NzczMjggLTE4MC4zOTY0OTAzOCA4NC41ODg4MzUyMyAtMTc4LjM3MTA5Mzc1IDEwOS4yOTI5Njg3NSBDLTE3NS40NzE3NjMxNSAxMzUuNzQ1OTA4ODUgLTE2Mi45NTU1MTQxMyAxNTkuNTg0NTMzMDggLTE0Mi42NDg0Mzc1IDE3Ni45MTAxNTYyNSBDLTEyNi41NDMxNjcwNSAxODkuNjk5NjM1NzIgLTEwNi4zMjExMTA2MiAxOTguMDkxNzg4ODEgLTg1LjY0ODQzNzUgMTk4LjkxMDE1NjI1IEMtODQuODg5MTc5NjkgMTk4Ljk1MDExNzE5IC04NC4xMjk5MjE4NyAxOTguOTkwMDc4MTIgLTgzLjM0NzY1NjI1IDE5OS4wMzEyNSBDLTU2LjU4MDI3NzA5IDE5OS43NzYwMDUyMyAtMzEuNDM2MTQxNzYgMTg4LjgxNjI3MjU4IC0xMi4wNTQ0NDMzNiAxNzAuNzY1NjI1IEM1LjI3MjM5MDEyIDE1NC4wMTA3MzQ1MiAxNi4zOTQyODMxMyAxMzAuMDkxODY1NjUgMTcuMzUxNTYyNSAxMDUuOTEwMTU2MjUgQzE3LjM5MTUyMzQ0IDEwNS4xNTA4OTg0NCAxNy40MzE0ODQzNyAxMDQuMzkxNjQwNjIgMTcuNDcyNjU2MjUgMTAzLjYwOTM3NSBDMTguMjE3NDExNDggNzYuODQxOTk1ODQgNy4yNTc2Nzg4MyA1MS42OTc4NjA1MSAtMTAuNzkyOTY4NzUgMzIuMzE2MTYyMTEgQy0yNy41NDc4NTkyMyAxNC45ODkzMjg2MyAtNTEuNDY2NzI4MSAzLjg2NzQzNTYyIC03NS42NDg0Mzc1IDIuOTEwMTU2MjUgQy03Ni43ODczMjQyMiAyLjg1MDIxNDg0IC03Ni43ODczMjQyMiAyLjg1MDIxNDg0IC03Ny45NDkyMTg3NSAyLjc4OTA2MjUgQy0xMDguODU5OTYwMDYgMS45MjkwMjU1MSAtMTM2LjI0OTk3Njk4IDE2LjQzMzI0OTk3IC0xNTYuNjQ4NDM3NSAzOC45MTAxNTYyNSBaICIgZmlsbD0iIzlFOUU5RSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjA4LjY0ODQzNzUsMjcuMDg5ODQzNzUpIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuNzc5NDM0NjYgMC4wMDIyMjA2MSAxLjU1ODg2OTMyIDAuMDA0NDQxMjIgMi4zNjE5MjMyMiAwLjAwNjcyOTEzIEMzLjI0Mjc2MDc3IDAuMDA2ODA0NjYgNC4xMjM1OTgzMyAwLjAwNjg4MDE5IDUuMDMxMTI3OTMgMC4wMDY5NTgwMSBDNS45ODg0MTI5MyAwLjAxMjExOTI5IDYuOTQ1Njk3OTQgMC4wMTcyODA1OCA3LjkzMTk5MTU4IDAuMDIyNTk4MjcgQzkuMzk0ODA4MTIgMC4wMjQ3MjA2OSA5LjM5NDgwODEyIDAuMDI0NzIwNjkgMTAuODg3MTc2NTEgMC4wMjY4ODU5OSBDMTQuMDE1NDI2NzUgMC4wMzI1MDMxOSAxNy4xNDM2MDY1NiAwLjA0NTA1ODU5IDIwLjI3MTgzNTMzIDAuMDU3NzU0NTIgQzIyLjM4NzA2ODY3IDAuMDYyNzY3MyAyNC41MDIzMDMxMyAwLjA2NzMzMDU5IDI2LjYxNzUzODQ1IDAuMDcxNDI2MzkgQzMxLjgxNDgyODI5IDAuMDgyNDc4MiAzNy4wMTIwNzY3OCAwLjA5OTIzMzA1IDQyLjIwOTMzNTMzIDAuMTIwMjU0NTIgQzQ0Ljk5MTE0MDUxIDYuMjUxMzU5MTEgNDcuNTc5MTE3NDUgMTIuNDM1MDc1MzMgNTAuMDM3NDYwMzMgMTguNzAyMjg1NzcgQzUwLjM5MDE1OTkxIDE5LjU5NjU0NzcgNTAuNzQyODU5NSAyMC40OTA4MDk2MyA1MS4xMDYyNDY5NSAyMS40MTIxNzA0MSBDNTIuMjI1NzczMjEgMjQuMjUxNjQ4MTQgNTMuMzQyNjgwOCAyNy4wOTIxNDYzOCA1NC40NTkzMzUzMyAyOS45MzI3NTQ1MiBDNTUuNTU3NzAyMTUgMzIuNzIyNDMxMiA1Ni42NTY2Mzk1MiAzNS41MTE4ODE3NCA1Ny43NTYwODgyNiAzOC4zMDExMzIyIEM1OC40ODMyNDk1MSA0MC4xNDY2MDUxNSA1OS4yMDk1NzI4OCA0MS45OTI0MDg0OCA1OS45MzUwNDMzMyA0My44Mzg1NDY3NSBDNjEuNzc4MzM5NjQgNDguNTIyNzUzMjQgNjMuNjQxMjU5NzcgNTMuMTk3NzI3NjUgNjUuNTM5NDEzNDUgNTcuODYwMDAwNjEgQzY1LjkxMTc3MTI0IDU4Ljc3Nzg2ODUgNjYuMjg0MTI5MDMgNTkuNjk1NzM2MzkgNjYuNjY3NzcwMzkgNjAuNjQxNDE4NDYgQzY3LjM3NzQxMTc2IDYyLjM4NzQ1NzM3IDY4LjA5MTI4MzIxIDY0LjEzMTc4NDgzIDY4LjgwOTk4MjMgNjUuODc0MTE0OTkgQzY5LjEyNTc4MjQ3IDY2LjY1MjMyMTAxIDY5LjQ0MTU4MjY0IDY3LjQzMDUyNzA0IDY5Ljc2Njk1MjUxIDY4LjIzMjMxNTA2IEM3MC4wNDY0MTcyNCA2OC45MTMyNzc0NCA3MC4zMjU4ODE5NiA2OS41OTQyMzk4MSA3MC42MTM4MTUzMSA3MC4yOTU4Mzc0IEM3MS4yMDkzMzUzMyA3Mi4xMjAyNTQ1MiA3MS4yMDkzMzUzMyA3Mi4xMjAyNTQ1MiA3MS4yMDkzMzUzMyA3NS4xMjAyNTQ1MiBDNzkuNDU5MzM1MzMgNzUuMTIwMjU0NTIgODcuNzA5MzM1MzMgNzUuMTIwMjU0NTIgOTYuMjA5MzM1MzMgNzUuMTIwMjU0NTIgQzk2LjIwOTMzNTMzIDgwLjA3MDI1NDUyIDk2LjIwOTMzNTMzIDg1LjAyMDI1NDUyIDk2LjIwOTMzNTMzIDkwLjEyMDI1NDUyIEM5MC4yNjkzMzUzMyA5MC4xMjAyNTQ1MiA4NC4zMjkzMzUzMyA5MC4xMjAyNTQ1MiA3OC4yMDkzMzUzMyA5MC4xMjAyNTQ1MiBDNzkuMTk5MzM1MzMgOTMuNTg1MjU0NTIgNzkuMTk5MzM1MzMgOTMuNTg1MjU0NTIgODAuMjA5MzM1MzMgOTcuMTIwMjU0NTIgQzg1LjQ4OTMzNTMzIDk3LjEyMDI1NDUyIDkwLjc2OTMzNTMzIDk3LjEyMDI1NDUyIDk2LjIwOTMzNTMzIDk3LjEyMDI1NDUyIEM5Ni4yMDkzMzUzMyAxMDIuMDcwMjU0NTIgOTYuMjA5MzM1MzMgMTA3LjAyMDI1NDUyIDk2LjIwOTMzNTMzIDExMi4xMjAyNTQ1MiBDOTEuNzU0MzM1MzMgMTEyLjYxNTI1NDUyIDkxLjc1NDMzNTMzIDExMi42MTUyNTQ1MiA4Ny4yMDkzMzUzMyAxMTMuMTIwMjU0NTIgQzg3LjcxNDY0NzgzIDExNC4zODQ4MjQ4MyA4OC4yMTk5NjAzMyAxMTUuNjQ5Mzk1MTQgODguNzQwNTg1MzMgMTE2Ljk1MjI4NTc3IEM4OS4zOTcxMDI1MiAxMTguNjEyMzM2MzcgOTAuMDUzMzM3ODkgMTIwLjI3MjQ5ODQ1IDkwLjcwOTMzNTMzIDEyMS45MzI3NTQ1MiBDOTEuMjEwMTM2MTEgMTIzLjE4MjgyMjg4IDkxLjIxMDEzNjExIDEyMy4xODI4MjI4OCA5MS43MjEwNTQwOCAxMjQuNDU4MTQ1MTQgQzkyLjE5NDc4NDU1IDEyNS42NjE4MDcyNSA5Mi4xOTQ3ODQ1NSAxMjUuNjYxODA3MjUgOTIuNjc4MDg1MzMgMTI2Ljg4OTc4NTc3IEM5Mi45NzEzNDcwNSAxMjcuNjI4MTc2ODggOTMuMjY0NjA4NzYgMTI4LjM2NjU2Nzk5IDkzLjU2Njc1NzIgMTI5LjEyNzMzNDU5IEM5NC4yMDkzMzUzMyAxMzEuMTIwMjU0NTIgOTQuMjA5MzM1MzMgMTMxLjEyMDI1NDUyIDk0LjIwOTMzNTMzIDEzNC4xMjAyNTQ1MiBDODEuOTk5MzM1MzMgMTM0LjEyMDI1NDUyIDY5Ljc4OTMzNTMzIDEzNC4xMjAyNTQ1MiA1Ny4yMDkzMzUzMyAxMzQuMTIwMjU0NTIgQzUyLjIwOTMzNTMzIDEyMi4xMjAyNTQ1MiA1Mi4yMDkzMzUzMyAxMjIuMTIwMjU0NTIgNDkuMjA5MzM1MzMgMTEyLjEyMDI1NDUyIEMzMC4wNjkzMzUzMyAxMTIuMTIwMjU0NTIgMTAuOTI5MzM1MzMgMTEyLjEyMDI1NDUyIC04Ljc5MDY2NDY3IDExMi4xMjAyNTQ1MiBDLTkuNzgwNjY0NjcgMTE1LjQyMDI1NDUyIC0xMC43NzA2NjQ2NyAxMTguNzIwMjU0NTIgLTExLjc5MDY2NDY3IDEyMi4xMjAyNTQ1MiBDLTEzLjQ0MDY2NDY3IDEyNi4wODAyNTQ1MiAtMTUuMDkwNjY0NjcgMTMwLjA0MDI1NDUyIC0xNi43OTA2NjQ2NyAxMzQuMTIwMjU0NTIgQy0yOS4wMDA2NjQ2NyAxMzQuMTIwMjU0NTIgLTQxLjIxMDY2NDY3IDEzNC4xMjAyNTQ1MiAtNTMuNzkwNjY0NjcgMTM0LjEyMDI1NDUyIEMtNTMuMTI2NDQxNjkgMTMwLjc5OTEzOTYgLTUyLjU1MzU4NjExIDEyOC4yMDE5NDI1MyAtNTEuMzgwNTA4NDIgMTI1LjEzMTk3MzI3IEMtNTAuOTc5Mjg3NzIgMTI0LjA3MzMzMDY5IC01MC45NzkyODc3MiAxMjQuMDczMzMwNjkgLTUwLjU2OTk2MTU1IDEyMi45OTMzMDEzOSBDLTUwLjI5MjE2ODU4IDEyMi4yNzIwNzA5MiAtNTAuMDE0Mzc1NjEgMTIxLjU1MDg0MDQ1IC00OS43MjgxNjQ2NyAxMjAuODA3NzU0NTIgQy00OS4zMDU2NzQ0NCAxMTkuNjk2OTA0OTEgLTQ5LjMwNTY3NDQ0IDExOS42OTY5MDQ5MSAtNDguODc0NjQ5MDUgMTE4LjU2MzYxMzg5IEMtNDguMTgzNDc4OTIgMTE2Ljc0NzgyNzk2IC00Ny40ODc1NDc3OSAxMTQuOTMzODU1NTIgLTQ2Ljc5MDY2NDY3IDExMy4xMjAyNTQ1MiBDLTQ5Ljc2MDY2NDY3IDExMi43OTAyNTQ1MiAtNTIuNzMwNjY0NjcgMTEyLjQ2MDI1NDUyIC01NS43OTA2NjQ2NyAxMTIuMTIwMjU0NTIgQy01NS43OTA2NjQ2NyAxMDcuMTcwMjU0NTIgLTU1Ljc5MDY2NDY3IDEwMi4yMjAyNTQ1MiAtNTUuNzkwNjY0NjcgOTcuMTIwMjU0NTIgQy01MC41MTA2NjQ2NyA5Ny4xMjAyNTQ1MiAtNDUuMjMwNjY0NjcgOTcuMTIwMjU0NTIgLTM5Ljc5MDY2NDY3IDk3LjEyMDI1NDUyIEMtMzkuMTMwNjY0NjcgOTQuODEwMjU0NTIgLTM4LjQ3MDY2NDY3IDkyLjUwMDI1NDUyIC0zNy43OTA2NjQ2NyA5MC4xMjAyNTQ1MiBDLTQzLjczMDY2NDY3IDkwLjEyMDI1NDUyIC00OS42NzA2NjQ2NyA5MC4xMjAyNTQ1MiAtNTUuNzkwNjY0NjcgOTAuMTIwMjU0NTIgQy01NS43OTA2NjQ2NyA4NS4xNzAyNTQ1MiAtNTUuNzkwNjY0NjcgODAuMjIwMjU0NTIgLTU1Ljc5MDY2NDY3IDc1LjEyMDI1NDUyIEMtNDcuNTQwNjY0NjcgNzUuMTIwMjU0NTIgLTM5LjI5MDY2NDY3IDc1LjEyMDI1NDUyIC0zMC43OTA2NjQ2NyA3NS4xMjAyNTQ1MiBDLTMwLjQ2MDY2NDY3IDczLjQ3MDI1NDUyIC0zMC4xMzA2NjQ2NyA3MS44MjAyNTQ1MiAtMjkuNzkwNjY0NjcgNzAuMTIwMjU0NTIgQy0yOS4zNTY1NzU4MyA2OC44MTI0MDQ1NiAtMjguODg3MjM5MjEgNjcuNTE1NzA5OTggLTI4LjM4Mjk0OTgzIDY2LjIzMzI5MTYzIEMtMjcuOTU1MjcwNjEgNjUuMTM2NzU1MTQgLTI3Ljk1NTI3MDYxIDY1LjEzNjc1NTE0IC0yNy41MTg5NTE0MiA2NC4wMTgwNjY0MSBDLTI3LjIwOTAwNzQyIDYzLjIzNTgxMTkyIC0yNi44OTkwNjM0MiA2Mi40NTM1NTc0MyAtMjYuNTc5NzI3MTcgNjEuNjQ3NTk4MjcgQy0yNi4wOTMyMzk1MiA2MC40MDUyNzE4NCAtMjYuMDkzMjM5NTIgNjAuNDA1MjcxODQgLTI1LjU5NjkyMzgzIDU5LjEzNzg0NzkgQy0yNC41NDA0OTM5NyA1Ni40NDI4OTc0OSAtMjMuNDc4MjE0MDQgNTMuNzUwMjk3MzYgLTIyLjQxNTY2NDY3IDUxLjA1Nzc1NDUyIEMtMjEuNjg4NjgwNTUgNDkuMjA3NjI3NzYgLTIwLjk2MjAzODM5IDQ3LjM1NzM2NjU5IC0yMC4yMzU3MzMwMyA0NS41MDY5NzMyNyBDLTE4Ljc3OTY4MzY3IDQxLjc5ODk3MzEgLTE3LjMyMTM4MjQ0IDM4LjA5MTg3MDIyIC0xNS44NjE0NjU0NSAzNC4zODUzOTEyNCBDLTE0LjAwMzg3MjU1IDI5LjY2NjY4MzE1IC0xMi4xNTg0NzMxNyAyNC45NDMzMjA2NSAtMTAuMzE4MDA4NDIgMjAuMjE3OTEwNzcgQy05LjgwNjIzMTMyIDE4LjkwNjEwMjQ1IC05LjI5NDM1Mzc3IDE3LjU5NDMzMzMyIC04Ljc4MjM2Mzg5IDE2LjI4MjYwODAzIEMtNy44NDYzMDQ5OSAxMy44ODM5MzcxMSAtNi45MTE2ODAwOCAxMS40ODQ3MDU5NyAtNS45Nzg2NTI5NSA5LjA4NDg1NDEzIEMtNS41NjcyODA4OCA4LjAzNDM0ODc1IC01LjE1NTkwODgxIDYuOTgzODQzMzggLTQuNzMyMDcwOTIgNS45MDE1MDQ1MiBDLTQuMzc4MzAzODMgNC45OTQ2NDkwNSAtNC4wMjQ1MzY3NCA0LjA4Nzc5MzU4IC0zLjY2MDA0OTQ0IDMuMTUzNDU3NjQgQy0yLjM3OTk5Mzk4IDAuMTU5ODMxNzMgLTIuMzc5OTkzOTggMC4xNTk4MzE3MyAwIDAgWiBNMjAuMjA5MzM1MzMgMzQuMTIwMjU0NTIgQzE2LjgxMTU1MDQyIDQxLjQ0MTY3MiAxMy45NzAzMDk5MyA0OC45Mjk2MjIxMiAxMS4yMDc4NzA0OCA1Ni41MDY3MjkxMyBDMTAuNDUxMzgyMzUgNTguNTc5NTQ2MDkgOS42ODgwNjYyNSA2MC42NDk3NjM3OSA4LjkyNDE3OTA4IDYyLjcxOTg2Mzg5IEM4LjQ0MDY5OTkyIDY0LjAzOTM3NjU3IDcuOTU3NjEyMjcgNjUuMzU5MDMyNzggNy40NzQ5NjAzMyA2Ni42Nzg4NDgyNyBDNy4wMzk1Nzk0NyA2Ny44Njc5Mjc4NiA2LjYwNDE5ODYxIDY5LjA1NzAwNzQ1IDYuMTU1NjI0MzkgNzAuMjgyMTE5NzUgQzUuMTAzOTAxNTkgNzIuOTM3ODUxOCA1LjEwMzkwMTU5IDcyLjkzNzg1MTggNS4yMDkzMzUzMyA3NS4xMjAyNTQ1MiBDMTUuMTA5MzM1MzMgNzUuMTIwMjU0NTIgMjUuMDA5MzM1MzMgNzUuMTIwMjU0NTIgMzUuMjA5MzM1MzMgNzUuMTIwMjU0NTIgQzMzLjQxMTgzNzk3IDY5LjEyODU5NjY3IDMxLjYyMDI3MzkyIDYzLjIzNDQ4Mzc4IDI5LjUxMDExNjU4IDU3LjM2MjQ0MjAyIEMyOS4yNzAyMDQ5MyA1Ni42ODg1MTQxIDI5LjAzMDI5MzI3IDU2LjAxNDU4NjE4IDI4Ljc4MzExMTU3IDU1LjMyMDIzNjIxIEMyOC4wMzE2Nzg1NiA1My4yMTEwNzA1NyAyNy4yNzY4MzI1IDUxLjEwMzE0NjU4IDI2LjUyMTgzNTMzIDQ4Ljk5NTI1NDUyIEMyNi4wMDUzMzA1NCA0Ny41NDc0MTk0MyAyNS40ODkwNTI4MSA0Ni4wOTk1MDMzMyAyNC45NzMwMDcyIDQ0LjY1MTUwNDUyIEMyMy43MjEwNjM0NyA0MS4xNDAxNTA4OCAyMi40NjYwNjAxOSAzNy42Mjk5MDAyNSAyMS4yMDkzMzUzMyAzNC4xMjAyNTQ1MiBDMjAuODc5MzM1MzMgMzQuMTIwMjU0NTIgMjAuNTQ5MzM1MzMgMzQuMTIwMjU0NTIgMjAuMjA5MzM1MzMgMzQuMTIwMjU0NTIgWiBNLTAuNzkwNjY0NjcgOTAuMTIwMjU0NTIgQy0xLjQ1MDY2NDY3IDkyLjQzMDI1NDUyIC0yLjExMDY2NDY3IDk0Ljc0MDI1NDUyIC0yLjc5MDY2NDY3IDk3LjEyMDI1NDUyIEMxMi4zODkzMzUzMyA5Ny4xMjAyNTQ1MiAyNy41NjkzMzUzMyA5Ny4xMjAyNTQ1MiA0My4yMDkzMzUzMyA5Ny4xMjAyNTQ1MiBDNDIuNTQ5MzM1MzMgOTQuODEwMjU0NTIgNDEuODg5MzM1MzMgOTIuNTAwMjU0NTIgNDEuMjA5MzM1MzMgOTAuMTIwMjU0NTIgQzI3LjM0OTMzNTMzIDkwLjEyMDI1NDUyIDEzLjQ4OTMzNTMzIDkwLjEyMDI1NDUyIC0wLjc5MDY2NDY3IDkwLjEyMDI1NDUyIFogIiBmaWxsPSIjOUU5RTlFIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMDcuNzkwNjY0NjcyODUxNTYsNDUuODc5NzQ1NDgzMzk4NDQpIi8+Cjwvc3ZnPgo=",
- menuIconURI:
- "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI1NiIgaGVpZ2h0PSIyNTYiPgo8cGF0aCBkPSJNMCAwIEMyMi4wMzg1MjY1MiAxOC44MTE1OTg1NiAzNi40NjU3OTMzNCA0MS4wNjM3MzM3NyA0NC4zNTE1NjI1IDY4LjkxMDE1NjI1IEM0NC42OTMxNjQwNiA3MC4wODgzNTkzNyA0NS4wMzQ3NjU2MyA3MS4yNjY1NjI1IDQ1LjM4NjcxODc1IDcyLjQ4MDQ2ODc1IEM1MS41OTA5Mjc1NSA5OC43NDAxNDMyMiA0OC4xMTkzNTU5NyAxMjguNDA3NTUzODkgMzcuMzUxNTYyNSAxNTIuOTEwMTU2MjUgQzM2LjkyNjY1NTI3IDE1My44OTE0NTUwOCAzNi45MjY2NTUyNyAxNTMuODkxNDU1MDggMzYuNDkzMTY0MDYgMTU0Ljg5MjU3ODEyIEMyNi41NTAxNTk0MyAxNzcuNDE1NDA2MzEgOS4zNjgzODI4MiAxOTcuMDgzNzE0NDMgLTExLjY0ODQzNzUgMjA5LjkxMDE1NjI1IEMtMTIuNzIwOTM3NSAyMTAuNTkzMzU5MzggLTEzLjc5MzQzNzUgMjExLjI3NjU2MjUgLTE0Ljg5ODQzNzUgMjExLjk4MDQ2ODc1IEMtNDIuNzU5MjI3OTQgMjI4Ljk0MjAxNDc4IC03OC4yNTA2MTE4OSAyMzMuOTI2NDg1NDUgLTExMC4wMzAyNzM0NCAyMjYuNzQ3MDcwMzEgQy0xMTcuODE5NDE3MjkgMjI0Ljc3NzM2MzU3IC0xMjUuMjk4MDI2MiAyMjIuMTQwMzMxOTUgLTEzMi42NDg0Mzc1IDIxOC45MTAxNTYyNSBDLTEzMy4zMDI2MzY3MiAyMTguNjI2ODg0NzcgLTEzMy45NTY4MzU5NCAyMTguMzQzNjEzMjggLTEzNC42MzA4NTkzOCAyMTguMDUxNzU3ODEgQy0xNjQuNzI1OTMyMzQgMjA0Ljc2NTg4NDE0IC0xODguNDMyNjIzMzkgMTc5LjE4ODU5MzM5IC0yMDAuNTE5NTMxMjUgMTQ4LjcxMzg2NzE5IEMtMjAyLjQ3ODkwMDc3IDE0My41MTUyMTc0MiAtMjA0LjEzNTA4MjUgMTM4LjI1NDE1Mjc0IC0yMDUuNjQ4NDM3NSAxMzIuOTEwMTU2MjUgQy0yMDUuOTkwMDM5MDYgMTMxLjczMTk1MzEyIC0yMDYuMzMxNjQwNjMgMTMwLjU1Mzc1IC0yMDYuNjgzNTkzNzUgMTI5LjMzOTg0Mzc1IEMtMjE0LjIxNzQzOTk4IDk3LjQ1MjQwMTU3IC0yMDcuODM1NTc0NTYgNjEuNDM0NjUxNjEgLTE5MS4wMDc4MTI1IDMzLjYwNTQ2ODc1IEMtMTcyLjcxOTMxMzkzIDQuNTE1NjA4MTggLTE0NS40NzI3MDQ5NSAtMTQuNzk0NDA5MjYgLTExMi42NDg0Mzc1IC0yNC4wODk4NDM3NSBDLTExMS40NzAyMzQzOCAtMjQuNDMxNDQ1MzEgLTExMC4yOTIwMzEyNSAtMjQuNzczMDQ2ODcgLTEwOS4wNzgxMjUgLTI1LjEyNSBDLTcxLjkxMjE2MjA0IC0zMy45MDU5NjkyNyAtMjkuNDM4MzUxODQgLTI0LjE0NjUyMjQyIDAgMCBaIE0tMTU2LjY0ODQzNzUgMzguOTEwMTU2MjUgQy0xNzIuNjc2OTQzNTIgNTguMDg4NzczMjggLTE4MC4zOTY0OTAzOCA4NC41ODg4MzUyMyAtMTc4LjM3MTA5Mzc1IDEwOS4yOTI5Njg3NSBDLTE3NS40NzE3NjMxNSAxMzUuNzQ1OTA4ODUgLTE2Mi45NTU1MTQxMyAxNTkuNTg0NTMzMDggLTE0Mi42NDg0Mzc1IDE3Ni45MTAxNTYyNSBDLTEyNi41NDMxNjcwNSAxODkuNjk5NjM1NzIgLTEwNi4zMjExMTA2MiAxOTguMDkxNzg4ODEgLTg1LjY0ODQzNzUgMTk4LjkxMDE1NjI1IEMtODQuODg5MTc5NjkgMTk4Ljk1MDExNzE5IC04NC4xMjk5MjE4NyAxOTguOTkwMDc4MTIgLTgzLjM0NzY1NjI1IDE5OS4wMzEyNSBDLTU2LjU4MDI3NzA5IDE5OS43NzYwMDUyMyAtMzEuNDM2MTQxNzYgMTg4LjgxNjI3MjU4IC0xMi4wNTQ0NDMzNiAxNzAuNzY1NjI1IEM1LjI3MjM5MDEyIDE1NC4wMTA3MzQ1MiAxNi4zOTQyODMxMyAxMzAuMDkxODY1NjUgMTcuMzUxNTYyNSAxMDUuOTEwMTU2MjUgQzE3LjM5MTUyMzQ0IDEwNS4xNTA4OTg0NCAxNy40MzE0ODQzNyAxMDQuMzkxNjQwNjIgMTcuNDcyNjU2MjUgMTAzLjYwOTM3NSBDMTguMjE3NDExNDggNzYuODQxOTk1ODQgNy4yNTc2Nzg4MyA1MS42OTc4NjA1MSAtMTAuNzkyOTY4NzUgMzIuMzE2MTYyMTEgQy0yNy41NDc4NTkyMyAxNC45ODkzMjg2MyAtNTEuNDY2NzI4MSAzLjg2NzQzNTYyIC03NS42NDg0Mzc1IDIuOTEwMTU2MjUgQy03Ni43ODczMjQyMiAyLjg1MDIxNDg0IC03Ni43ODczMjQyMiAyLjg1MDIxNDg0IC03Ny45NDkyMTg3NSAyLjc4OTA2MjUgQy0xMDguODU5OTYwMDYgMS45MjkwMjU1MSAtMTM2LjI0OTk3Njk4IDE2LjQzMzI0OTk3IC0xNTYuNjQ4NDM3NSAzOC45MTAxNTYyNSBaICIgZmlsbD0iIzlFOUU5RSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjA4LjY0ODQzNzUsMjcuMDg5ODQzNzUpIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuNzc5NDM0NjYgMC4wMDIyMjA2MSAxLjU1ODg2OTMyIDAuMDA0NDQxMjIgMi4zNjE5MjMyMiAwLjAwNjcyOTEzIEMzLjI0Mjc2MDc3IDAuMDA2ODA0NjYgNC4xMjM1OTgzMyAwLjAwNjg4MDE5IDUuMDMxMTI3OTMgMC4wMDY5NTgwMSBDNS45ODg0MTI5MyAwLjAxMjExOTI5IDYuOTQ1Njk3OTQgMC4wMTcyODA1OCA3LjkzMTk5MTU4IDAuMDIyNTk4MjcgQzkuMzk0ODA4MTIgMC4wMjQ3MjA2OSA5LjM5NDgwODEyIDAuMDI0NzIwNjkgMTAuODg3MTc2NTEgMC4wMjY4ODU5OSBDMTQuMDE1NDI2NzUgMC4wMzI1MDMxOSAxNy4xNDM2MDY1NiAwLjA0NTA1ODU5IDIwLjI3MTgzNTMzIDAuMDU3NzU0NTIgQzIyLjM4NzA2ODY3IDAuMDYyNzY3MyAyNC41MDIzMDMxMyAwLjA2NzMzMDU5IDI2LjYxNzUzODQ1IDAuMDcxNDI2MzkgQzMxLjgxNDgyODI5IDAuMDgyNDc4MiAzNy4wMTIwNzY3OCAwLjA5OTIzMzA1IDQyLjIwOTMzNTMzIDAuMTIwMjU0NTIgQzQ0Ljk5MTE0MDUxIDYuMjUxMzU5MTEgNDcuNTc5MTE3NDUgMTIuNDM1MDc1MzMgNTAuMDM3NDYwMzMgMTguNzAyMjg1NzcgQzUwLjM5MDE1OTkxIDE5LjU5NjU0NzcgNTAuNzQyODU5NSAyMC40OTA4MDk2MyA1MS4xMDYyNDY5NSAyMS40MTIxNzA0MSBDNTIuMjI1NzczMjEgMjQuMjUxNjQ4MTQgNTMuMzQyNjgwOCAyNy4wOTIxNDYzOCA1NC40NTkzMzUzMyAyOS45MzI3NTQ1MiBDNTUuNTU3NzAyMTUgMzIuNzIyNDMxMiA1Ni42NTY2Mzk1MiAzNS41MTE4ODE3NCA1Ny43NTYwODgyNiAzOC4zMDExMzIyIEM1OC40ODMyNDk1MSA0MC4xNDY2MDUxNSA1OS4yMDk1NzI4OCA0MS45OTI0MDg0OCA1OS45MzUwNDMzMyA0My44Mzg1NDY3NSBDNjEuNzc4MzM5NjQgNDguNTIyNzUzMjQgNjMuNjQxMjU5NzcgNTMuMTk3NzI3NjUgNjUuNTM5NDEzNDUgNTcuODYwMDAwNjEgQzY1LjkxMTc3MTI0IDU4Ljc3Nzg2ODUgNjYuMjg0MTI5MDMgNTkuNjk1NzM2MzkgNjYuNjY3NzcwMzkgNjAuNjQxNDE4NDYgQzY3LjM3NzQxMTc2IDYyLjM4NzQ1NzM3IDY4LjA5MTI4MzIxIDY0LjEzMTc4NDgzIDY4LjgwOTk4MjMgNjUuODc0MTE0OTkgQzY5LjEyNTc4MjQ3IDY2LjY1MjMyMTAxIDY5LjQ0MTU4MjY0IDY3LjQzMDUyNzA0IDY5Ljc2Njk1MjUxIDY4LjIzMjMxNTA2IEM3MC4wNDY0MTcyNCA2OC45MTMyNzc0NCA3MC4zMjU4ODE5NiA2OS41OTQyMzk4MSA3MC42MTM4MTUzMSA3MC4yOTU4Mzc0IEM3MS4yMDkzMzUzMyA3Mi4xMjAyNTQ1MiA3MS4yMDkzMzUzMyA3Mi4xMjAyNTQ1MiA3MS4yMDkzMzUzMyA3NS4xMjAyNTQ1MiBDNzkuNDU5MzM1MzMgNzUuMTIwMjU0NTIgODcuNzA5MzM1MzMgNzUuMTIwMjU0NTIgOTYuMjA5MzM1MzMgNzUuMTIwMjU0NTIgQzk2LjIwOTMzNTMzIDgwLjA3MDI1NDUyIDk2LjIwOTMzNTMzIDg1LjAyMDI1NDUyIDk2LjIwOTMzNTMzIDkwLjEyMDI1NDUyIEM5MC4yNjkzMzUzMyA5MC4xMjAyNTQ1MiA4NC4zMjkzMzUzMyA5MC4xMjAyNTQ1MiA3OC4yMDkzMzUzMyA5MC4xMjAyNTQ1MiBDNzkuMTk5MzM1MzMgOTMuNTg1MjU0NTIgNzkuMTk5MzM1MzMgOTMuNTg1MjU0NTIgODAuMjA5MzM1MzMgOTcuMTIwMjU0NTIgQzg1LjQ4OTMzNTMzIDk3LjEyMDI1NDUyIDkwLjc2OTMzNTMzIDk3LjEyMDI1NDUyIDk2LjIwOTMzNTMzIDk3LjEyMDI1NDUyIEM5Ni4yMDkzMzUzMyAxMDIuMDcwMjU0NTIgOTYuMjA5MzM1MzMgMTA3LjAyMDI1NDUyIDk2LjIwOTMzNTMzIDExMi4xMjAyNTQ1MiBDOTEuNzU0MzM1MzMgMTEyLjYxNTI1NDUyIDkxLjc1NDMzNTMzIDExMi42MTUyNTQ1MiA4Ny4yMDkzMzUzMyAxMTMuMTIwMjU0NTIgQzg3LjcxNDY0NzgzIDExNC4zODQ4MjQ4MyA4OC4yMTk5NjAzMyAxMTUuNjQ5Mzk1MTQgODguNzQwNTg1MzMgMTE2Ljk1MjI4NTc3IEM4OS4zOTcxMDI1MiAxMTguNjEyMzM2MzcgOTAuMDUzMzM3ODkgMTIwLjI3MjQ5ODQ1IDkwLjcwOTMzNTMzIDEyMS45MzI3NTQ1MiBDOTEuMjEwMTM2MTEgMTIzLjE4MjgyMjg4IDkxLjIxMDEzNjExIDEyMy4xODI4MjI4OCA5MS43MjEwNTQwOCAxMjQuNDU4MTQ1MTQgQzkyLjE5NDc4NDU1IDEyNS42NjE4MDcyNSA5Mi4xOTQ3ODQ1NSAxMjUuNjYxODA3MjUgOTIuNjc4MDg1MzMgMTI2Ljg4OTc4NTc3IEM5Mi45NzEzNDcwNSAxMjcuNjI4MTc2ODggOTMuMjY0NjA4NzYgMTI4LjM2NjU2Nzk5IDkzLjU2Njc1NzIgMTI5LjEyNzMzNDU5IEM5NC4yMDkzMzUzMyAxMzEuMTIwMjU0NTIgOTQuMjA5MzM1MzMgMTMxLjEyMDI1NDUyIDk0LjIwOTMzNTMzIDEzNC4xMjAyNTQ1MiBDODEuOTk5MzM1MzMgMTM0LjEyMDI1NDUyIDY5Ljc4OTMzNTMzIDEzNC4xMjAyNTQ1MiA1Ny4yMDkzMzUzMyAxMzQuMTIwMjU0NTIgQzUyLjIwOTMzNTMzIDEyMi4xMjAyNTQ1MiA1Mi4yMDkzMzUzMyAxMjIuMTIwMjU0NTIgNDkuMjA5MzM1MzMgMTEyLjEyMDI1NDUyIEMzMC4wNjkzMzUzMyAxMTIuMTIwMjU0NTIgMTAuOTI5MzM1MzMgMTEyLjEyMDI1NDUyIC04Ljc5MDY2NDY3IDExMi4xMjAyNTQ1MiBDLTkuNzgwNjY0NjcgMTE1LjQyMDI1NDUyIC0xMC43NzA2NjQ2NyAxMTguNzIwMjU0NTIgLTExLjc5MDY2NDY3IDEyMi4xMjAyNTQ1MiBDLTEzLjQ0MDY2NDY3IDEyNi4wODAyNTQ1MiAtMTUuMDkwNjY0NjcgMTMwLjA0MDI1NDUyIC0xNi43OTA2NjQ2NyAxMzQuMTIwMjU0NTIgQy0yOS4wMDA2NjQ2NyAxMzQuMTIwMjU0NTIgLTQxLjIxMDY2NDY3IDEzNC4xMjAyNTQ1MiAtNTMuNzkwNjY0NjcgMTM0LjEyMDI1NDUyIEMtNTMuMTI2NDQxNjkgMTMwLjc5OTEzOTYgLTUyLjU1MzU4NjExIDEyOC4yMDE5NDI1MyAtNTEuMzgwNTA4NDIgMTI1LjEzMTk3MzI3IEMtNTAuOTc5Mjg3NzIgMTI0LjA3MzMzMDY5IC01MC45NzkyODc3MiAxMjQuMDczMzMwNjkgLTUwLjU2OTk2MTU1IDEyMi45OTMzMDEzOSBDLTUwLjI5MjE2ODU4IDEyMi4yNzIwNzA5MiAtNTAuMDE0Mzc1NjEgMTIxLjU1MDg0MDQ1IC00OS43MjgxNjQ2NyAxMjAuODA3NzU0NTIgQy00OS4zMDU2NzQ0NCAxMTkuNjk2OTA0OTEgLTQ5LjMwNTY3NDQ0IDExOS42OTY5MDQ5MSAtNDguODc0NjQ5MDUgMTE4LjU2MzYxMzg5IEMtNDguMTgzNDc4OTIgMTE2Ljc0NzgyNzk2IC00Ny40ODc1NDc3OSAxMTQuOTMzODU1NTIgLTQ2Ljc5MDY2NDY3IDExMy4xMjAyNTQ1MiBDLTQ5Ljc2MDY2NDY3IDExMi43OTAyNTQ1MiAtNTIuNzMwNjY0NjcgMTEyLjQ2MDI1NDUyIC01NS43OTA2NjQ2NyAxMTIuMTIwMjU0NTIgQy01NS43OTA2NjQ2NyAxMDcuMTcwMjU0NTIgLTU1Ljc5MDY2NDY3IDEwMi4yMjAyNTQ1MiAtNTUuNzkwNjY0NjcgOTcuMTIwMjU0NTIgQy01MC41MTA2NjQ2NyA5Ny4xMjAyNTQ1MiAtNDUuMjMwNjY0NjcgOTcuMTIwMjU0NTIgLTM5Ljc5MDY2NDY3IDk3LjEyMDI1NDUyIEMtMzkuMTMwNjY0NjcgOTQuODEwMjU0NTIgLTM4LjQ3MDY2NDY3IDkyLjUwMDI1NDUyIC0zNy43OTA2NjQ2NyA5MC4xMjAyNTQ1MiBDLTQzLjczMDY2NDY3IDkwLjEyMDI1NDUyIC00OS42NzA2NjQ2NyA5MC4xMjAyNTQ1MiAtNTUuNzkwNjY0NjcgOTAuMTIwMjU0NTIgQy01NS43OTA2NjQ2NyA4NS4xNzAyNTQ1MiAtNTUuNzkwNjY0NjcgODAuMjIwMjU0NTIgLTU1Ljc5MDY2NDY3IDc1LjEyMDI1NDUyIEMtNDcuNTQwNjY0NjcgNzUuMTIwMjU0NTIgLTM5LjI5MDY2NDY3IDc1LjEyMDI1NDUyIC0zMC43OTA2NjQ2NyA3NS4xMjAyNTQ1MiBDLTMwLjQ2MDY2NDY3IDczLjQ3MDI1NDUyIC0zMC4xMzA2NjQ2NyA3MS44MjAyNTQ1MiAtMjkuNzkwNjY0NjcgNzAuMTIwMjU0NTIgQy0yOS4zNTY1NzU4MyA2OC44MTI0MDQ1NiAtMjguODg3MjM5MjEgNjcuNTE1NzA5OTggLTI4LjM4Mjk0OTgzIDY2LjIzMzI5MTYzIEMtMjcuOTU1MjcwNjEgNjUuMTM2NzU1MTQgLTI3Ljk1NTI3MDYxIDY1LjEzNjc1NTE0IC0yNy41MTg5NTE0MiA2NC4wMTgwNjY0MSBDLTI3LjIwOTAwNzQyIDYzLjIzNTgxMTkyIC0yNi44OTkwNjM0MiA2Mi40NTM1NTc0MyAtMjYuNTc5NzI3MTcgNjEuNjQ3NTk4MjcgQy0yNi4wOTMyMzk1MiA2MC40MDUyNzE4NCAtMjYuMDkzMjM5NTIgNjAuNDA1MjcxODQgLTI1LjU5NjkyMzgzIDU5LjEzNzg0NzkgQy0yNC41NDA0OTM5NyA1Ni40NDI4OTc0OSAtMjMuNDc4MjE0MDQgNTMuNzUwMjk3MzYgLTIyLjQxNTY2NDY3IDUxLjA1Nzc1NDUyIEMtMjEuNjg4NjgwNTUgNDkuMjA3NjI3NzYgLTIwLjk2MjAzODM5IDQ3LjM1NzM2NjU5IC0yMC4yMzU3MzMwMyA0NS41MDY5NzMyNyBDLTE4Ljc3OTY4MzY3IDQxLjc5ODk3MzEgLTE3LjMyMTM4MjQ0IDM4LjA5MTg3MDIyIC0xNS44NjE0NjU0NSAzNC4zODUzOTEyNCBDLTE0LjAwMzg3MjU1IDI5LjY2NjY4MzE1IC0xMi4xNTg0NzMxNyAyNC45NDMzMjA2NSAtMTAuMzE4MDA4NDIgMjAuMjE3OTEwNzcgQy05LjgwNjIzMTMyIDE4LjkwNjEwMjQ1IC05LjI5NDM1Mzc3IDE3LjU5NDMzMzMyIC04Ljc4MjM2Mzg5IDE2LjI4MjYwODAzIEMtNy44NDYzMDQ5OSAxMy44ODM5MzcxMSAtNi45MTE2ODAwOCAxMS40ODQ3MDU5NyAtNS45Nzg2NTI5NSA5LjA4NDg1NDEzIEMtNS41NjcyODA4OCA4LjAzNDM0ODc1IC01LjE1NTkwODgxIDYuOTgzODQzMzggLTQuNzMyMDcwOTIgNS45MDE1MDQ1MiBDLTQuMzc4MzAzODMgNC45OTQ2NDkwNSAtNC4wMjQ1MzY3NCA0LjA4Nzc5MzU4IC0zLjY2MDA0OTQ0IDMuMTUzNDU3NjQgQy0yLjM3OTk5Mzk4IDAuMTU5ODMxNzMgLTIuMzc5OTkzOTggMC4xNTk4MzE3MyAwIDAgWiBNMjAuMjA5MzM1MzMgMzQuMTIwMjU0NTIgQzE2LjgxMTU1MDQyIDQxLjQ0MTY3MiAxMy45NzAzMDk5MyA0OC45Mjk2MjIxMiAxMS4yMDc4NzA0OCA1Ni41MDY3MjkxMyBDMTAuNDUxMzgyMzUgNTguNTc5NTQ2MDkgOS42ODgwNjYyNSA2MC42NDk3NjM3OSA4LjkyNDE3OTA4IDYyLjcxOTg2Mzg5IEM4LjQ0MDY5OTkyIDY0LjAzOTM3NjU3IDcuOTU3NjEyMjcgNjUuMzU5MDMyNzggNy40NzQ5NjAzMyA2Ni42Nzg4NDgyNyBDNy4wMzk1Nzk0NyA2Ny44Njc5Mjc4NiA2LjYwNDE5ODYxIDY5LjA1NzAwNzQ1IDYuMTU1NjI0MzkgNzAuMjgyMTE5NzUgQzUuMTAzOTAxNTkgNzIuOTM3ODUxOCA1LjEwMzkwMTU5IDcyLjkzNzg1MTggNS4yMDkzMzUzMyA3NS4xMjAyNTQ1MiBDMTUuMTA5MzM1MzMgNzUuMTIwMjU0NTIgMjUuMDA5MzM1MzMgNzUuMTIwMjU0NTIgMzUuMjA5MzM1MzMgNzUuMTIwMjU0NTIgQzMzLjQxMTgzNzk3IDY5LjEyODU5NjY3IDMxLjYyMDI3MzkyIDYzLjIzNDQ4Mzc4IDI5LjUxMDExNjU4IDU3LjM2MjQ0MjAyIEMyOS4yNzAyMDQ5MyA1Ni42ODg1MTQxIDI5LjAzMDI5MzI3IDU2LjAxNDU4NjE4IDI4Ljc4MzExMTU3IDU1LjMyMDIzNjIxIEMyOC4wMzE2Nzg1NiA1My4yMTEwNzA1NyAyNy4yNzY4MzI1IDUxLjEwMzE0NjU4IDI2LjUyMTgzNTMzIDQ4Ljk5NTI1NDUyIEMyNi4wMDUzMzA1NCA0Ny41NDc0MTk0MyAyNS40ODkwNTI4MSA0Ni4wOTk1MDMzMyAyNC45NzMwMDcyIDQ0LjY1MTUwNDUyIEMyMy43MjEwNjM0NyA0MS4xNDAxNTA4OCAyMi40NjYwNjAxOSAzNy42Mjk5MDAyNSAyMS4yMDkzMzUzMyAzNC4xMjAyNTQ1MiBDMjAuODc5MzM1MzMgMzQuMTIwMjU0NTIgMjAuNTQ5MzM1MzMgMzQuMTIwMjU0NTIgMjAuMjA5MzM1MzMgMzQuMTIwMjU0NTIgWiBNLTAuNzkwNjY0NjcgOTAuMTIwMjU0NTIgQy0xLjQ1MDY2NDY3IDkyLjQzMDI1NDUyIC0yLjExMDY2NDY3IDk0Ljc0MDI1NDUyIC0yLjc5MDY2NDY3IDk3LjEyMDI1NDUyIEMxMi4zODkzMzUzMyA5Ny4xMjAyNTQ1MiAyNy41NjkzMzUzMyA5Ny4xMjAyNTQ1MiA0My4yMDkzMzUzMyA5Ny4xMjAyNTQ1MiBDNDIuNTQ5MzM1MzMgOTQuODEwMjU0NTIgNDEuODg5MzM1MzMgOTIuNTAwMjU0NTIgNDEuMjA5MzM1MzMgOTAuMTIwMjU0NTIgQzI3LjM0OTMzNTMzIDkwLjEyMDI1NDUyIDEzLjQ4OTMzNTMzIDkwLjEyMDI1NDUyIC0wLjc5MDY2NDY3IDkwLjEyMDI1NDUyIFogIiBmaWxsPSIjOUU5RTlFIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMDcuNzkwNjY0NjcyODUxNTYsNDUuODc5NzQ1NDgzMzk4NDQpIi8+Cjwvc3ZnPgo=",
- color1: "#FFAB19",
- color2: "#FF8C00",
- color3: "#E76F00",
- blocks: [
- {
- opcode: "login",
- text: Scratch.translate({
- id: "oauthExtension.login",
- default: "Log in with [SERVICE]",
- }),
- blockType: Scratch.BlockType.COMMAND,
- arguments: {
- SERVICE: { type: Scratch.ArgumentType.STRING, menu: "SERVICE" },
- },
- },
- {
- opcode: "isLoggedIn",
- text: Scratch.translate({
- id: "oauthExtension.isLoggedIn",
- default: "Is user logged in with [SERVICE]?",
- }),
- blockType: Scratch.BlockType.BOOLEAN,
- arguments: {
- SERVICE: { type: Scratch.ArgumentType.STRING, menu: "SERVICE" },
- },
- },
- {
- opcode: "setClientId",
- text: Scratch.translate({
- id: "oauthExtension.setClientId",
- default: "Set client ID for [SERVICE] to [CLIENT_ID]",
- }),
- blockType: Scratch.BlockType.COMMAND,
- arguments: {
- SERVICE: { type: Scratch.ArgumentType.STRING, menu: "SERVICE" },
- CLIENT_ID: {
- type: Scratch.ArgumentType.STRING,
- defaultValue: "",
- },
- },
- },
- {
- opcode: "setClientSecret",
- text: Scratch.translate({
- id: "oauthExtension.setClientSecret",
- default: "Set client secret for [SERVICE] to [CLIENT_SECRET]",
- }),
- blockType: Scratch.BlockType.COMMAND,
- arguments: {
- SERVICE: { type: Scratch.ArgumentType.STRING, menu: "SERVICE" },
- CLIENT_SECRET: {
- type: Scratch.ArgumentType.STRING,
- defaultValue: "",
- },
- },
- },
- {
- opcode: "setRedirectUri",
- text: Scratch.translate({
- id: "oauthExtension.setRedirectUri",
- default: "Set redirect URI for [SERVICE] to [REDIRECT_URI]",
- }),
- blockType: Scratch.BlockType.COMMAND,
- arguments: {
- SERVICE: { type: Scratch.ArgumentType.STRING, menu: "SERVICE" },
- REDIRECT_URI: {
- type: Scratch.ArgumentType.STRING,
- defaultValue: "",
- },
- },
- },
- ],
- menus: {
- SERVICE: {
- items: [
- { text: "Google", value: "google" },
- { text: "Microsoft", value: "microsoft" },
- { text: "Discord", value: "discord" },
- { text: "Twitter", value: "twitter" },
- { text: "GitHub", value: "github" },
- { text: "Facebook", value: "facebook" },
- { text: "LinkedIn", value: "linkedin" },
- { text: "Spotify", value: "spotify" },
- ],
- },
- },
- };
- }
+ class OAuthExtension {
+ constructor() {
+ this.tokens = {};
+ this.clients = {
+ google: {
+ clientId: "",
+ clientSecret: "",
+ redirectUri: "",
+ authUrl: "https://accounts.google.com/o/oauth2/auth",
+ tokenUrl: "https://oauth2.googleapis.com/token",
+ scope: "https://www.googleapis.com/auth/userinfo.profile",
+ },
+ microsoft: {
+ clientId: "",
+ clientSecret: "",
+ redirectUri: "",
+ authUrl: "https://login.microsoftonline.com/common/oauth2/v2.0/authorize",
+ tokenUrl: "https://login.microsoftonline.com/common/oauth2/v2.0/token",
+ scope: "https://graph.microsoft.com/User.Read",
+ },
+ discord: {
+ clientId: "",
+ clientSecret: "",
+ redirectUri: "",
+ authUrl: "https://discord.com/api/oauth2/authorize",
+ tokenUrl: "https://discord.com/api/oauth2/token",
+ scope: "identify",
+ },
+ twitter: {
+ clientId: "",
+ clientSecret: "",
+ redirectUri: "",
+ authUrl: "https://api.twitter.com/oauth/authorize",
+ tokenUrl: "https://api.twitter.com/oauth/access_token",
+ },
+ github: {
+ clientId: "",
+ clientSecret: "",
+ redirectUri: "",
+ authUrl: "https://github.com/login/oauth/authorize",
+ tokenUrl: "https://github.com/login/oauth/access_token",
+ scope: "user",
+ },
+ facebook: {
+ clientId: "",
+ clientSecret: "",
+ redirectUri: "",
+ authUrl: "https://www.facebook.com/v10.0/dialog/oauth",
+ tokenUrl: "https://graph.facebook.com/v10.0/oauth/access_token",
+ scope: "public_profile",
+ },
+ linkedin: {
+ clientId: "",
+ clientSecret: "",
+ redirectUri: "",
+ authUrl: "https://www.linkedin.com/oauth/v2/authorization",
+ tokenUrl: "https://www.linkedin.com/oauth/v2/accessToken",
+ scope: "r_liteprofile",
+ },
+ spotify: {
+ clientId: "",
+ clientSecret: "",
+ redirectUri: "",
+ authUrl: "https://accounts.spotify.com/authorize",
+ tokenUrl: "https://accounts.spotify.com/api/token",
+ scope: "user-read-private",
+ },
+ };
+ }
- setClientId(args) {
- const service = args.SERVICE;
- this.clients[service].clientId = args.CLIENT_ID;
- }
+ getInfo() {
+ return {
+ id: "oauthExtension",
+ name: Scratch.translate({ id: "oauthExtension.name", default: "OAuth Extension" }),
+ blockIconURI: "data:image/svg+xml;base64,PLACEHOLDER_FOR_BLOCK_ICON",
+ menuIconURI: "data:image/svg+xml;base64,PLACEHOLDER_FOR_MENU_ICON",
+ color1: "#FFAB19",
+ color2: "#FF8C00",
+ color3: "#E76F00",
+ blocks: [
+ {
+ opcode: "login",
+ text: Scratch.translate({ id: "oauthExtension.login", default: "Log in with [SERVICE]" }),
+ blockType: Scratch.BlockType.COMMAND,
+ arguments: {
+ SERVICE: { type: Scratch.ArgumentType.STRING, menu: "SERVICE" },
+ },
+ },
+ {
+ opcode: "isLoggedIn",
+ text: Scratch.translate({ id: "oauthExtension.isLoggedIn", default: "Is user logged in with [SERVICE]?" }),
+ blockType: Scratch.BlockType.BOOLEAN,
+ arguments: {
+ SERVICE: { type: Scratch.ArgumentType.STRING, menu: "SERVICE" },
+ },
+ },
+ {
+ opcode: "setClientId",
+ text: Scratch.translate({ id: "oauthExtension.setClientId", default: "Set client ID for [SERVICE] to [CLIENT_ID]" }),
+ blockType: Scratch.BlockType.COMMAND,
+ arguments: {
+ SERVICE: { type: Scratch.ArgumentType.STRING, menu: "SERVICE" },
+ CLIENT_ID: { type: Scratch.ArgumentType.STRING, defaultValue: "" },
+ },
+ },
+ {
+ opcode: "setClientSecret",
+ text: Scratch.translate({ id: "oauthExtension.setClientSecret", default: "Set client secret for [SERVICE] to [CLIENT_SECRET]" }),
+ blockType: Scratch.BlockType.COMMAND,
+ arguments: {
+ SERVICE: { type: Scratch.ArgumentType.STRING, menu: "SERVICE" },
+ CLIENT_SECRET: { type: Scratch.ArgumentType.STRING, defaultValue: "" },
+ },
+ },
+ {
+ opcode: "setRedirectUri",
+ text: Scratch.translate({ id: "oauthExtension.setRedirectUri", default: "Set redirect URI for [SERVICE] to [REDIRECT_URI]" }),
+ blockType: Scratch.BlockType.COMMAND,
+ arguments: {
+ SERVICE: { type: Scratch.ArgumentType.STRING, menu: "SERVICE" },
+ REDIRECT_URI: { type: Scratch.ArgumentType.STRING, defaultValue: "" },
+ },
+ },
+ ],
+ menus: {
+ SERVICE: {
+ items: [
+ { text: "Google", value: "google" },
+ { text: "Microsoft", value: "microsoft" },
+ { text: "Discord", value: "discord" },
+ { text: "Twitter", value: "twitter" },
+ { text: "GitHub", value: "github" },
+ { text: "Facebook", value: "facebook" },
+ { text: "LinkedIn", value: "linkedin" },
+ { text: "Spotify", value: "spotify" },
+ ],
+ },
+ },
+ };
+ }
- setClientSecret(args) {
- const service = args.SERVICE;
- this.clients[service].clientSecret = args.CLIENT_SECRET;
- }
+ setClientId(args) {
+ const service = args.SERVICE;
+ this.clients[service].clientId = args.CLIENT_ID;
+ }
- setRedirectUri(args) {
- const service = args.SERVICE;
- this.clients[service].redirectUri = args.REDIRECT_URI;
- }
+ setClientSecret(args) {
+ const service = args.SERVICE;
+ this.clients[service].clientSecret = args.CLIENT_SECRET;
+ }
- async login(args) {
- const service = args.SERVICE;
- const client = this.clients[service];
- const authUrl = `${client.authUrl}?response_type=code&client_id=${client.clientId}&redirect_uri=${client.redirectUri}&scope=${encodeURIComponent(client.scope)}`;
+ setRedirectUri(args) {
+ const service = args.SERVICE;
+ this.clients[service].redirectUri = args.REDIRECT_URI;
+ }
- // Open a new tab for the user to authorize the app
- Scratch.openWindow(authUrl, "_blank");
+ async login(args) {
+ const service = args.SERVICE;
+ const client = this.clients[service];
+ const authUrl = `${client.authUrl}?response_type=code&client_id=${client.clientId}&redirect_uri=${client.redirectUri}&scope=${encodeURIComponent(client.scope)}`;
- // Listen for message with authorization code (assuming your app handles this securely)
- window.addEventListener(
- "message",
- async (event) => {
- if (event.origin !== window.location.origin) return;
+ // Open a new tab for the user to authorize the app
+ Scratch.openWindow(authUrl, "_blank");
- const authorizationCode = event.data.code;
+ // Listen for message with authorization code (assuming your app handles this securely)
+ window.addEventListener("message", async (event) => {
+ if (event.origin !== window.location.origin) return;
- const tokenResponse = await Scratch.fetch(client.tokenUrl, {
- method: "POST",
- headers: {
- "Content-Type": "application/x-www-form-urlencoded",
- },
- body: `code=${authorizationCode}&client_id=${client.clientId}&client_secret=${client.clientSecret}&redirect_uri=${client.redirectUri}&grant_type=authorization_code`,
- });
+ const authorizationCode = event.data.code;
- const tokens = await tokenResponse.json();
- this.tokens[service] = tokens;
- },
- { once: true }
- );
- }
+ // Ensure there is an await expression
+ const tokenResponse = await Scratch.fetch(client.tokenUrl, {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/x-www-form-urlencoded",
+ },
+ body: `code=${authorizationCode}&client_id=${client.clientId}&client_secret=${client.clientSecret}&redirect_uri=${client.redirectUri}&grant_type=authorization_code`,
+ });
+
+ const tokens = await tokenResponse.json();
+ this.tokens[service] = tokens;
+ }, { once: true });
+ }
- isLoggedIn(args) {
- const service = args.SERVICE;
- return !!this.tokens[service];
+ isLoggedIn(args) {
+ const service = args.SERVICE;
+ return !!this.tokens[service];
+ }
}
- }
- Scratch.extensions.register(new OAuthExtension());
+ Scratch.extensions.register(new OAuthExtension());
})(Scratch);
From 50e0f790f867f75eb71aef50c35e1127595d171e Mon Sep 17 00:00:00 2001
From: GoodBoi19 <181642507+Thebloxers998@users.noreply.github.com>
Date: Wed, 5 Feb 2025 18:02:42 +0000
Subject: [PATCH 15/20] Update oauth.js
---
extensions/Thebloxers998/oauth.js | 3 +++
1 file changed, 3 insertions(+)
diff --git a/extensions/Thebloxers998/oauth.js b/extensions/Thebloxers998/oauth.js
index 736a5917bb..272a454c14 100644
--- a/extensions/Thebloxers998/oauth.js
+++ b/extensions/Thebloxers998/oauth.js
@@ -188,6 +188,9 @@
const tokens = await tokenResponse.json();
this.tokens[service] = tokens;
+
+ // Await for a token response
+ await tokenResponse;
}, { once: true });
}
From 3be4bc748e3d5f440311a2dc6ef8473c5d484c8d Mon Sep 17 00:00:00 2001
From: "DangoCat[bot]"
Date: Wed, 5 Feb 2025 18:04:25 +0000
Subject: [PATCH 16/20] [Automated] Format code
---
extensions/Thebloxers998/oauth.js | 397 ++++++++++++++++--------------
1 file changed, 215 insertions(+), 182 deletions(-)
diff --git a/extensions/Thebloxers998/oauth.js b/extensions/Thebloxers998/oauth.js
index 272a454c14..bcd52f5333 100644
--- a/extensions/Thebloxers998/oauth.js
+++ b/extensions/Thebloxers998/oauth.js
@@ -1,204 +1,237 @@
// Name: OAuth Extension
// ID: oauthExtension
-// Description: Provides OAuth login functionality for various services (Google, Microsoft, Discord, Twitter, GitHub, Facebook, LinkedIn, Spotify).
+// Description: Provides OAuth login functionality for various services (Google, Microsoft, Discord, Twitter, GitHub, Facebook, LinkedIn, Spotify).
// By: Thebloxers998
// License: MPL-2.0
(function (Scratch) {
- "use strict";
+ "use strict";
- class OAuthExtension {
- constructor() {
- this.tokens = {};
- this.clients = {
- google: {
- clientId: "",
- clientSecret: "",
- redirectUri: "",
- authUrl: "https://accounts.google.com/o/oauth2/auth",
- tokenUrl: "https://oauth2.googleapis.com/token",
- scope: "https://www.googleapis.com/auth/userinfo.profile",
- },
- microsoft: {
- clientId: "",
- clientSecret: "",
- redirectUri: "",
- authUrl: "https://login.microsoftonline.com/common/oauth2/v2.0/authorize",
- tokenUrl: "https://login.microsoftonline.com/common/oauth2/v2.0/token",
- scope: "https://graph.microsoft.com/User.Read",
- },
- discord: {
- clientId: "",
- clientSecret: "",
- redirectUri: "",
- authUrl: "https://discord.com/api/oauth2/authorize",
- tokenUrl: "https://discord.com/api/oauth2/token",
- scope: "identify",
- },
- twitter: {
- clientId: "",
- clientSecret: "",
- redirectUri: "",
- authUrl: "https://api.twitter.com/oauth/authorize",
- tokenUrl: "https://api.twitter.com/oauth/access_token",
- },
- github: {
- clientId: "",
- clientSecret: "",
- redirectUri: "",
- authUrl: "https://github.com/login/oauth/authorize",
- tokenUrl: "https://github.com/login/oauth/access_token",
- scope: "user",
- },
- facebook: {
- clientId: "",
- clientSecret: "",
- redirectUri: "",
- authUrl: "https://www.facebook.com/v10.0/dialog/oauth",
- tokenUrl: "https://graph.facebook.com/v10.0/oauth/access_token",
- scope: "public_profile",
- },
- linkedin: {
- clientId: "",
- clientSecret: "",
- redirectUri: "",
- authUrl: "https://www.linkedin.com/oauth/v2/authorization",
- tokenUrl: "https://www.linkedin.com/oauth/v2/accessToken",
- scope: "r_liteprofile",
- },
- spotify: {
- clientId: "",
- clientSecret: "",
- redirectUri: "",
- authUrl: "https://accounts.spotify.com/authorize",
- tokenUrl: "https://accounts.spotify.com/api/token",
- scope: "user-read-private",
- },
- };
- }
+ class OAuthExtension {
+ constructor() {
+ this.tokens = {};
+ this.clients = {
+ google: {
+ clientId: "",
+ clientSecret: "",
+ redirectUri: "",
+ authUrl: "https://accounts.google.com/o/oauth2/auth",
+ tokenUrl: "https://oauth2.googleapis.com/token",
+ scope: "https://www.googleapis.com/auth/userinfo.profile",
+ },
+ microsoft: {
+ clientId: "",
+ clientSecret: "",
+ redirectUri: "",
+ authUrl:
+ "https://login.microsoftonline.com/common/oauth2/v2.0/authorize",
+ tokenUrl:
+ "https://login.microsoftonline.com/common/oauth2/v2.0/token",
+ scope: "https://graph.microsoft.com/User.Read",
+ },
+ discord: {
+ clientId: "",
+ clientSecret: "",
+ redirectUri: "",
+ authUrl: "https://discord.com/api/oauth2/authorize",
+ tokenUrl: "https://discord.com/api/oauth2/token",
+ scope: "identify",
+ },
+ twitter: {
+ clientId: "",
+ clientSecret: "",
+ redirectUri: "",
+ authUrl: "https://api.twitter.com/oauth/authorize",
+ tokenUrl: "https://api.twitter.com/oauth/access_token",
+ },
+ github: {
+ clientId: "",
+ clientSecret: "",
+ redirectUri: "",
+ authUrl: "https://github.com/login/oauth/authorize",
+ tokenUrl: "https://github.com/login/oauth/access_token",
+ scope: "user",
+ },
+ facebook: {
+ clientId: "",
+ clientSecret: "",
+ redirectUri: "",
+ authUrl: "https://www.facebook.com/v10.0/dialog/oauth",
+ tokenUrl: "https://graph.facebook.com/v10.0/oauth/access_token",
+ scope: "public_profile",
+ },
+ linkedin: {
+ clientId: "",
+ clientSecret: "",
+ redirectUri: "",
+ authUrl: "https://www.linkedin.com/oauth/v2/authorization",
+ tokenUrl: "https://www.linkedin.com/oauth/v2/accessToken",
+ scope: "r_liteprofile",
+ },
+ spotify: {
+ clientId: "",
+ clientSecret: "",
+ redirectUri: "",
+ authUrl: "https://accounts.spotify.com/authorize",
+ tokenUrl: "https://accounts.spotify.com/api/token",
+ scope: "user-read-private",
+ },
+ };
+ }
- getInfo() {
- return {
- id: "oauthExtension",
- name: Scratch.translate({ id: "oauthExtension.name", default: "OAuth Extension" }),
- blockIconURI: "data:image/svg+xml;base64,PLACEHOLDER_FOR_BLOCK_ICON",
- menuIconURI: "data:image/svg+xml;base64,PLACEHOLDER_FOR_MENU_ICON",
- color1: "#FFAB19",
- color2: "#FF8C00",
- color3: "#E76F00",
- blocks: [
- {
- opcode: "login",
- text: Scratch.translate({ id: "oauthExtension.login", default: "Log in with [SERVICE]" }),
- blockType: Scratch.BlockType.COMMAND,
- arguments: {
- SERVICE: { type: Scratch.ArgumentType.STRING, menu: "SERVICE" },
- },
- },
- {
- opcode: "isLoggedIn",
- text: Scratch.translate({ id: "oauthExtension.isLoggedIn", default: "Is user logged in with [SERVICE]?" }),
- blockType: Scratch.BlockType.BOOLEAN,
- arguments: {
- SERVICE: { type: Scratch.ArgumentType.STRING, menu: "SERVICE" },
- },
- },
- {
- opcode: "setClientId",
- text: Scratch.translate({ id: "oauthExtension.setClientId", default: "Set client ID for [SERVICE] to [CLIENT_ID]" }),
- blockType: Scratch.BlockType.COMMAND,
- arguments: {
- SERVICE: { type: Scratch.ArgumentType.STRING, menu: "SERVICE" },
- CLIENT_ID: { type: Scratch.ArgumentType.STRING, defaultValue: "" },
- },
- },
- {
- opcode: "setClientSecret",
- text: Scratch.translate({ id: "oauthExtension.setClientSecret", default: "Set client secret for [SERVICE] to [CLIENT_SECRET]" }),
- blockType: Scratch.BlockType.COMMAND,
- arguments: {
- SERVICE: { type: Scratch.ArgumentType.STRING, menu: "SERVICE" },
- CLIENT_SECRET: { type: Scratch.ArgumentType.STRING, defaultValue: "" },
- },
- },
- {
- opcode: "setRedirectUri",
- text: Scratch.translate({ id: "oauthExtension.setRedirectUri", default: "Set redirect URI for [SERVICE] to [REDIRECT_URI]" }),
- blockType: Scratch.BlockType.COMMAND,
- arguments: {
- SERVICE: { type: Scratch.ArgumentType.STRING, menu: "SERVICE" },
- REDIRECT_URI: { type: Scratch.ArgumentType.STRING, defaultValue: "" },
- },
- },
- ],
- menus: {
- SERVICE: {
- items: [
- { text: "Google", value: "google" },
- { text: "Microsoft", value: "microsoft" },
- { text: "Discord", value: "discord" },
- { text: "Twitter", value: "twitter" },
- { text: "GitHub", value: "github" },
- { text: "Facebook", value: "facebook" },
- { text: "LinkedIn", value: "linkedin" },
- { text: "Spotify", value: "spotify" },
- ],
- },
- },
- };
- }
+ getInfo() {
+ return {
+ id: "oauthExtension",
+ name: Scratch.translate({
+ id: "oauthExtension.name",
+ default: "OAuth Extension",
+ }),
+ blockIconURI: "data:image/svg+xml;base64,PLACEHOLDER_FOR_BLOCK_ICON",
+ menuIconURI: "data:image/svg+xml;base64,PLACEHOLDER_FOR_MENU_ICON",
+ color1: "#FFAB19",
+ color2: "#FF8C00",
+ color3: "#E76F00",
+ blocks: [
+ {
+ opcode: "login",
+ text: Scratch.translate({
+ id: "oauthExtension.login",
+ default: "Log in with [SERVICE]",
+ }),
+ blockType: Scratch.BlockType.COMMAND,
+ arguments: {
+ SERVICE: { type: Scratch.ArgumentType.STRING, menu: "SERVICE" },
+ },
+ },
+ {
+ opcode: "isLoggedIn",
+ text: Scratch.translate({
+ id: "oauthExtension.isLoggedIn",
+ default: "Is user logged in with [SERVICE]?",
+ }),
+ blockType: Scratch.BlockType.BOOLEAN,
+ arguments: {
+ SERVICE: { type: Scratch.ArgumentType.STRING, menu: "SERVICE" },
+ },
+ },
+ {
+ opcode: "setClientId",
+ text: Scratch.translate({
+ id: "oauthExtension.setClientId",
+ default: "Set client ID for [SERVICE] to [CLIENT_ID]",
+ }),
+ blockType: Scratch.BlockType.COMMAND,
+ arguments: {
+ SERVICE: { type: Scratch.ArgumentType.STRING, menu: "SERVICE" },
+ CLIENT_ID: {
+ type: Scratch.ArgumentType.STRING,
+ defaultValue: "",
+ },
+ },
+ },
+ {
+ opcode: "setClientSecret",
+ text: Scratch.translate({
+ id: "oauthExtension.setClientSecret",
+ default: "Set client secret for [SERVICE] to [CLIENT_SECRET]",
+ }),
+ blockType: Scratch.BlockType.COMMAND,
+ arguments: {
+ SERVICE: { type: Scratch.ArgumentType.STRING, menu: "SERVICE" },
+ CLIENT_SECRET: {
+ type: Scratch.ArgumentType.STRING,
+ defaultValue: "",
+ },
+ },
+ },
+ {
+ opcode: "setRedirectUri",
+ text: Scratch.translate({
+ id: "oauthExtension.setRedirectUri",
+ default: "Set redirect URI for [SERVICE] to [REDIRECT_URI]",
+ }),
+ blockType: Scratch.BlockType.COMMAND,
+ arguments: {
+ SERVICE: { type: Scratch.ArgumentType.STRING, menu: "SERVICE" },
+ REDIRECT_URI: {
+ type: Scratch.ArgumentType.STRING,
+ defaultValue: "",
+ },
+ },
+ },
+ ],
+ menus: {
+ SERVICE: {
+ items: [
+ { text: "Google", value: "google" },
+ { text: "Microsoft", value: "microsoft" },
+ { text: "Discord", value: "discord" },
+ { text: "Twitter", value: "twitter" },
+ { text: "GitHub", value: "github" },
+ { text: "Facebook", value: "facebook" },
+ { text: "LinkedIn", value: "linkedin" },
+ { text: "Spotify", value: "spotify" },
+ ],
+ },
+ },
+ };
+ }
- setClientId(args) {
- const service = args.SERVICE;
- this.clients[service].clientId = args.CLIENT_ID;
- }
+ setClientId(args) {
+ const service = args.SERVICE;
+ this.clients[service].clientId = args.CLIENT_ID;
+ }
- setClientSecret(args) {
- const service = args.SERVICE;
- this.clients[service].clientSecret = args.CLIENT_SECRET;
- }
+ setClientSecret(args) {
+ const service = args.SERVICE;
+ this.clients[service].clientSecret = args.CLIENT_SECRET;
+ }
- setRedirectUri(args) {
- const service = args.SERVICE;
- this.clients[service].redirectUri = args.REDIRECT_URI;
- }
+ setRedirectUri(args) {
+ const service = args.SERVICE;
+ this.clients[service].redirectUri = args.REDIRECT_URI;
+ }
- async login(args) {
- const service = args.SERVICE;
- const client = this.clients[service];
- const authUrl = `${client.authUrl}?response_type=code&client_id=${client.clientId}&redirect_uri=${client.redirectUri}&scope=${encodeURIComponent(client.scope)}`;
+ async login(args) {
+ const service = args.SERVICE;
+ const client = this.clients[service];
+ const authUrl = `${client.authUrl}?response_type=code&client_id=${client.clientId}&redirect_uri=${client.redirectUri}&scope=${encodeURIComponent(client.scope)}`;
- // Open a new tab for the user to authorize the app
- Scratch.openWindow(authUrl, "_blank");
+ // Open a new tab for the user to authorize the app
+ Scratch.openWindow(authUrl, "_blank");
- // Listen for message with authorization code (assuming your app handles this securely)
- window.addEventListener("message", async (event) => {
- if (event.origin !== window.location.origin) return;
+ // Listen for message with authorization code (assuming your app handles this securely)
+ window.addEventListener(
+ "message",
+ async (event) => {
+ if (event.origin !== window.location.origin) return;
- const authorizationCode = event.data.code;
+ const authorizationCode = event.data.code;
- // Ensure there is an await expression
- const tokenResponse = await Scratch.fetch(client.tokenUrl, {
- method: "POST",
- headers: {
- "Content-Type": "application/x-www-form-urlencoded",
- },
- body: `code=${authorizationCode}&client_id=${client.clientId}&client_secret=${client.clientSecret}&redirect_uri=${client.redirectUri}&grant_type=authorization_code`,
- });
+ // Ensure there is an await expression
+ const tokenResponse = await Scratch.fetch(client.tokenUrl, {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/x-www-form-urlencoded",
+ },
+ body: `code=${authorizationCode}&client_id=${client.clientId}&client_secret=${client.clientSecret}&redirect_uri=${client.redirectUri}&grant_type=authorization_code`,
+ });
- const tokens = await tokenResponse.json();
- this.tokens[service] = tokens;
+ const tokens = await tokenResponse.json();
+ this.tokens[service] = tokens;
- // Await for a token response
- await tokenResponse;
- }, { once: true });
- }
+ // Await for a token response
+ await tokenResponse;
+ },
+ { once: true }
+ );
+ }
- isLoggedIn(args) {
- const service = args.SERVICE;
- return !!this.tokens[service];
- }
+ isLoggedIn(args) {
+ const service = args.SERVICE;
+ return !!this.tokens[service];
}
+ }
- Scratch.extensions.register(new OAuthExtension());
+ Scratch.extensions.register(new OAuthExtension());
})(Scratch);
From a0fa15ecb3d2a6b9abe864eaa0ae1590e0f9624d Mon Sep 17 00:00:00 2001
From: GoodBoi19 <181642507+Thebloxers998@users.noreply.github.com>
Date: Wed, 5 Feb 2025 18:18:56 +0000
Subject: [PATCH 17/20] Update oauth.js
---
extensions/Thebloxers998/oauth.js | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/extensions/Thebloxers998/oauth.js b/extensions/Thebloxers998/oauth.js
index bcd52f5333..a50fe35f76 100644
--- a/extensions/Thebloxers998/oauth.js
+++ b/extensions/Thebloxers998/oauth.js
@@ -86,8 +86,8 @@
id: "oauthExtension.name",
default: "OAuth Extension",
}),
- blockIconURI: "data:image/svg+xml;base64,PLACEHOLDER_FOR_BLOCK_ICON",
- menuIconURI: "data:image/svg+xml;base64,PLACEHOLDER_FOR_MENU_ICON",
+ blockIconURI: "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI1NiIgaGVpZ2h0PSIyNTYiPgo8cGF0aCBkPSJNMCAwIEMyMi4wMzg1MjY1MiAxOC44MTE1OTg1NiAzNi40NjU3OTMzNCA0MS4wNjM3MzM3NyA0NC4zNTE1NjI1IDY4LjkxMDE1NjI1IEM0NC42OTMxNjQwNiA3MC4wODgzNTkzNyA0NS4wMzQ3NjU2MyA3MS4yNjY1NjI1IDQ1LjM4NjcxODc1IDcyLjQ4MDQ2ODc1IEM1MS41OTA5Mjc1NSA5OC43NDAxNDMyMiA0OC4xMTkzNTU5NyAxMjguNDA3NTUzODkgMzcuMzUxNTYyNSAxNTIuOTEwMTU2MjUgQzM2LjkyNjY1NTI3IDE1My44OTE0NTUwOCAzNi45MjY2NTUyNyAxNTMuODkxNDU1MDggMzYuNDkzMTY0MDYgMTU0Ljg5MjU3ODEyIEMyNi41NTAxNTk0MyAxNzcuNDE1NDA2MzEgOS4zNjgzODI4MiAxOTcuMDgzNzE0NDMgLTExLjY0ODQzNzUgMjA5LjkxMDE1NjI1IEMtMTIuNzIwOTM3NSAyMTAuNTkzMzU5MzggLTEzLjc5MzQzNzUgMjExLjI3NjU2MjUgLTE0Ljg5ODQzNzUgMjExLjk4MDQ2ODc1IEMtNDIuNzU5MjI3OTQgMjI4Ljk0MjAxNDc4IC03OC4yNTA2MTE4OSAyMzMuOTI2NDg1NDUgLTExMC4wMzAyNzM0NCAyMjYuNzQ3MDcwMzEgQy0xMTcuODE5NDE3MjkgMjI0Ljc3NzM2MzU3IC0xMjUuMjk4MDI2MiAyMjIuMTQwMzMxOTUgLTEzMi42NDg0Mzc1IDIxOC45MTAxNTYyNSBDLTEzMy4zMDI2MzY3MiAyMTguNjI2ODg0NzcgLTEzMy45NTY4MzU5NCAyMTguMzQzNjEzMjggLTEzNC42MzA4NTkzOCAyMTguMDUxNzU3ODEgQy0xNjQuNzI1OTMyMzQgMjA0Ljc2NTg4NDE0IC0xODguNDMyNjIzMzkgMTc5LjE4ODU5MzM5IC0yMDAuNTE5NTMxMjUgMTQ4LjcxMzg2NzE5IEMtMjAyLjQ3ODkwMDc3IDE0My41MTUyMTc0MiAtMjA0LjEzNTA4MjUgMTM4LjI1NDE1Mjc0IC0yMDUuNjQ4NDM3NSAxMzIuOTEwMTU2MjUgQy0yMDUuOTkwMDM5MDYgMTMxLjczMTk1MzEyIC0yMDYuMzMxNjQwNjMgMTMwLjU1Mzc1IC0yMDYuNjgzNTkzNzUgMTI5LjMzOTg0Mzc1IEMtMjE0LjIxNzQzOTk4IDk3LjQ1MjQwMTU3IC0yMDcuODM1NTc0NTYgNjEuNDM0NjUxNjEgLTE5MS4wMDc4MTI1IDMzLjYwNTQ2ODc1IEMtMTcyLjcxOTMxMzkzIDQuNTE1NjA4MTggLTE0NS40NzI3MDQ5NSAtMTQuNzk0NDA5MjYgLTExMi42NDg0Mzc1IC0yNC4wODk4NDM3NSBDLTExMS40NzAyMzQzOCAtMjQuNDMxNDQ1MzEgLTExMC4yOTIwMzEyNSAtMjQuNzczMDQ2ODcgLTEwOS4wNzgxMjUgLTI1LjEyNSBDLTcxLjkxMjE2MjA0IC0zMy45MDU5NjkyNyAtMjkuNDM4MzUxODQgLTI0LjE0NjUyMjQyIDAgMCBaIE0tMTU2LjY0ODQzNzUgMzguOTEwMTU2MjUgQy0xNzIuNjc2OTQzNTIgNTguMDg4NzczMjggLTE4MC4zOTY0OTAzOCA4NC41ODg4MzUyMyAtMTc4LjM3MTA5Mzc1IDEwOS4yOTI5Njg3NSBDLTE3NS40NzE3NjMxNSAxMzUuNzQ1OTA4ODUgLTE2Mi45NTU1MTQxMyAxNTkuNTg0NTMzMDggLTE0Mi42NDg0Mzc1IDE3Ni45MTAxNTYyNSBDLTEyNi41NDMxNjcwNSAxODkuNjk5NjM1NzIgLTEwNi4zMjExMTA2MiAxOTguMDkxNzg4ODEgLTg1LjY0ODQzNzUgMTk4LjkxMDE1NjI1IEMtODQuODg5MTc5NjkgMTk4Ljk1MDExNzE5IC04NC4xMjk5MjE4NyAxOTguOTkwMDc4MTIgLTgzLjM0NzY1NjI1IDE5OS4wMzEyNSBDLTU2LjU4MDI3NzA5IDE5OS43NzYwMDUyMyAtMzEuNDM2MTQxNzYgMTg4LjgxNjI3MjU4IC0xMi4wNTQ0NDMzNiAxNzAuNzY1NjI1IEM1LjI3MjM5MDEyIDE1NC4wMTA3MzQ1MiAxNi4zOTQyODMxMyAxMzAuMDkxODY1NjUgMTcuMzUxNTYyNSAxMDUuOTEwMTU2MjUgQzE3LjM5MTUyMzQ0IDEwNS4xNTA4OTg0NCAxNy40MzE0ODQzNyAxMDQuMzkxNjQwNjIgMTcuNDcyNjU2MjUgMTAzLjYwOTM3NSBDMTguMjE3NDExNDggNzYuODQxOTk1ODQgNy4yNTc2Nzg4MyA1MS42OTc4NjA1MSAtMTAuNzkyOTY4NzUgMzIuMzE2MTYyMTEgQy0yNy41NDc4NTkyMyAxNC45ODkzMjg2MyAtNTEuNDY2NzI4MSAzLjg2NzQzNTYyIC03NS42NDg0Mzc1IDIuOTEwMTU2MjUgQy03Ni43ODczMjQyMiAyLjg1MDIxNDg0IC03Ni43ODczMjQyMiAyLjg1MDIxNDg0IC03Ny45NDkyMTg3NSAyLjc4OTA2MjUgQy0xMDguODU5OTYwMDYgMS45MjkwMjU1MSAtMTM2LjI0OTk3Njk4IDE2LjQzMzI0OTk3IC0xNTYuNjQ4NDM3NSAzOC45MTAxNTYyNSBaICIgZmlsbD0iIzlFOUU5RSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjA4LjY0ODQzNzUsMjcuMDg5ODQzNzUpIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuNzc5NDM0NjYgMC4wMDIyMjA2MSAxLjU1ODg2OTMyIDAuMDA0NDQxMjIgMi4zNjE5MjMyMiAwLjAwNjcyOTEzIEMzLjI0Mjc2MDc3IDAuMDA2ODA0NjYgNC4xMjM1OTgzMyAwLjAwNjg4MDE5IDUuMDMxMTI3OTMgMC4wMDY5NTgwMSBDNS45ODg0MTI5MyAwLjAxMjExOTI5IDYuOTQ1Njk3OTQgMC4wMTcyODA1OCA3LjkzMTk5MTU4IDAuMDIyNTk4MjcgQzkuMzk0ODA4MTIgMC4wMjQ3MjA2OSA5LjM5NDgwODEyIDAuMDI0NzIwNjkgMTAuODg3MTc2NTEgMC4wMjY4ODU5OSBDMTQuMDE1NDI2NzUgMC4wMzI1MDMxOSAxNy4xNDM2MDY1NiAwLjA0NTA1ODU5IDIwLjI3MTgzNTMzIDAuMDU3NzU0NTIgQzIyLjM4NzA2ODY3IDAuMDYyNzY3MyAyNC41MDIzMDMxMyAwLjA2NzMzMDU5IDI2LjYxNzUzODQ1IDAuMDcxNDI2MzkgQzMxLjgxNDgyODI5IDAuMDgyNDc4MiAzNy4wMTIwNzY3OCAwLjA5OTIzMzA1IDQyLjIwOTMzNTMzIDAuMTIwMjU0NTIgQzQ0Ljk5MTE0MDUxIDYuMjUxMzU5MTEgNDcuNTc5MTE3NDUgMTIuNDM1MDc1MzMgNTAuMDM3NDYwMzMgMTguNzAyMjg1NzcgQzUwLjM5MDE1OTkxIDE5LjU5NjU0NzcgNTAuNzQyODU5NSAyMC40OTA4MDk2MyA1MS4xMDYyNDY5NSAyMS40MTIxNzA0MSBDNTIuMjI1NzczMjEgMjQuMjUxNjQ4MTQgNTMuMzQyNjgwOCAyNy4wOTIxNDYzOCA1NC40NTkzMzUzMyAyOS45MzI3NTQ1MiBDNTUuNTU3NzAyMTUgMzIuNzIyNDMxMiA1Ni42NTY2Mzk1MiAzNS41MTE4ODE3NCA1Ny43NTYwODgyNiAzOC4zMDExMzIyIEM1OC40ODMyNDk1MSA0MC4xNDY2MDUxNSA1OS4yMDk1NzI4OCA0MS45OTI0MDg0OCA1OS45MzUwNDMzMyA0My44Mzg1NDY3NSBDNjEuNzc4MzM5NjQgNDguNTIyNzUzMjQgNjMuNjQxMjU5NzcgNTMuMTk3NzI3NjUgNjUuNTM5NDEzNDUgNTcuODYwMDAwNjEgQzY1LjkxMTc3MTI0IDU4Ljc3Nzg2ODUgNjYuMjg0MTI5MDMgNTkuNjk1NzM2MzkgNjYuNjY3NzcwMzkgNjAuNjQxNDE4NDYgQzY3LjM3NzQxMTc2IDYyLjM4NzQ1NzM3IDY4LjA5MTI4MzIxIDY0LjEzMTc4NDgzIDY4LjgwOTk4MjMgNjUuODc0MTE0OTkgQzY5LjEyNTc4MjQ3IDY2LjY1MjMyMTAxIDY5LjQ0MTU4MjY0IDY3LjQzMDUyNzA0IDY5Ljc2Njk1MjUxIDY4LjIzMjMxNTA2IEM3MC4wNDY0MTcyNCA2OC45MTMyNzc0NCA3MC4zMjU4ODE5NiA2OS41OTQyMzk4MSA3MC42MTM4MTUzMSA3MC4yOTU4Mzc0IEM3MS4yMDkzMzUzMyA3Mi4xMjAyNTQ1MiA3MS4yMDkzMzUzMyA3Mi4xMjAyNTQ1MiA3MS4yMDkzMzUzMyA3NS4xMjAyNTQ1MiBDNzkuNDU5MzM1MzMgNzUuMTIwMjU0NTIgODcuNzA5MzM1MzMgNzUuMTIwMjU0NTIgOTYuMjA5MzM1MzMgNzUuMTIwMjU0NTIgQzk2LjIwOTMzNTMzIDgwLjA3MDI1NDUyIDk2LjIwOTMzNTMzIDg1LjAyMDI1NDUyIDk2LjIwOTMzNTMzIDkwLjEyMDI1NDUyIEM5MC4yNjkzMzUzMyA5MC4xMjAyNTQ1MiA4NC4zMjkzMzUzMyA5MC4xMjAyNTQ1MiA3OC4yMDkzMzUzMyA5MC4xMjAyNTQ1MiBDNzkuMTk5MzM1MzMgOTMuNTg1MjU0NTIgNzkuMTk5MzM1MzMgOTMuNTg1MjU0NTIgODAuMjA5MzM1MzMgOTcuMTIwMjU0NTIgQzg1LjQ4OTMzNTMzIDk3LjEyMDI1NDUyIDkwLjc2OTMzNTMzIDk3LjEyMDI1NDUyIDk2LjIwOTMzNTMzIDk3LjEyMDI1NDUyIEM5Ni4yMDkzMzUzMyAxMDIuMDcwMjU0NTIgOTYuMjA5MzM1MzMgMTA3LjAyMDI1NDUyIDk2LjIwOTMzNTMzIDExMi4xMjAyNTQ1MiBDOTEuNzU0MzM1MzMgMTEyLjYxNTI1NDUyIDkxLjc1NDMzNTMzIDExMi42MTUyNTQ1MiA4Ny4yMDkzMzUzMyAxMTMuMTIwMjU0NTIgQzg3LjcxNDY0NzgzIDExNC4zODQ4MjQ4MyA4OC4yMTk5NjAzMyAxMTUuNjQ5Mzk1MTQgODguNzQwNTg1MzMgMTE2Ljk1MjI4NTc3IEM4OS4zOTcxMDI1MiAxMTguNjEyMzM2MzcgOTAuMDUzMzM3ODkgMTIwLjI3MjQ5ODQ1IDkwLjcwOTMzNTMzIDEyMS45MzI3NTQ1MiBDOTEuMjEwMTM2MTEgMTIzLjE4MjgyMjg4IDkxLjIxMDEzNjExIDEyMy4xODI4MjI4OCA5MS43MjEwNTQwOCAxMjQuNDU4MTQ1MTQgQzkyLjE5NDc4NDU1IDEyNS42NjE4MDcyNSA5Mi4xOTQ3ODQ1NSAxMjUuNjYxODA3MjUgOTIuNjc4MDg1MzMgMTI2Ljg4OTc4NTc3IEM5Mi45NzEzNDcwNSAxMjcuNjI4MTc2ODggOTMuMjY0NjA4NzYgMTI4LjM2NjU2Nzk5IDkzLjU2Njc1NzIgMTI5LjEyNzMzNDU5IEM5NC4yMDkzMzUzMyAxMzEuMTIwMjU0NTIgOTQuMjA5MzM1MzMgMTMxLjEyMDI1NDUyIDk0LjIwOTMzNTMzIDEzNC4xMjAyNTQ1MiBDODEuOTk5MzM1MzMgMTM0LjEyMDI1NDUyIDY5Ljc4OTMzNTMzIDEzNC4xMjAyNTQ1MiA1Ny4yMDkzMzUzMyAxMzQuMTIwMjU0NTIgQzUyLjIwOTMzNTMzIDEyMi4xMjAyNTQ1MiA1Mi4yMDkzMzUzMyAxMjIuMTIwMjU0NTIgNDkuMjA5MzM1MzMgMTEyLjEyMDI1NDUyIEMzMC4wNjkzMzUzMyAxMTIuMTIwMjU0NTIgMTAuOTI5MzM1MzMgMTEyLjEyMDI1NDUyIC04Ljc5MDY2NDY3IDExMi4xMjAyNTQ1MiBDLTkuNzgwNjY0NjcgMTE1LjQyMDI1NDUyIC0xMC43NzA2NjQ2NyAxMTguNzIwMjU0NTIgLTExLjc5MDY2NDY3IDEyMi4xMjAyNTQ1MiBDLTEzLjQ0MDY2NDY3IDEyNi4wODAyNTQ1MiAtMTUuMDkwNjY0NjcgMTMwLjA0MDI1NDUyIC0xNi43OTA2NjQ2NyAxMzQuMTIwMjU0NTIgQy0yOS4wMDA2NjQ2NyAxMzQuMTIwMjU0NTIgLTQxLjIxMDY2NDY3IDEzNC4xMjAyNTQ1MiAtNTMuNzkwNjY0NjcgMTM0LjEyMDI1NDUyIEMtNTMuMTI2NDQxNjkgMTMwLjc5OTEzOTYgLTUyLjU1MzU4NjExIDEyOC4yMDE5NDI1MyAtNTEuMzgwNTA4NDIgMTI1LjEzMTk3MzI3IEMtNTAuOTc5Mjg3NzIgMTI0LjA3MzMzMDY5IC01MC45NzkyODc3MiAxMjQuMDczMzMwNjkgLTUwLjU2OTk2MTU1IDEyMi45OTMzMDEzOSBDLTUwLjI5MjE2ODU4IDEyMi4yNzIwNzA5MiAtNTAuMDE0Mzc1NjEgMTIxLjU1MDg0MDQ1IC00OS43MjgxNjQ2NyAxMjAuODA3NzU0NTIgQy00OS4zMDU2NzQ0NCAxMTkuNjk2OTA0OTEgLTQ5LjMwNTY3NDQ0IDExOS42OTY5MDQ5MSAtNDguODc0NjQ5MDUgMTE4LjU2MzYxMzg5IEMtNDguMTgzNDc4OTIgMTE2Ljc0NzgyNzk2IC00Ny40ODc1NDc3OSAxMTQuOTMzODU1NTIgLTQ2Ljc5MDY2NDY3IDExMy4xMjAyNTQ1MiBDLTQ5Ljc2MDY2NDY3IDExMi43OTAyNTQ1MiAtNTIuNzMwNjY0NjcgMTEyLjQ2MDI1NDUyIC01NS43OTA2NjQ2NyAxMTIuMTIwMjU0NTIgQy01NS43OTA2NjQ2NyAxMDcuMTcwMjU0NTIgLTU1Ljc5MDY2NDY3IDEwMi4yMjAyNTQ1MiAtNTUuNzkwNjY0NjcgOTcuMTIwMjU0NTIgQy01MC41MTA2NjQ2NyA5Ny4xMjAyNTQ1MiAtNDUuMjMwNjY0NjcgOTcuMTIwMjU0NTIgLTM5Ljc5MDY2NDY3IDk3LjEyMDI1NDUyIEMtMzkuMTMwNjY0NjcgOTQuODEwMjU0NTIgLTM4LjQ3MDY2NDY3IDkyLjUwMDI1NDUyIC0zNy43OTA2NjQ2NyA5MC4xMjAyNTQ1MiBDLTQzLjczMDY2NDY3IDkwLjEyMDI1NDUyIC00OS42NzA2NjQ2NyA5MC4xMjAyNTQ1MiAtNTUuNzkwNjY0NjcgOTAuMTIwMjU0NTIgQy01NS43OTA2NjQ2NyA4NS4xNzAyNTQ1MiAtNTUuNzkwNjY0NjcgODAuMjIwMjU0NTIgLTU1Ljc5MDY2NDY3IDc1LjEyMDI1NDUyIEMtNDcuNTQwNjY0NjcgNzUuMTIwMjU0NTIgLTM5LjI5MDY2NDY3IDc1LjEyMDI1NDUyIC0zMC43OTA2NjQ2NyA3NS4xMjAyNTQ1MiBDLTMwLjQ2MDY2NDY3IDczLjQ3MDI1NDUyIC0zMC4xMzA2NjQ2NyA3MS44MjAyNTQ1MiAtMjkuNzkwNjY0NjcgNzAuMTIwMjU0NTIgQy0yOS4zNTY1NzU4MyA2OC44MTI0MDQ1NiAtMjguODg3MjM5MjEgNjcuNTE1NzA5OTggLTI4LjM4Mjk0OTgzIDY2LjIzMzI5MTYzIEMtMjcuOTU1MjcwNjEgNjUuMTM2NzU1MTQgLTI3Ljk1NTI3MDYxIDY1LjEzNjc1NTE0IC0yNy41MTg5NTE0MiA2NC4wMTgwNjY0MSBDLTI3LjIwOTAwNzQyIDYzLjIzNTgxMTkyIC0yNi44OTkwNjM0MiA2Mi40NTM1NTc0MyAtMjYuNTc5NzI3MTcgNjEuNjQ3NTk4MjcgQy0yNi4wOTMyMzk1MiA2MC40MDUyNzE4NCAtMjYuMDkzMjM5NTIgNjAuNDA1MjcxODQgLTI1LjU5NjkyMzgzIDU5LjEzNzg0NzkgQy0yNC41NDA0OTM5NyA1Ni40NDI4OTc0OSAtMjMuNDc4MjE0MDQgNTMuNzUwMjk3MzYgLTIyLjQxNTY2NDY3IDUxLjA1Nzc1NDUyIEMtMjEuNjg4NjgwNTUgNDkuMjA3NjI3NzYgLTIwLjk2MjAzODM5IDQ3LjM1NzM2NjU5IC0yMC4yMzU3MzMwMyA0NS41MDY5NzMyNyBDLTE4Ljc3OTY4MzY3IDQxLjc5ODk3MzEgLTE3LjMyMTM4MjQ0IDM4LjA5MTg3MDIyIC0xNS44NjE0NjU0NSAzNC4zODUzOTEyNCBDLTE0LjAwMzg3MjU1IDI5LjY2NjY4MzE1IC0xMi4xNTg0NzMxNyAyNC45NDMzMjA2NSAtMTAuMzE4MDA4NDIgMjAuMjE3OTEwNzcgQy05LjgwNjIzMTMyIDE4LjkwNjEwMjQ1IC05LjI5NDM1Mzc3IDE3LjU5NDMzMzMyIC04Ljc4MjM2Mzg5IDE2LjI4MjYwODAzIEMtNy44NDYzMDQ5OSAxMy44ODM5MzcxMSAtNi45MTE2ODAwOCAxMS40ODQ3MDU5NyAtNS45Nzg2NTI5NSA5LjA4NDg1NDEzIEMtNS41NjcyODA4OCA4LjAzNDM0ODc1IC01LjE1NTkwODgxIDYuOTgzODQzMzggLTQuNzMyMDcwOTIgNS45MDE1MDQ1MiBDLTQuMzc4MzAzODMgNC45OTQ2NDkwNSAtNC4wMjQ1MzY3NCA0LjA4Nzc5MzU4IC0zLjY2MDA0OTQ0IDMuMTUzNDU3NjQgQy0yLjM3OTk5Mzk4IDAuMTU5ODMxNzMgLTIuMzc5OTkzOTggMC4xNTk4MzE3MyAwIDAgWiBNMjAuMjA5MzM1MzMgMzQuMTIwMjU0NTIgQzE2LjgxMTU1MDQyIDQxLjQ0MTY3MiAxMy45NzAzMDk5MyA0OC45Mjk2MjIxMiAxMS4yMDc4NzA0OCA1Ni41MDY3MjkxMyBDMTAuNDUxMzgyMzUgNTguNTc5NTQ2MDkgOS42ODgwNjYyNSA2MC42NDk3NjM3OSA4LjkyNDE3OTA4IDYyLjcxOTg2Mzg5IEM4LjQ0MDY5OTkyIDY0LjAzOTM3NjU3IDcuOTU3NjEyMjcgNjUuMzU5MDMyNzggNy40NzQ5NjAzMyA2Ni42Nzg4NDgyNyBDNy4wMzk1Nzk0NyA2Ny44Njc5Mjc4NiA2LjYwNDE5ODYxIDY5LjA1NzAwNzQ1IDYuMTU1NjI0MzkgNzAuMjgyMTE5NzUgQzUuMTAzOTAxNTkgNzIuOTM3ODUxOCA1LjEwMzkwMTU5IDcyLjkzNzg1MTggNS4yMDkzMzUzMyA3NS4xMjAyNTQ1MiBDMTUuMTA5MzM1MzMgNzUuMTIwMjU0NTIgMjUuMDA5MzM1MzMgNzUuMTIwMjU0NTIgMzUuMjA5MzM1MzMgNzUuMTIwMjU0NTIgQzMzLjQxMTgzNzk3IDY5LjEyODU5NjY3IDMxLjYyMDI3MzkyIDYzLjIzNDQ4Mzc4IDI5LjUxMDExNjU4IDU3LjM2MjQ0MjAyIEMyOS4yNzAyMDQ5MyA1Ni42ODg1MTQxIDI5LjAzMDI5MzI3IDU2LjAxNDU4NjE4IDI4Ljc4MzExMTU3IDU1LjMyMDIzNjIxIEMyOC4wMzE2Nzg1NiA1My4yMTEwNzA1NyAyNy4yNzY4MzI1IDUxLjEwMzE0NjU4IDI2LjUyMTgzNTMzIDQ4Ljk5NTI1NDUyIEMyNi4wMDUzMzA1NCA0Ny41NDc0MTk0MyAyNS40ODkwNTI4MSA0Ni4wOTk1MDMzMyAyNC45NzMwMDcyIDQ0LjY1MTUwNDUyIEMyMy43MjEwNjM0NyA0MS4xNDAxNTA4OCAyMi40NjYwNjAxOSAzNy42Mjk5MDAyNSAyMS4yMDkzMzUzMyAzNC4xMjAyNTQ1MiBDMjAuODc5MzM1MzMgMzQuMTIwMjU0NTIgMjAuNTQ5MzM1MzMgMzQuMTIwMjU0NTIgMjAuMjA5MzM1MzMgMzQuMTIwMjU0NTIgWiBNLTAuNzkwNjY0NjcgOTAuMTIwMjU0NTIgQy0xLjQ1MDY2NDY3IDkyLjQzMDI1NDUyIC0yLjExMDY2NDY3IDk0Ljc0MDI1NDUyIC0yLjc5MDY2NDY3IDk3LjEyMDI1NDUyIEMxMi4zODkzMzUzMyA5Ny4xMjAyNTQ1MiAyNy41NjkzMzUzMyA5Ny4xMjAyNTQ1MiA0My4yMDkzMzUzMyA5Ny4xMjAyNTQ1MiBDNDIuNTQ5MzM1MzMgOTQuODEwMjU0NTIgNDEuODg5MzM1MzMgOTIuNTAwMjU0NTIgNDEuMjA5MzM1MzMgOTAuMTIwMjU0NTIgQzI3LjM0OTMzNTMzIDkwLjEyMDI1NDUyIDEzLjQ4OTMzNTMzIDkwLjEyMDI1NDUyIC0wLjc5MDY2NDY3IDkwLjEyMDI1NDUyIFogIiBmaWxsPSIjOUU5RTlFIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMDcuNzkwNjY0NjcyODUxNTYsNDUuODc5NzQ1NDgzMzk4NDQpIi8+Cjwvc3ZnPgo=",
+ menuIconURI: "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI1NiIgaGVpZ2h0PSIyNTYiPgo8cGF0aCBkPSJNMCAwIEMyMi4wMzg1MjY1MiAxOC44MTE1OTg1NiAzNi40NjU3OTMzNCA0MS4wNjM3MzM3NyA0NC4zNTE1NjI1IDY4LjkxMDE1NjI1IEM0NC42OTMxNjQwNiA3MC4wODgzNTkzNyA0NS4wMzQ3NjU2MyA3MS4yNjY1NjI1IDQ1LjM4NjcxODc1IDcyLjQ4MDQ2ODc1IEM1MS41OTA5Mjc1NSA5OC43NDAxNDMyMiA0OC4xMTkzNTU5NyAxMjguNDA3NTUzODkgMzcuMzUxNTYyNSAxNTIuOTEwMTU2MjUgQzM2LjkyNjY1NTI3IDE1My44OTE0NTUwOCAzNi45MjY2NTUyNyAxNTMuODkxNDU1MDggMzYuNDkzMTY0MDYgMTU0Ljg5MjU3ODEyIEMyNi41NTAxNTk0MyAxNzcuNDE1NDA2MzEgOS4zNjgzODI4MiAxOTcuMDgzNzE0NDMgLTExLjY0ODQzNzUgMjA5LjkxMDE1NjI1IEMtMTIuNzIwOTM3NSAyMTAuNTkzMzU5MzggLTEzLjc5MzQzNzUgMjExLjI3NjU2MjUgLTE0Ljg5ODQzNzUgMjExLjk4MDQ2ODc1IEMtNDIuNzU5MjI3OTQgMjI4Ljk0MjAxNDc4IC03OC4yNTA2MTE4OSAyMzMuOTI2NDg1NDUgLTExMC4wMzAyNzM0NCAyMjYuNzQ3MDcwMzEgQy0xMTcuODE5NDE3MjkgMjI0Ljc3NzM2MzU3IC0xMjUuMjk4MDI2MiAyMjIuMTQwMzMxOTUgLTEzMi42NDg0Mzc1IDIxOC45MTAxNTYyNSBDLTEzMy4zMDI2MzY3MiAyMTguNjI2ODg0NzcgLTEzMy45NTY4MzU5NCAyMTguMzQzNjEzMjggLTEzNC42MzA4NTkzOCAyMTguMDUxNzU3ODEgQy0xNjQuNzI1OTMyMzQgMjA0Ljc2NTg4NDE0IC0xODguNDMyNjIzMzkgMTc5LjE4ODU5MzM5IC0yMDAuNTE5NTMxMjUgMTQ4LjcxMzg2NzE5IEMtMjAyLjQ3ODkwMDc3IDE0My41MTUyMTc0MiAtMjA0LjEzNTA4MjUgMTM4LjI1NDE1Mjc0IC0yMDUuNjQ4NDM3NSAxMzIuOTEwMTU2MjUgQy0yMDUuOTkwMDM5MDYgMTMxLjczMTk1MzEyIC0yMDYuMzMxNjQwNjMgMTMwLjU1Mzc1IC0yMDYuNjgzNTkzNzUgMTI5LjMzOTg0Mzc1IEMtMjE0LjIxNzQzOTk4IDk3LjQ1MjQwMTU3IC0yMDcuODM1NTc0NTYgNjEuNDM0NjUxNjEgLTE5MS4wMDc4MTI1IDMzLjYwNTQ2ODc1IEMtMTcyLjcxOTMxMzkzIDQuNTE1NjA4MTggLTE0NS40NzI3MDQ5NSAtMTQuNzk0NDA5MjYgLTExMi42NDg0Mzc1IC0yNC4wODk4NDM3NSBDLTExMS40NzAyMzQzOCAtMjQuNDMxNDQ1MzEgLTExMC4yOTIwMzEyNSAtMjQuNzczMDQ2ODcgLTEwOS4wNzgxMjUgLTI1LjEyNSBDLTcxLjkxMjE2MjA0IC0zMy45MDU5NjkyNyAtMjkuNDM4MzUxODQgLTI0LjE0NjUyMjQyIDAgMCBaIE0tMTU2LjY0ODQzNzUgMzguOTEwMTU2MjUgQy0xNzIuNjc2OTQzNTIgNTguMDg4NzczMjggLTE4MC4zOTY0OTAzOCA4NC41ODg4MzUyMyAtMTc4LjM3MTA5Mzc1IDEwOS4yOTI5Njg3NSBDLTE3NS40NzE3NjMxNSAxMzUuNzQ1OTA4ODUgLTE2Mi45NTU1MTQxMyAxNTkuNTg0NTMzMDggLTE0Mi42NDg0Mzc1IDE3Ni45MTAxNTYyNSBDLTEyNi41NDMxNjcwNSAxODkuNjk5NjM1NzIgLTEwNi4zMjExMTA2MiAxOTguMDkxNzg4ODEgLTg1LjY0ODQzNzUgMTk4LjkxMDE1NjI1IEMtODQuODg5MTc5NjkgMTk4Ljk1MDExNzE5IC04NC4xMjk5MjE4NyAxOTguOTkwMDc4MTIgLTgzLjM0NzY1NjI1IDE5OS4wMzEyNSBDLTU2LjU4MDI3NzA5IDE5OS43NzYwMDUyMyAtMzEuNDM2MTQxNzYgMTg4LjgxNjI3MjU4IC0xMi4wNTQ0NDMzNiAxNzAuNzY1NjI1IEM1LjI3MjM5MDEyIDE1NC4wMTA3MzQ1MiAxNi4zOTQyODMxMyAxMzAuMDkxODY1NjUgMTcuMzUxNTYyNSAxMDUuOTEwMTU2MjUgQzE3LjM5MTUyMzQ0IDEwNS4xNTA4OTg0NCAxNy40MzE0ODQzNyAxMDQuMzkxNjQwNjIgMTcuNDcyNjU2MjUgMTAzLjYwOTM3NSBDMTguMjE3NDExNDggNzYuODQxOTk1ODQgNy4yNTc2Nzg4MyA1MS42OTc4NjA1MSAtMTAuNzkyOTY4NzUgMzIuMzE2MTYyMTEgQy0yNy41NDc4NTkyMyAxNC45ODkzMjg2MyAtNTEuNDY2NzI4MSAzLjg2NzQzNTYyIC03NS42NDg0Mzc1IDIuOTEwMTU2MjUgQy03Ni43ODczMjQyMiAyLjg1MDIxNDg0IC03Ni43ODczMjQyMiAyLjg1MDIxNDg0IC03Ny45NDkyMTg3NSAyLjc4OTA2MjUgQy0xMDguODU5OTYwMDYgMS45MjkwMjU1MSAtMTM2LjI0OTk3Njk4IDE2LjQzMzI0OTk3IC0xNTYuNjQ4NDM3NSAzOC45MTAxNTYyNSBaICIgZmlsbD0iIzlFOUU5RSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjA4LjY0ODQzNzUsMjcuMDg5ODQzNzUpIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuNzc5NDM0NjYgMC4wMDIyMjA2MSAxLjU1ODg2OTMyIDAuMDA0NDQxMjIgMi4zNjE5MjMyMiAwLjAwNjcyOTEzIEMzLjI0Mjc2MDc3IDAuMDA2ODA0NjYgNC4xMjM1OTgzMyAwLjAwNjg4MDE5IDUuMDMxMTI3OTMgMC4wMDY5NTgwMSBDNS45ODg0MTI5MyAwLjAxMjExOTI5IDYuOTQ1Njk3OTQgMC4wMTcyODA1OCA3LjkzMTk5MTU4IDAuMDIyNTk4MjcgQzkuMzk0ODA4MTIgMC4wMjQ3MjA2OSA5LjM5NDgwODEyIDAuMDI0NzIwNjkgMTAuODg3MTc2NTEgMC4wMjY4ODU5OSBDMTQuMDE1NDI2NzUgMC4wMzI1MDMxOSAxNy4xNDM2MDY1NiAwLjA0NTA1ODU5IDIwLjI3MTgzNTMzIDAuMDU3NzU0NTIgQzIyLjM4NzA2ODY3IDAuMDYyNzY3MyAyNC41MDIzMDMxMyAwLjA2NzMzMDU5IDI2LjYxNzUzODQ1IDAuMDcxNDI2MzkgQzMxLjgxNDgyODI5IDAuMDgyNDc4MiAzNy4wMTIwNzY3OCAwLjA5OTIzMzA1IDQyLjIwOTMzNTMzIDAuMTIwMjU0NTIgQzQ0Ljk5MTE0MDUxIDYuMjUxMzU5MTEgNDcuNTc5MTE3NDUgMTIuNDM1MDc1MzMgNTAuMDM3NDYwMzMgMTguNzAyMjg1NzcgQzUwLjM5MDE1OTkxIDE5LjU5NjU0NzcgNTAuNzQyODU5NSAyMC40OTA4MDk2MyA1MS4xMDYyNDY5NSAyMS40MTIxNzA0MSBDNTIuMjI1NzczMjEgMjQuMjUxNjQ4MTQgNTMuMzQyNjgwOCAyNy4wOTIxNDYzOCA1NC40NTkzMzUzMyAyOS45MzI3NTQ1MiBDNTUuNTU3NzAyMTUgMzIuNzIyNDMxMiA1Ni42NTY2Mzk1MiAzNS41MTE4ODE3NCA1Ny43NTYwODgyNiAzOC4zMDExMzIyIEM1OC40ODMyNDk1MSA0MC4xNDY2MDUxNSA1OS4yMDk1NzI4OCA0MS45OTI0MDg0OCA1OS45MzUwNDMzMyA0My44Mzg1NDY3NSBDNjEuNzc4MzM5NjQgNDguNTIyNzUzMjQgNjMuNjQxMjU5NzcgNTMuMTk3NzI3NjUgNjUuNTM5NDEzNDUgNTcuODYwMDAwNjEgQzY1LjkxMTc3MTI0IDU4Ljc3Nzg2ODUgNjYuMjg0MTI5MDMgNTkuNjk1NzM2MzkgNjYuNjY3NzcwMzkgNjAuNjQxNDE4NDYgQzY3LjM3NzQxMTc2IDYyLjM4NzQ1NzM3IDY4LjA5MTI4MzIxIDY0LjEzMTc4NDgzIDY4LjgwOTk4MjMgNjUuODc0MTE0OTkgQzY5LjEyNTc4MjQ3IDY2LjY1MjMyMTAxIDY5LjQ0MTU4MjY0IDY3LjQzMDUyNzA0IDY5Ljc2Njk1MjUxIDY4LjIzMjMxNTA2IEM3MC4wNDY0MTcyNCA2OC45MTMyNzc0NCA3MC4zMjU4ODE5NiA2OS41OTQyMzk4MSA3MC42MTM4MTUzMSA3MC4yOTU4Mzc0IEM3MS4yMDkzMzUzMyA3Mi4xMjAyNTQ1MiA3MS4yMDkzMzUzMyA3Mi4xMjAyNTQ1MiA3MS4yMDkzMzUzMyA3NS4xMjAyNTQ1MiBDNzkuNDU5MzM1MzMgNzUuMTIwMjU0NTIgODcuNzA5MzM1MzMgNzUuMTIwMjU0NTIgOTYuMjA5MzM1MzMgNzUuMTIwMjU0NTIgQzk2LjIwOTMzNTMzIDgwLjA3MDI1NDUyIDk2LjIwOTMzNTMzIDg1LjAyMDI1NDUyIDk2LjIwOTMzNTMzIDkwLjEyMDI1NDUyIEM5MC4yNjkzMzUzMyA5MC4xMjAyNTQ1MiA4NC4zMjkzMzUzMyA5MC4xMjAyNTQ1MiA3OC4yMDkzMzUzMyA5MC4xMjAyNTQ1MiBDNzkuMTk5MzM1MzMgOTMuNTg1MjU0NTIgNzkuMTk5MzM1MzMgOTMuNTg1MjU0NTIgODAuMjA5MzM1MzMgOTcuMTIwMjU0NTIgQzg1LjQ4OTMzNTMzIDk3LjEyMDI1NDUyIDkwLjc2OTMzNTMzIDk3LjEyMDI1NDUyIDk2LjIwOTMzNTMzIDk3LjEyMDI1NDUyIEM5Ni4yMDkzMzUzMyAxMDIuMDcwMjU0NTIgOTYuMjA5MzM1MzMgMTA3LjAyMDI1NDUyIDk2LjIwOTMzNTMzIDExMi4xMjAyNTQ1MiBDOTEuNzU0MzM1MzMgMTEyLjYxNTI1NDUyIDkxLjc1NDMzNTMzIDExMi42MTUyNTQ1MiA4Ny4yMDkzMzUzMyAxMTMuMTIwMjU0NTIgQzg3LjcxNDY0NzgzIDExNC4zODQ4MjQ4MyA4OC4yMTk5NjAzMyAxMTUuNjQ5Mzk1MTQgODguNzQwNTg1MzMgMTE2Ljk1MjI4NTc3IEM4OS4zOTcxMDI1MiAxMTguNjEyMzM2MzcgOTAuMDUzMzM3ODkgMTIwLjI3MjQ5ODQ1IDkwLjcwOTMzNTMzIDEyMS45MzI3NTQ1MiBDOTEuMjEwMTM2MTEgMTIzLjE4MjgyMjg4IDkxLjIxMDEzNjExIDEyMy4xODI4MjI4OCA5MS43MjEwNTQwOCAxMjQuNDU4MTQ1MTQgQzkyLjE5NDc4NDU1IDEyNS42NjE4MDcyNSA5Mi4xOTQ3ODQ1NSAxMjUuNjYxODA3MjUgOTIuNjc4MDg1MzMgMTI2Ljg4OTc4NTc3IEM5Mi45NzEzNDcwNSAxMjcuNjI4MTc2ODggOTMuMjY0NjA4NzYgMTI4LjM2NjU2Nzk5IDkzLjU2Njc1NzIgMTI5LjEyNzMzNDU5IEM5NC4yMDkzMzUzMyAxMzEuMTIwMjU0NTIgOTQuMjA5MzM1MzMgMTMxLjEyMDI1NDUyIDk0LjIwOTMzNTMzIDEzNC4xMjAyNTQ1MiBDODEuOTk5MzM1MzMgMTM0LjEyMDI1NDUyIDY5Ljc4OTMzNTMzIDEzNC4xMjAyNTQ1MiA1Ny4yMDkzMzUzMyAxMzQuMTIwMjU0NTIgQzUyLjIwOTMzNTMzIDEyMi4xMjAyNTQ1MiA1Mi4yMDkzMzUzMyAxMjIuMTIwMjU0NTIgNDkuMjA5MzM1MzMgMTEyLjEyMDI1NDUyIEMzMC4wNjkzMzUzMyAxMTIuMTIwMjU0NTIgMTAuOTI5MzM1MzMgMTEyLjEyMDI1NDUyIC04Ljc5MDY2NDY3IDExMi4xMjAyNTQ1MiBDLTkuNzgwNjY0NjcgMTE1LjQyMDI1NDUyIC0xMC43NzA2NjQ2NyAxMTguNzIwMjU0NTIgLTExLjc5MDY2NDY3IDEyMi4xMjAyNTQ1MiBDLTEzLjQ0MDY2NDY3IDEyNi4wODAyNTQ1MiAtMTUuMDkwNjY0NjcgMTMwLjA0MDI1NDUyIC0xNi43OTA2NjQ2NyAxMzQuMTIwMjU0NTIgQy0yOS4wMDA2NjQ2NyAxMzQuMTIwMjU0NTIgLTQxLjIxMDY2NDY3IDEzNC4xMjAyNTQ1MiAtNTMuNzkwNjY0NjcgMTM0LjEyMDI1NDUyIEMtNTMuMTI2NDQxNjkgMTMwLjc5OTEzOTYgLTUyLjU1MzU4NjExIDEyOC4yMDE5NDI1MyAtNTEuMzgwNTA4NDIgMTI1LjEzMTk3MzI3IEMtNTAuOTc5Mjg3NzIgMTI0LjA3MzMzMDY5IC01MC45NzkyODc3MiAxMjQuMDczMzMwNjkgLTUwLjU2OTk2MTU1IDEyMi45OTMzMDEzOSBDLTUwLjI5MjE2ODU4IDEyMi4yNzIwNzA5MiAtNTAuMDE0Mzc1NjEgMTIxLjU1MDg0MDQ1IC00OS43MjgxNjQ2NyAxMjAuODA3NzU0NTIgQy00OS4zMDU2NzQ0NCAxMTkuNjk2OTA0OTEgLTQ5LjMwNTY3NDQ0IDExOS42OTY5MDQ5MSAtNDguODc0NjQ5MDUgMTE4LjU2MzYxMzg5IEMtNDguMTgzNDc4OTIgMTE2Ljc0NzgyNzk2IC00Ny40ODc1NDc3OSAxMTQuOTMzODU1NTIgLTQ2Ljc5MDY2NDY3IDExMy4xMjAyNTQ1MiBDLTQ5Ljc2MDY2NDY3IDExMi43OTAyNTQ1MiAtNTIuNzMwNjY0NjcgMTEyLjQ2MDI1NDUyIC01NS43OTA2NjQ2NyAxMTIuMTIwMjU0NTIgQy01NS43OTA2NjQ2NyAxMDcuMTcwMjU0NTIgLTU1Ljc5MDY2NDY3IDEwMi4yMjAyNTQ1MiAtNTUuNzkwNjY0NjcgOTcuMTIwMjU0NTIgQy01MC41MTA2NjQ2NyA5Ny4xMjAyNTQ1MiAtNDUuMjMwNjY0NjcgOTcuMTIwMjU0NTIgLTM5Ljc5MDY2NDY3IDk3LjEyMDI1NDUyIEMtMzkuMTMwNjY0NjcgOTQuODEwMjU0NTIgLTM4LjQ3MDY2NDY3IDkyLjUwMDI1NDUyIC0zNy43OTA2NjQ2NyA5MC4xMjAyNTQ1MiBDLTQzLjczMDY2NDY3IDkwLjEyMDI1NDUyIC00OS42NzA2NjQ2NyA5MC4xMjAyNTQ1MiAtNTUuNzkwNjY0NjcgOTAuMTIwMjU0NTIgQy01NS43OTA2NjQ2NyA4NS4xNzAyNTQ1MiAtNTUuNzkwNjY0NjcgODAuMjIwMjU0NTIgLTU1Ljc5MDY2NDY3IDc1LjEyMDI1NDUyIEMtNDcuNTQwNjY0NjcgNzUuMTIwMjU0NTIgLTM5LjI5MDY2NDY3IDc1LjEyMDI1NDUyIC0zMC43OTA2NjQ2NyA3NS4xMjAyNTQ1MiBDLTMwLjQ2MDY2NDY3IDczLjQ3MDI1NDUyIC0zMC4xMzA2NjQ2NyA3MS44MjAyNTQ1MiAtMjkuNzkwNjY0NjcgNzAuMTIwMjU0NTIgQy0yOS4zNTY1NzU4MyA2OC44MTI0MDQ1NiAtMjguODg3MjM5MjEgNjcuNTE1NzA5OTggLTI4LjM4Mjk0OTgzIDY2LjIzMzI5MTYzIEMtMjcuOTU1MjcwNjEgNjUuMTM2NzU1MTQgLTI3Ljk1NTI3MDYxIDY1LjEzNjc1NTE0IC0yNy41MTg5NTE0MiA2NC4wMTgwNjY0MSBDLTI3LjIwOTAwNzQyIDYzLjIzNTgxMTkyIC0yNi44OTkwNjM0MiA2Mi40NTM1NTc0MyAtMjYuNTc5NzI3MTcgNjEuNjQ3NTk4MjcgQy0yNi4wOTMyMzk1MiA2MC40MDUyNzE4NCAtMjYuMDkzMjM5NTIgNjAuNDA1MjcxODQgLTI1LjU5NjkyMzgzIDU5LjEzNzg0NzkgQy0yNC41NDA0OTM5NyA1Ni40NDI4OTc0OSAtMjMuNDc4MjE0MDQgNTMuNzUwMjk3MzYgLTIyLjQxNTY2NDY3IDUxLjA1Nzc1NDUyIEMtMjEuNjg4NjgwNTUgNDkuMjA3NjI3NzYgLTIwLjk2MjAzODM5IDQ3LjM1NzM2NjU5IC0yMC4yMzU3MzMwMyA0NS41MDY5NzMyNyBDLTE4Ljc3OTY4MzY3IDQxLjc5ODk3MzEgLTE3LjMyMTM4MjQ0IDM4LjA5MTg3MDIyIC0xNS44NjE0NjU0NSAzNC4zODUzOTEyNCBDLTE0LjAwMzg3MjU1IDI5LjY2NjY4MzE1IC0xMi4xNTg0NzMxNyAyNC45NDMzMjA2NSAtMTAuMzE4MDA4NDIgMjAuMjE3OTEwNzcgQy05LjgwNjIzMTMyIDE4LjkwNjEwMjQ1IC05LjI5NDM1Mzc3IDE3LjU5NDMzMzMyIC04Ljc4MjM2Mzg5IDE2LjI4MjYwODAzIEMtNy44NDYzMDQ5OSAxMy44ODM5MzcxMSAtNi45MTE2ODAwOCAxMS40ODQ3MDU5NyAtNS45Nzg2NTI5NSA5LjA4NDg1NDEzIEMtNS41NjcyODA4OCA4LjAzNDM0ODc1IC01LjE1NTkwODgxIDYuOTgzODQzMzggLTQuNzMyMDcwOTIgNS45MDE1MDQ1MiBDLTQuMzc4MzAzODMgNC45OTQ2NDkwNSAtNC4wMjQ1MzY3NCA0LjA4Nzc5MzU4IC0zLjY2MDA0OTQ0IDMuMTUzNDU3NjQgQy0yLjM3OTk5Mzk4IDAuMTU5ODMxNzMgLTIuMzc5OTkzOTggMC4xNTk4MzE3MyAwIDAgWiBNMjAuMjA5MzM1MzMgMzQuMTIwMjU0NTIgQzE2LjgxMTU1MDQyIDQxLjQ0MTY3MiAxMy45NzAzMDk5MyA0OC45Mjk2MjIxMiAxMS4yMDc4NzA0OCA1Ni41MDY3MjkxMyBDMTAuNDUxMzgyMzUgNTguNTc5NTQ2MDkgOS42ODgwNjYyNSA2MC42NDk3NjM3OSA4LjkyNDE3OTA4IDYyLjcxOTg2Mzg5IEM4LjQ0MDY5OTkyIDY0LjAzOTM3NjU3IDcuOTU3NjEyMjcgNjUuMzU5MDMyNzggNy40NzQ5NjAzMyA2Ni42Nzg4NDgyNyBDNy4wMzk1Nzk0NyA2Ny44Njc5Mjc4NiA2LjYwNDE5ODYxIDY5LjA1NzAwNzQ1IDYuMTU1NjI0MzkgNzAuMjgyMTE5NzUgQzUuMTAzOTAxNTkgNzIuOTM3ODUxOCA1LjEwMzkwMTU5IDcyLjkzNzg1MTggNS4yMDkzMzUzMyA3NS4xMjAyNTQ1MiBDMTUuMTA5MzM1MzMgNzUuMTIwMjU0NTIgMjUuMDA5MzM1MzMgNzUuMTIwMjU0NTIgMzUuMjA5MzM1MzMgNzUuMTIwMjU0NTIgQzMzLjQxMTgzNzk3IDY5LjEyODU5NjY3IDMxLjYyMDI3MzkyIDYzLjIzNDQ4Mzc4IDI5LjUxMDExNjU4IDU3LjM2MjQ0MjAyIEMyOS4yNzAyMDQ5MyA1Ni42ODg1MTQxIDI5LjAzMDI5MzI3IDU2LjAxNDU4NjE4IDI4Ljc4MzExMTU3IDU1LjMyMDIzNjIxIEMyOC4wMzE2Nzg1NiA1My4yMTEwNzA1NyAyNy4yNzY4MzI1IDUxLjEwMzE0NjU4IDI2LjUyMTgzNTMzIDQ4Ljk5NTI1NDUyIEMyNi4wMDUzMzA1NCA0Ny41NDc0MTk0MyAyNS40ODkwNTI4MSA0Ni4wOTk1MDMzMyAyNC45NzMwMDcyIDQ0LjY1MTUwNDUyIEMyMy43MjEwNjM0NyA0MS4xNDAxNTA4OCAyMi40NjYwNjAxOSAzNy42Mjk5MDAyNSAyMS4yMDkzMzUzMyAzNC4xMjAyNTQ1MiBDMjAuODc5MzM1MzMgMzQuMTIwMjU0NTIgMjAuNTQ5MzM1MzMgMzQuMTIwMjU0NTIgMjAuMjA5MzM1MzMgMzQuMTIwMjU0NTIgWiBNLTAuNzkwNjY0NjcgOTAuMTIwMjU0NTIgQy0xLjQ1MDY2NDY3IDkyLjQzMDI1NDUyIC0yLjExMDY2NDY3IDk0Ljc0MDI1NDUyIC0yLjc5MDY2NDY3IDk3LjEyMDI1NDUyIEMxMi4zODkzMzUzMyA5Ny4xMjAyNTQ1MiAyNy41NjkzMzUzMyA5Ny4xMjAyNTQ1MiA0My4yMDkzMzUzMyA5Ny4xMjAyNTQ1MiBDNDIuNTQ5MzM1MzMgOTQuODEwMjU0NTIgNDEuODg5MzM1MzMgOTIuNTAwMjU0NTIgNDEuMjA5MzM1MzMgOTAuMTIwMjU0NTIgQzI3LjM0OTMzNTMzIDkwLjEyMDI1NDUyIDEzLjQ4OTMzNTMzIDkwLjEyMDI1NDUyIC0wLjc5MDY2NDY3IDkwLjEyMDI1NDUyIFogIiBmaWxsPSIjOUU5RTlFIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMDcuNzkwNjY0NjcyODUxNTYsNDUuODc5NzQ1NDgzMzk4NDQpIi8+Cjwvc3ZnPgo=",
color1: "#FFAB19",
color2: "#FF8C00",
color3: "#E76F00",
From 612badc2a82beab03926de6f08a7692792f2195e Mon Sep 17 00:00:00 2001
From: GoodBoi19 <181642507+Thebloxers998@users.noreply.github.com>
Date: Thu, 6 Feb 2025 18:12:37 +0000
Subject: [PATCH 18/20] Update oauth.js
---
extensions/Thebloxers998/oauth.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/extensions/Thebloxers998/oauth.js b/extensions/Thebloxers998/oauth.js
index a50fe35f76..5acd19588a 100644
--- a/extensions/Thebloxers998/oauth.js
+++ b/extensions/Thebloxers998/oauth.js
@@ -203,7 +203,7 @@
// Listen for message with authorization code (assuming your app handles this securely)
window.addEventListener(
"message",
- async (event) => {
+ (event) => {
if (event.origin !== window.location.origin) return;
const authorizationCode = event.data.code;
From d16f5e382b24534282a6be53f23e62799dbc1482 Mon Sep 17 00:00:00 2001
From: GoodBoi19 <181642507+Thebloxers998@users.noreply.github.com>
Date: Sat, 15 Feb 2025 12:51:05 +0000
Subject: [PATCH 19/20] Update oauth.js
---
extensions/Thebloxers998/oauth.js | 396 ++++++++++++++----------------
1 file changed, 180 insertions(+), 216 deletions(-)
diff --git a/extensions/Thebloxers998/oauth.js b/extensions/Thebloxers998/oauth.js
index 5acd19588a..69b0db6d59 100644
--- a/extensions/Thebloxers998/oauth.js
+++ b/extensions/Thebloxers998/oauth.js
@@ -1,237 +1,201 @@
// Name: OAuth Extension
// ID: oauthExtension
-// Description: Provides OAuth login functionality for various services (Google, Microsoft, Discord, Twitter, GitHub, Facebook, LinkedIn, Spotify).
+// Description: Provides OAuth login functionality for various services (Google, Microsoft, Discord, Twitter, GitHub, Facebook, LinkedIn, Spotify).
// By: Thebloxers998
// License: MPL-2.0
(function (Scratch) {
- "use strict";
+ "use strict";
- class OAuthExtension {
- constructor() {
- this.tokens = {};
- this.clients = {
- google: {
- clientId: "",
- clientSecret: "",
- redirectUri: "",
- authUrl: "https://accounts.google.com/o/oauth2/auth",
- tokenUrl: "https://oauth2.googleapis.com/token",
- scope: "https://www.googleapis.com/auth/userinfo.profile",
- },
- microsoft: {
- clientId: "",
- clientSecret: "",
- redirectUri: "",
- authUrl:
- "https://login.microsoftonline.com/common/oauth2/v2.0/authorize",
- tokenUrl:
- "https://login.microsoftonline.com/common/oauth2/v2.0/token",
- scope: "https://graph.microsoft.com/User.Read",
- },
- discord: {
- clientId: "",
- clientSecret: "",
- redirectUri: "",
- authUrl: "https://discord.com/api/oauth2/authorize",
- tokenUrl: "https://discord.com/api/oauth2/token",
- scope: "identify",
- },
- twitter: {
- clientId: "",
- clientSecret: "",
- redirectUri: "",
- authUrl: "https://api.twitter.com/oauth/authorize",
- tokenUrl: "https://api.twitter.com/oauth/access_token",
- },
- github: {
- clientId: "",
- clientSecret: "",
- redirectUri: "",
- authUrl: "https://github.com/login/oauth/authorize",
- tokenUrl: "https://github.com/login/oauth/access_token",
- scope: "user",
- },
- facebook: {
- clientId: "",
- clientSecret: "",
- redirectUri: "",
- authUrl: "https://www.facebook.com/v10.0/dialog/oauth",
- tokenUrl: "https://graph.facebook.com/v10.0/oauth/access_token",
- scope: "public_profile",
- },
- linkedin: {
- clientId: "",
- clientSecret: "",
- redirectUri: "",
- authUrl: "https://www.linkedin.com/oauth/v2/authorization",
- tokenUrl: "https://www.linkedin.com/oauth/v2/accessToken",
- scope: "r_liteprofile",
- },
- spotify: {
- clientId: "",
- clientSecret: "",
- redirectUri: "",
- authUrl: "https://accounts.spotify.com/authorize",
- tokenUrl: "https://accounts.spotify.com/api/token",
- scope: "user-read-private",
- },
- };
- }
+ class OAuthExtension {
+ constructor() {
+ this.tokens = {};
+ this.clients = {
+ google: {
+ clientId: "",
+ clientSecret: "",
+ redirectUri: "",
+ authUrl: "https://accounts.google.com/o/oauth2/auth",
+ tokenUrl: "https://oauth2.googleapis.com/token",
+ scope: "https://www.googleapis.com/auth/userinfo.profile",
+ },
+ microsoft: {
+ clientId: "",
+ clientSecret: "",
+ redirectUri: "",
+ authUrl: "https://login.microsoftonline.com/common/oauth2/v2.0/authorize",
+ tokenUrl: "https://login.microsoftonline.com/common/oauth2/v2.0/token",
+ scope: "https://graph.microsoft.com/User.Read",
+ },
+ discord: {
+ clientId: "",
+ clientSecret: "",
+ redirectUri: "",
+ authUrl: "https://discord.com/api/oauth2/authorize",
+ tokenUrl: "https://discord.com/api/oauth2/token",
+ scope: "identify",
+ },
+ twitter: {
+ clientId: "",
+ clientSecret: "",
+ redirectUri: "",
+ authUrl: "https://api.twitter.com/oauth/authorize",
+ tokenUrl: "https://api.twitter.com/oauth/access_token",
+ },
+ github: {
+ clientId: "",
+ clientSecret: "",
+ redirectUri: "",
+ authUrl: "https://github.com/login/oauth/authorize",
+ tokenUrl: "https://github.com/login/oauth/access_token",
+ scope: "user",
+ },
+ facebook: {
+ clientId: "",
+ clientSecret: "",
+ redirectUri: "",
+ authUrl: "https://www.facebook.com/v10.0/dialog/oauth",
+ tokenUrl: "https://graph.facebook.com/v10.0/oauth/access_token",
+ scope: "public_profile",
+ },
+ linkedin: {
+ clientId: "",
+ clientSecret: "",
+ redirectUri: "",
+ authUrl: "https://www.linkedin.com/oauth/v2/authorization",
+ tokenUrl: "https://www.linkedin.com/oauth/v2/accessToken",
+ scope: "r_liteprofile",
+ },
+ spotify: {
+ clientId: "",
+ clientSecret: "",
+ redirectUri: "",
+ authUrl: "https://accounts.spotify.com/authorize",
+ tokenUrl: "https://accounts.spotify.com/api/token",
+ scope: "user-read-private",
+ },
+ };
+ }
- getInfo() {
- return {
- id: "oauthExtension",
- name: Scratch.translate({
- id: "oauthExtension.name",
- default: "OAuth Extension",
- }),
- blockIconURI: "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI1NiIgaGVpZ2h0PSIyNTYiPgo8cGF0aCBkPSJNMCAwIEMyMi4wMzg1MjY1MiAxOC44MTE1OTg1NiAzNi40NjU3OTMzNCA0MS4wNjM3MzM3NyA0NC4zNTE1NjI1IDY4LjkxMDE1NjI1IEM0NC42OTMxNjQwNiA3MC4wODgzNTkzNyA0NS4wMzQ3NjU2MyA3MS4yNjY1NjI1IDQ1LjM4NjcxODc1IDcyLjQ4MDQ2ODc1IEM1MS41OTA5Mjc1NSA5OC43NDAxNDMyMiA0OC4xMTkzNTU5NyAxMjguNDA3NTUzODkgMzcuMzUxNTYyNSAxNTIuOTEwMTU2MjUgQzM2LjkyNjY1NTI3IDE1My44OTE0NTUwOCAzNi45MjY2NTUyNyAxNTMuODkxNDU1MDggMzYuNDkzMTY0MDYgMTU0Ljg5MjU3ODEyIEMyNi41NTAxNTk0MyAxNzcuNDE1NDA2MzEgOS4zNjgzODI4MiAxOTcuMDgzNzE0NDMgLTExLjY0ODQzNzUgMjA5LjkxMDE1NjI1IEMtMTIuNzIwOTM3NSAyMTAuNTkzMzU5MzggLTEzLjc5MzQzNzUgMjExLjI3NjU2MjUgLTE0Ljg5ODQzNzUgMjExLjk4MDQ2ODc1IEMtNDIuNzU5MjI3OTQgMjI4Ljk0MjAxNDc4IC03OC4yNTA2MTE4OSAyMzMuOTI2NDg1NDUgLTExMC4wMzAyNzM0NCAyMjYuNzQ3MDcwMzEgQy0xMTcuODE5NDE3MjkgMjI0Ljc3NzM2MzU3IC0xMjUuMjk4MDI2MiAyMjIuMTQwMzMxOTUgLTEzMi42NDg0Mzc1IDIxOC45MTAxNTYyNSBDLTEzMy4zMDI2MzY3MiAyMTguNjI2ODg0NzcgLTEzMy45NTY4MzU5NCAyMTguMzQzNjEzMjggLTEzNC42MzA4NTkzOCAyMTguMDUxNzU3ODEgQy0xNjQuNzI1OTMyMzQgMjA0Ljc2NTg4NDE0IC0xODguNDMyNjIzMzkgMTc5LjE4ODU5MzM5IC0yMDAuNTE5NTMxMjUgMTQ4LjcxMzg2NzE5IEMtMjAyLjQ3ODkwMDc3IDE0My41MTUyMTc0MiAtMjA0LjEzNTA4MjUgMTM4LjI1NDE1Mjc0IC0yMDUuNjQ4NDM3NSAxMzIuOTEwMTU2MjUgQy0yMDUuOTkwMDM5MDYgMTMxLjczMTk1MzEyIC0yMDYuMzMxNjQwNjMgMTMwLjU1Mzc1IC0yMDYuNjgzNTkzNzUgMTI5LjMzOTg0Mzc1IEMtMjE0LjIxNzQzOTk4IDk3LjQ1MjQwMTU3IC0yMDcuODM1NTc0NTYgNjEuNDM0NjUxNjEgLTE5MS4wMDc4MTI1IDMzLjYwNTQ2ODc1IEMtMTcyLjcxOTMxMzkzIDQuNTE1NjA4MTggLTE0NS40NzI3MDQ5NSAtMTQuNzk0NDA5MjYgLTExMi42NDg0Mzc1IC0yNC4wODk4NDM3NSBDLTExMS40NzAyMzQzOCAtMjQuNDMxNDQ1MzEgLTExMC4yOTIwMzEyNSAtMjQuNzczMDQ2ODcgLTEwOS4wNzgxMjUgLTI1LjEyNSBDLTcxLjkxMjE2MjA0IC0zMy45MDU5NjkyNyAtMjkuNDM4MzUxODQgLTI0LjE0NjUyMjQyIDAgMCBaIE0tMTU2LjY0ODQzNzUgMzguOTEwMTU2MjUgQy0xNzIuNjc2OTQzNTIgNTguMDg4NzczMjggLTE4MC4zOTY0OTAzOCA4NC41ODg4MzUyMyAtMTc4LjM3MTA5Mzc1IDEwOS4yOTI5Njg3NSBDLTE3NS40NzE3NjMxNSAxMzUuNzQ1OTA4ODUgLTE2Mi45NTU1MTQxMyAxNTkuNTg0NTMzMDggLTE0Mi42NDg0Mzc1IDE3Ni45MTAxNTYyNSBDLTEyNi41NDMxNjcwNSAxODkuNjk5NjM1NzIgLTEwNi4zMjExMTA2MiAxOTguMDkxNzg4ODEgLTg1LjY0ODQzNzUgMTk4LjkxMDE1NjI1IEMtODQuODg5MTc5NjkgMTk4Ljk1MDExNzE5IC04NC4xMjk5MjE4NyAxOTguOTkwMDc4MTIgLTgzLjM0NzY1NjI1IDE5OS4wMzEyNSBDLTU2LjU4MDI3NzA5IDE5OS43NzYwMDUyMyAtMzEuNDM2MTQxNzYgMTg4LjgxNjI3MjU4IC0xMi4wNTQ0NDMzNiAxNzAuNzY1NjI1IEM1LjI3MjM5MDEyIDE1NC4wMTA3MzQ1MiAxNi4zOTQyODMxMyAxMzAuMDkxODY1NjUgMTcuMzUxNTYyNSAxMDUuOTEwMTU2MjUgQzE3LjM5MTUyMzQ0IDEwNS4xNTA4OTg0NCAxNy40MzE0ODQzNyAxMDQuMzkxNjQwNjIgMTcuNDcyNjU2MjUgMTAzLjYwOTM3NSBDMTguMjE3NDExNDggNzYuODQxOTk1ODQgNy4yNTc2Nzg4MyA1MS42OTc4NjA1MSAtMTAuNzkyOTY4NzUgMzIuMzE2MTYyMTEgQy0yNy41NDc4NTkyMyAxNC45ODkzMjg2MyAtNTEuNDY2NzI4MSAzLjg2NzQzNTYyIC03NS42NDg0Mzc1IDIuOTEwMTU2MjUgQy03Ni43ODczMjQyMiAyLjg1MDIxNDg0IC03Ni43ODczMjQyMiAyLjg1MDIxNDg0IC03Ny45NDkyMTg3NSAyLjc4OTA2MjUgQy0xMDguODU5OTYwMDYgMS45MjkwMjU1MSAtMTM2LjI0OTk3Njk4IDE2LjQzMzI0OTk3IC0xNTYuNjQ4NDM3NSAzOC45MTAxNTYyNSBaICIgZmlsbD0iIzlFOUU5RSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjA4LjY0ODQzNzUsMjcuMDg5ODQzNzUpIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuNzc5NDM0NjYgMC4wMDIyMjA2MSAxLjU1ODg2OTMyIDAuMDA0NDQxMjIgMi4zNjE5MjMyMiAwLjAwNjcyOTEzIEMzLjI0Mjc2MDc3IDAuMDA2ODA0NjYgNC4xMjM1OTgzMyAwLjAwNjg4MDE5IDUuMDMxMTI3OTMgMC4wMDY5NTgwMSBDNS45ODg0MTI5MyAwLjAxMjExOTI5IDYuOTQ1Njk3OTQgMC4wMTcyODA1OCA3LjkzMTk5MTU4IDAuMDIyNTk4MjcgQzkuMzk0ODA4MTIgMC4wMjQ3MjA2OSA5LjM5NDgwODEyIDAuMDI0NzIwNjkgMTAuODg3MTc2NTEgMC4wMjY4ODU5OSBDMTQuMDE1NDI2NzUgMC4wMzI1MDMxOSAxNy4xNDM2MDY1NiAwLjA0NTA1ODU5IDIwLjI3MTgzNTMzIDAuMDU3NzU0NTIgQzIyLjM4NzA2ODY3IDAuMDYyNzY3MyAyNC41MDIzMDMxMyAwLjA2NzMzMDU5IDI2LjYxNzUzODQ1IDAuMDcxNDI2MzkgQzMxLjgxNDgyODI5IDAuMDgyNDc4MiAzNy4wMTIwNzY3OCAwLjA5OTIzMzA1IDQyLjIwOTMzNTMzIDAuMTIwMjU0NTIgQzQ0Ljk5MTE0MDUxIDYuMjUxMzU5MTEgNDcuNTc5MTE3NDUgMTIuNDM1MDc1MzMgNTAuMDM3NDYwMzMgMTguNzAyMjg1NzcgQzUwLjM5MDE1OTkxIDE5LjU5NjU0NzcgNTAuNzQyODU5NSAyMC40OTA4MDk2MyA1MS4xMDYyNDY5NSAyMS40MTIxNzA0MSBDNTIuMjI1NzczMjEgMjQuMjUxNjQ4MTQgNTMuMzQyNjgwOCAyNy4wOTIxNDYzOCA1NC40NTkzMzUzMyAyOS45MzI3NTQ1MiBDNTUuNTU3NzAyMTUgMzIuNzIyNDMxMiA1Ni42NTY2Mzk1MiAzNS41MTE4ODE3NCA1Ny43NTYwODgyNiAzOC4zMDExMzIyIEM1OC40ODMyNDk1MSA0MC4xNDY2MDUxNSA1OS4yMDk1NzI4OCA0MS45OTI0MDg0OCA1OS45MzUwNDMzMyA0My44Mzg1NDY3NSBDNjEuNzc4MzM5NjQgNDguNTIyNzUzMjQgNjMuNjQxMjU5NzcgNTMuMTk3NzI3NjUgNjUuNTM5NDEzNDUgNTcuODYwMDAwNjEgQzY1LjkxMTc3MTI0IDU4Ljc3Nzg2ODUgNjYuMjg0MTI5MDMgNTkuNjk1NzM2MzkgNjYuNjY3NzcwMzkgNjAuNjQxNDE4NDYgQzY3LjM3NzQxMTc2IDYyLjM4NzQ1NzM3IDY4LjA5MTI4MzIxIDY0LjEzMTc4NDgzIDY4LjgwOTk4MjMgNjUuODc0MTE0OTkgQzY5LjEyNTc4MjQ3IDY2LjY1MjMyMTAxIDY5LjQ0MTU4MjY0IDY3LjQzMDUyNzA0IDY5Ljc2Njk1MjUxIDY4LjIzMjMxNTA2IEM3MC4wNDY0MTcyNCA2OC45MTMyNzc0NCA3MC4zMjU4ODE5NiA2OS41OTQyMzk4MSA3MC42MTM4MTUzMSA3MC4yOTU4Mzc0IEM3MS4yMDkzMzUzMyA3Mi4xMjAyNTQ1MiA3MS4yMDkzMzUzMyA3Mi4xMjAyNTQ1MiA3MS4yMDkzMzUzMyA3NS4xMjAyNTQ1MiBDNzkuNDU5MzM1MzMgNzUuMTIwMjU0NTIgODcuNzA5MzM1MzMgNzUuMTIwMjU0NTIgOTYuMjA5MzM1MzMgNzUuMTIwMjU0NTIgQzk2LjIwOTMzNTMzIDgwLjA3MDI1NDUyIDk2LjIwOTMzNTMzIDg1LjAyMDI1NDUyIDk2LjIwOTMzNTMzIDkwLjEyMDI1NDUyIEM5MC4yNjkzMzUzMyA5MC4xMjAyNTQ1MiA4NC4zMjkzMzUzMyA5MC4xMjAyNTQ1MiA3OC4yMDkzMzUzMyA5MC4xMjAyNTQ1MiBDNzkuMTk5MzM1MzMgOTMuNTg1MjU0NTIgNzkuMTk5MzM1MzMgOTMuNTg1MjU0NTIgODAuMjA5MzM1MzMgOTcuMTIwMjU0NTIgQzg1LjQ4OTMzNTMzIDk3LjEyMDI1NDUyIDkwLjc2OTMzNTMzIDk3LjEyMDI1NDUyIDk2LjIwOTMzNTMzIDk3LjEyMDI1NDUyIEM5Ni4yMDkzMzUzMyAxMDIuMDcwMjU0NTIgOTYuMjA5MzM1MzMgMTA3LjAyMDI1NDUyIDk2LjIwOTMzNTMzIDExMi4xMjAyNTQ1MiBDOTEuNzU0MzM1MzMgMTEyLjYxNTI1NDUyIDkxLjc1NDMzNTMzIDExMi42MTUyNTQ1MiA4Ny4yMDkzMzUzMyAxMTMuMTIwMjU0NTIgQzg3LjcxNDY0NzgzIDExNC4zODQ4MjQ4MyA4OC4yMTk5NjAzMyAxMTUuNjQ5Mzk1MTQgODguNzQwNTg1MzMgMTE2Ljk1MjI4NTc3IEM4OS4zOTcxMDI1MiAxMTguNjEyMzM2MzcgOTAuMDUzMzM3ODkgMTIwLjI3MjQ5ODQ1IDkwLjcwOTMzNTMzIDEyMS45MzI3NTQ1MiBDOTEuMjEwMTM2MTEgMTIzLjE4MjgyMjg4IDkxLjIxMDEzNjExIDEyMy4xODI4MjI4OCA5MS43MjEwNTQwOCAxMjQuNDU4MTQ1MTQgQzkyLjE5NDc4NDU1IDEyNS42NjE4MDcyNSA5Mi4xOTQ3ODQ1NSAxMjUuNjYxODA3MjUgOTIuNjc4MDg1MzMgMTI2Ljg4OTc4NTc3IEM5Mi45NzEzNDcwNSAxMjcuNjI4MTc2ODggOTMuMjY0NjA4NzYgMTI4LjM2NjU2Nzk5IDkzLjU2Njc1NzIgMTI5LjEyNzMzNDU5IEM5NC4yMDkzMzUzMyAxMzEuMTIwMjU0NTIgOTQuMjA5MzM1MzMgMTMxLjEyMDI1NDUyIDk0LjIwOTMzNTMzIDEzNC4xMjAyNTQ1MiBDODEuOTk5MzM1MzMgMTM0LjEyMDI1NDUyIDY5Ljc4OTMzNTMzIDEzNC4xMjAyNTQ1MiA1Ny4yMDkzMzUzMyAxMzQuMTIwMjU0NTIgQzUyLjIwOTMzNTMzIDEyMi4xMjAyNTQ1MiA1Mi4yMDkzMzUzMyAxMjIuMTIwMjU0NTIgNDkuMjA5MzM1MzMgMTEyLjEyMDI1NDUyIEMzMC4wNjkzMzUzMyAxMTIuMTIwMjU0NTIgMTAuOTI5MzM1MzMgMTEyLjEyMDI1NDUyIC04Ljc5MDY2NDY3IDExMi4xMjAyNTQ1MiBDLTkuNzgwNjY0NjcgMTE1LjQyMDI1NDUyIC0xMC43NzA2NjQ2NyAxMTguNzIwMjU0NTIgLTExLjc5MDY2NDY3IDEyMi4xMjAyNTQ1MiBDLTEzLjQ0MDY2NDY3IDEyNi4wODAyNTQ1MiAtMTUuMDkwNjY0NjcgMTMwLjA0MDI1NDUyIC0xNi43OTA2NjQ2NyAxMzQuMTIwMjU0NTIgQy0yOS4wMDA2NjQ2NyAxMzQuMTIwMjU0NTIgLTQxLjIxMDY2NDY3IDEzNC4xMjAyNTQ1MiAtNTMuNzkwNjY0NjcgMTM0LjEyMDI1NDUyIEMtNTMuMTI2NDQxNjkgMTMwLjc5OTEzOTYgLTUyLjU1MzU4NjExIDEyOC4yMDE5NDI1MyAtNTEuMzgwNTA4NDIgMTI1LjEzMTk3MzI3IEMtNTAuOTc5Mjg3NzIgMTI0LjA3MzMzMDY5IC01MC45NzkyODc3MiAxMjQuMDczMzMwNjkgLTUwLjU2OTk2MTU1IDEyMi45OTMzMDEzOSBDLTUwLjI5MjE2ODU4IDEyMi4yNzIwNzA5MiAtNTAuMDE0Mzc1NjEgMTIxLjU1MDg0MDQ1IC00OS43MjgxNjQ2NyAxMjAuODA3NzU0NTIgQy00OS4zMDU2NzQ0NCAxMTkuNjk2OTA0OTEgLTQ5LjMwNTY3NDQ0IDExOS42OTY5MDQ5MSAtNDguODc0NjQ5MDUgMTE4LjU2MzYxMzg5IEMtNDguMTgzNDc4OTIgMTE2Ljc0NzgyNzk2IC00Ny40ODc1NDc3OSAxMTQuOTMzODU1NTIgLTQ2Ljc5MDY2NDY3IDExMy4xMjAyNTQ1MiBDLTQ5Ljc2MDY2NDY3IDExMi43OTAyNTQ1MiAtNTIuNzMwNjY0NjcgMTEyLjQ2MDI1NDUyIC01NS43OTA2NjQ2NyAxMTIuMTIwMjU0NTIgQy01NS43OTA2NjQ2NyAxMDcuMTcwMjU0NTIgLTU1Ljc5MDY2NDY3IDEwMi4yMjAyNTQ1MiAtNTUuNzkwNjY0NjcgOTcuMTIwMjU0NTIgQy01MC41MTA2NjQ2NyA5Ny4xMjAyNTQ1MiAtNDUuMjMwNjY0NjcgOTcuMTIwMjU0NTIgLTM5Ljc5MDY2NDY3IDk3LjEyMDI1NDUyIEMtMzkuMTMwNjY0NjcgOTQuODEwMjU0NTIgLTM4LjQ3MDY2NDY3IDkyLjUwMDI1NDUyIC0zNy43OTA2NjQ2NyA5MC4xMjAyNTQ1MiBDLTQzLjczMDY2NDY3IDkwLjEyMDI1NDUyIC00OS42NzA2NjQ2NyA5MC4xMjAyNTQ1MiAtNTUuNzkwNjY0NjcgOTAuMTIwMjU0NTIgQy01NS43OTA2NjQ2NyA4NS4xNzAyNTQ1MiAtNTUuNzkwNjY0NjcgODAuMjIwMjU0NTIgLTU1Ljc5MDY2NDY3IDc1LjEyMDI1NDUyIEMtNDcuNTQwNjY0NjcgNzUuMTIwMjU0NTIgLTM5LjI5MDY2NDY3IDc1LjEyMDI1NDUyIC0zMC43OTA2NjQ2NyA3NS4xMjAyNTQ1MiBDLTMwLjQ2MDY2NDY3IDczLjQ3MDI1NDUyIC0zMC4xMzA2NjQ2NyA3MS44MjAyNTQ1MiAtMjkuNzkwNjY0NjcgNzAuMTIwMjU0NTIgQy0yOS4zNTY1NzU4MyA2OC44MTI0MDQ1NiAtMjguODg3MjM5MjEgNjcuNTE1NzA5OTggLTI4LjM4Mjk0OTgzIDY2LjIzMzI5MTYzIEMtMjcuOTU1MjcwNjEgNjUuMTM2NzU1MTQgLTI3Ljk1NTI3MDYxIDY1LjEzNjc1NTE0IC0yNy41MTg5NTE0MiA2NC4wMTgwNjY0MSBDLTI3LjIwOTAwNzQyIDYzLjIzNTgxMTkyIC0yNi44OTkwNjM0MiA2Mi40NTM1NTc0MyAtMjYuNTc5NzI3MTcgNjEuNjQ3NTk4MjcgQy0yNi4wOTMyMzk1MiA2MC40MDUyNzE4NCAtMjYuMDkzMjM5NTIgNjAuNDA1MjcxODQgLTI1LjU5NjkyMzgzIDU5LjEzNzg0NzkgQy0yNC41NDA0OTM5NyA1Ni40NDI4OTc0OSAtMjMuNDc4MjE0MDQgNTMuNzUwMjk3MzYgLTIyLjQxNTY2NDY3IDUxLjA1Nzc1NDUyIEMtMjEuNjg4NjgwNTUgNDkuMjA3NjI3NzYgLTIwLjk2MjAzODM5IDQ3LjM1NzM2NjU5IC0yMC4yMzU3MzMwMyA0NS41MDY5NzMyNyBDLTE4Ljc3OTY4MzY3IDQxLjc5ODk3MzEgLTE3LjMyMTM4MjQ0IDM4LjA5MTg3MDIyIC0xNS44NjE0NjU0NSAzNC4zODUzOTEyNCBDLTE0LjAwMzg3MjU1IDI5LjY2NjY4MzE1IC0xMi4xNTg0NzMxNyAyNC45NDMzMjA2NSAtMTAuMzE4MDA4NDIgMjAuMjE3OTEwNzcgQy05LjgwNjIzMTMyIDE4LjkwNjEwMjQ1IC05LjI5NDM1Mzc3IDE3LjU5NDMzMzMyIC04Ljc4MjM2Mzg5IDE2LjI4MjYwODAzIEMtNy44NDYzMDQ5OSAxMy44ODM5MzcxMSAtNi45MTE2ODAwOCAxMS40ODQ3MDU5NyAtNS45Nzg2NTI5NSA5LjA4NDg1NDEzIEMtNS41NjcyODA4OCA4LjAzNDM0ODc1IC01LjE1NTkwODgxIDYuOTgzODQzMzggLTQuNzMyMDcwOTIgNS45MDE1MDQ1MiBDLTQuMzc4MzAzODMgNC45OTQ2NDkwNSAtNC4wMjQ1MzY3NCA0LjA4Nzc5MzU4IC0zLjY2MDA0OTQ0IDMuMTUzNDU3NjQgQy0yLjM3OTk5Mzk4IDAuMTU5ODMxNzMgLTIuMzc5OTkzOTggMC4xNTk4MzE3MyAwIDAgWiBNMjAuMjA5MzM1MzMgMzQuMTIwMjU0NTIgQzE2LjgxMTU1MDQyIDQxLjQ0MTY3MiAxMy45NzAzMDk5MyA0OC45Mjk2MjIxMiAxMS4yMDc4NzA0OCA1Ni41MDY3MjkxMyBDMTAuNDUxMzgyMzUgNTguNTc5NTQ2MDkgOS42ODgwNjYyNSA2MC42NDk3NjM3OSA4LjkyNDE3OTA4IDYyLjcxOTg2Mzg5IEM4LjQ0MDY5OTkyIDY0LjAzOTM3NjU3IDcuOTU3NjEyMjcgNjUuMzU5MDMyNzggNy40NzQ5NjAzMyA2Ni42Nzg4NDgyNyBDNy4wMzk1Nzk0NyA2Ny44Njc5Mjc4NiA2LjYwNDE5ODYxIDY5LjA1NzAwNzQ1IDYuMTU1NjI0MzkgNzAuMjgyMTE5NzUgQzUuMTAzOTAxNTkgNzIuOTM3ODUxOCA1LjEwMzkwMTU5IDcyLjkzNzg1MTggNS4yMDkzMzUzMyA3NS4xMjAyNTQ1MiBDMTUuMTA5MzM1MzMgNzUuMTIwMjU0NTIgMjUuMDA5MzM1MzMgNzUuMTIwMjU0NTIgMzUuMjA5MzM1MzMgNzUuMTIwMjU0NTIgQzMzLjQxMTgzNzk3IDY5LjEyODU5NjY3IDMxLjYyMDI3MzkyIDYzLjIzNDQ4Mzc4IDI5LjUxMDExNjU4IDU3LjM2MjQ0MjAyIEMyOS4yNzAyMDQ5MyA1Ni42ODg1MTQxIDI5LjAzMDI5MzI3IDU2LjAxNDU4NjE4IDI4Ljc4MzExMTU3IDU1LjMyMDIzNjIxIEMyOC4wMzE2Nzg1NiA1My4yMTEwNzA1NyAyNy4yNzY4MzI1IDUxLjEwMzE0NjU4IDI2LjUyMTgzNTMzIDQ4Ljk5NTI1NDUyIEMyNi4wMDUzMzA1NCA0Ny41NDc0MTk0MyAyNS40ODkwNTI4MSA0Ni4wOTk1MDMzMyAyNC45NzMwMDcyIDQ0LjY1MTUwNDUyIEMyMy43MjEwNjM0NyA0MS4xNDAxNTA4OCAyMi40NjYwNjAxOSAzNy42Mjk5MDAyNSAyMS4yMDkzMzUzMyAzNC4xMjAyNTQ1MiBDMjAuODc5MzM1MzMgMzQuMTIwMjU0NTIgMjAuNTQ5MzM1MzMgMzQuMTIwMjU0NTIgMjAuMjA5MzM1MzMgMzQuMTIwMjU0NTIgWiBNLTAuNzkwNjY0NjcgOTAuMTIwMjU0NTIgQy0xLjQ1MDY2NDY3IDkyLjQzMDI1NDUyIC0yLjExMDY2NDY3IDk0Ljc0MDI1NDUyIC0yLjc5MDY2NDY3IDk3LjEyMDI1NDUyIEMxMi4zODkzMzUzMyA5Ny4xMjAyNTQ1MiAyNy41NjkzMzUzMyA5Ny4xMjAyNTQ1MiA0My4yMDkzMzUzMyA5Ny4xMjAyNTQ1MiBDNDIuNTQ5MzM1MzMgOTQuODEwMjU0NTIgNDEuODg5MzM1MzMgOTIuNTAwMjU0NTIgNDEuMjA5MzM1MzMgOTAuMTIwMjU0NTIgQzI3LjM0OTMzNTMzIDkwLjEyMDI1NDUyIDEzLjQ4OTMzNTMzIDkwLjEyMDI1NDUyIC0wLjc5MDY2NDY3IDkwLjEyMDI1NDUyIFogIiBmaWxsPSIjOUU5RTlFIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMDcuNzkwNjY0NjcyODUxNTYsNDUuODc5NzQ1NDgzMzk4NDQpIi8+Cjwvc3ZnPgo=",
- menuIconURI: "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI1NiIgaGVpZ2h0PSIyNTYiPgo8cGF0aCBkPSJNMCAwIEMyMi4wMzg1MjY1MiAxOC44MTE1OTg1NiAzNi40NjU3OTMzNCA0MS4wNjM3MzM3NyA0NC4zNTE1NjI1IDY4LjkxMDE1NjI1IEM0NC42OTMxNjQwNiA3MC4wODgzNTkzNyA0NS4wMzQ3NjU2MyA3MS4yNjY1NjI1IDQ1LjM4NjcxODc1IDcyLjQ4MDQ2ODc1IEM1MS41OTA5Mjc1NSA5OC43NDAxNDMyMiA0OC4xMTkzNTU5NyAxMjguNDA3NTUzODkgMzcuMzUxNTYyNSAxNTIuOTEwMTU2MjUgQzM2LjkyNjY1NTI3IDE1My44OTE0NTUwOCAzNi45MjY2NTUyNyAxNTMuODkxNDU1MDggMzYuNDkzMTY0MDYgMTU0Ljg5MjU3ODEyIEMyNi41NTAxNTk0MyAxNzcuNDE1NDA2MzEgOS4zNjgzODI4MiAxOTcuMDgzNzE0NDMgLTExLjY0ODQzNzUgMjA5LjkxMDE1NjI1IEMtMTIuNzIwOTM3NSAyMTAuNTkzMzU5MzggLTEzLjc5MzQzNzUgMjExLjI3NjU2MjUgLTE0Ljg5ODQzNzUgMjExLjk4MDQ2ODc1IEMtNDIuNzU5MjI3OTQgMjI4Ljk0MjAxNDc4IC03OC4yNTA2MTE4OSAyMzMuOTI2NDg1NDUgLTExMC4wMzAyNzM0NCAyMjYuNzQ3MDcwMzEgQy0xMTcuODE5NDE3MjkgMjI0Ljc3NzM2MzU3IC0xMjUuMjk4MDI2MiAyMjIuMTQwMzMxOTUgLTEzMi42NDg0Mzc1IDIxOC45MTAxNTYyNSBDLTEzMy4zMDI2MzY3MiAyMTguNjI2ODg0NzcgLTEzMy45NTY4MzU5NCAyMTguMzQzNjEzMjggLTEzNC42MzA4NTkzOCAyMTguMDUxNzU3ODEgQy0xNjQuNzI1OTMyMzQgMjA0Ljc2NTg4NDE0IC0xODguNDMyNjIzMzkgMTc5LjE4ODU5MzM5IC0yMDAuNTE5NTMxMjUgMTQ4LjcxMzg2NzE5IEMtMjAyLjQ3ODkwMDc3IDE0My41MTUyMTc0MiAtMjA0LjEzNTA4MjUgMTM4LjI1NDE1Mjc0IC0yMDUuNjQ4NDM3NSAxMzIuOTEwMTU2MjUgQy0yMDUuOTkwMDM5MDYgMTMxLjczMTk1MzEyIC0yMDYuMzMxNjQwNjMgMTMwLjU1Mzc1IC0yMDYuNjgzNTkzNzUgMTI5LjMzOTg0Mzc1IEMtMjE0LjIxNzQzOTk4IDk3LjQ1MjQwMTU3IC0yMDcuODM1NTc0NTYgNjEuNDM0NjUxNjEgLTE5MS4wMDc4MTI1IDMzLjYwNTQ2ODc1IEMtMTcyLjcxOTMxMzkzIDQuNTE1NjA4MTggLTE0NS40NzI3MDQ5NSAtMTQuNzk0NDA5MjYgLTExMi42NDg0Mzc1IC0yNC4wODk4NDM3NSBDLTExMS40NzAyMzQzOCAtMjQuNDMxNDQ1MzEgLTExMC4yOTIwMzEyNSAtMjQuNzczMDQ2ODcgLTEwOS4wNzgxMjUgLTI1LjEyNSBDLTcxLjkxMjE2MjA0IC0zMy45MDU5NjkyNyAtMjkuNDM4MzUxODQgLTI0LjE0NjUyMjQyIDAgMCBaIE0tMTU2LjY0ODQzNzUgMzguOTEwMTU2MjUgQy0xNzIuNjc2OTQzNTIgNTguMDg4NzczMjggLTE4MC4zOTY0OTAzOCA4NC41ODg4MzUyMyAtMTc4LjM3MTA5Mzc1IDEwOS4yOTI5Njg3NSBDLTE3NS40NzE3NjMxNSAxMzUuNzQ1OTA4ODUgLTE2Mi45NTU1MTQxMyAxNTkuNTg0NTMzMDggLTE0Mi42NDg0Mzc1IDE3Ni45MTAxNTYyNSBDLTEyNi41NDMxNjcwNSAxODkuNjk5NjM1NzIgLTEwNi4zMjExMTA2MiAxOTguMDkxNzg4ODEgLTg1LjY0ODQzNzUgMTk4LjkxMDE1NjI1IEMtODQuODg5MTc5NjkgMTk4Ljk1MDExNzE5IC04NC4xMjk5MjE4NyAxOTguOTkwMDc4MTIgLTgzLjM0NzY1NjI1IDE5OS4wMzEyNSBDLTU2LjU4MDI3NzA5IDE5OS43NzYwMDUyMyAtMzEuNDM2MTQxNzYgMTg4LjgxNjI3MjU4IC0xMi4wNTQ0NDMzNiAxNzAuNzY1NjI1IEM1LjI3MjM5MDEyIDE1NC4wMTA3MzQ1MiAxNi4zOTQyODMxMyAxMzAuMDkxODY1NjUgMTcuMzUxNTYyNSAxMDUuOTEwMTU2MjUgQzE3LjM5MTUyMzQ0IDEwNS4xNTA4OTg0NCAxNy40MzE0ODQzNyAxMDQuMzkxNjQwNjIgMTcuNDcyNjU2MjUgMTAzLjYwOTM3NSBDMTguMjE3NDExNDggNzYuODQxOTk1ODQgNy4yNTc2Nzg4MyA1MS42OTc4NjA1MSAtMTAuNzkyOTY4NzUgMzIuMzE2MTYyMTEgQy0yNy41NDc4NTkyMyAxNC45ODkzMjg2MyAtNTEuNDY2NzI4MSAzLjg2NzQzNTYyIC03NS42NDg0Mzc1IDIuOTEwMTU2MjUgQy03Ni43ODczMjQyMiAyLjg1MDIxNDg0IC03Ni43ODczMjQyMiAyLjg1MDIxNDg0IC03Ny45NDkyMTg3NSAyLjc4OTA2MjUgQy0xMDguODU5OTYwMDYgMS45MjkwMjU1MSAtMTM2LjI0OTk3Njk4IDE2LjQzMzI0OTk3IC0xNTYuNjQ4NDM3NSAzOC45MTAxNTYyNSBaICIgZmlsbD0iIzlFOUU5RSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjA4LjY0ODQzNzUsMjcuMDg5ODQzNzUpIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuNzc5NDM0NjYgMC4wMDIyMjA2MSAxLjU1ODg2OTMyIDAuMDA0NDQxMjIgMi4zNjE5MjMyMiAwLjAwNjcyOTEzIEMzLjI0Mjc2MDc3IDAuMDA2ODA0NjYgNC4xMjM1OTgzMyAwLjAwNjg4MDE5IDUuMDMxMTI3OTMgMC4wMDY5NTgwMSBDNS45ODg0MTI5MyAwLjAxMjExOTI5IDYuOTQ1Njk3OTQgMC4wMTcyODA1OCA3LjkzMTk5MTU4IDAuMDIyNTk4MjcgQzkuMzk0ODA4MTIgMC4wMjQ3MjA2OSA5LjM5NDgwODEyIDAuMDI0NzIwNjkgMTAuODg3MTc2NTEgMC4wMjY4ODU5OSBDMTQuMDE1NDI2NzUgMC4wMzI1MDMxOSAxNy4xNDM2MDY1NiAwLjA0NTA1ODU5IDIwLjI3MTgzNTMzIDAuMDU3NzU0NTIgQzIyLjM4NzA2ODY3IDAuMDYyNzY3MyAyNC41MDIzMDMxMyAwLjA2NzMzMDU5IDI2LjYxNzUzODQ1IDAuMDcxNDI2MzkgQzMxLjgxNDgyODI5IDAuMDgyNDc4MiAzNy4wMTIwNzY3OCAwLjA5OTIzMzA1IDQyLjIwOTMzNTMzIDAuMTIwMjU0NTIgQzQ0Ljk5MTE0MDUxIDYuMjUxMzU5MTEgNDcuNTc5MTE3NDUgMTIuNDM1MDc1MzMgNTAuMDM3NDYwMzMgMTguNzAyMjg1NzcgQzUwLjM5MDE1OTkxIDE5LjU5NjU0NzcgNTAuNzQyODU5NSAyMC40OTA4MDk2MyA1MS4xMDYyNDY5NSAyMS40MTIxNzA0MSBDNTIuMjI1NzczMjEgMjQuMjUxNjQ4MTQgNTMuMzQyNjgwOCAyNy4wOTIxNDYzOCA1NC40NTkzMzUzMyAyOS45MzI3NTQ1MiBDNTUuNTU3NzAyMTUgMzIuNzIyNDMxMiA1Ni42NTY2Mzk1MiAzNS41MTE4ODE3NCA1Ny43NTYwODgyNiAzOC4zMDExMzIyIEM1OC40ODMyNDk1MSA0MC4xNDY2MDUxNSA1OS4yMDk1NzI4OCA0MS45OTI0MDg0OCA1OS45MzUwNDMzMyA0My44Mzg1NDY3NSBDNjEuNzc4MzM5NjQgNDguNTIyNzUzMjQgNjMuNjQxMjU5NzcgNTMuMTk3NzI3NjUgNjUuNTM5NDEzNDUgNTcuODYwMDAwNjEgQzY1LjkxMTc3MTI0IDU4Ljc3Nzg2ODUgNjYuMjg0MTI5MDMgNTkuNjk1NzM2MzkgNjYuNjY3NzcwMzkgNjAuNjQxNDE4NDYgQzY3LjM3NzQxMTc2IDYyLjM4NzQ1NzM3IDY4LjA5MTI4MzIxIDY0LjEzMTc4NDgzIDY4LjgwOTk4MjMgNjUuODc0MTE0OTkgQzY5LjEyNTc4MjQ3IDY2LjY1MjMyMTAxIDY5LjQ0MTU4MjY0IDY3LjQzMDUyNzA0IDY5Ljc2Njk1MjUxIDY4LjIzMjMxNTA2IEM3MC4wNDY0MTcyNCA2OC45MTMyNzc0NCA3MC4zMjU4ODE5NiA2OS41OTQyMzk4MSA3MC42MTM4MTUzMSA3MC4yOTU4Mzc0IEM3MS4yMDkzMzUzMyA3Mi4xMjAyNTQ1MiA3MS4yMDkzMzUzMyA3Mi4xMjAyNTQ1MiA3MS4yMDkzMzUzMyA3NS4xMjAyNTQ1MiBDNzkuNDU5MzM1MzMgNzUuMTIwMjU0NTIgODcuNzA5MzM1MzMgNzUuMTIwMjU0NTIgOTYuMjA5MzM1MzMgNzUuMTIwMjU0NTIgQzk2LjIwOTMzNTMzIDgwLjA3MDI1NDUyIDk2LjIwOTMzNTMzIDg1LjAyMDI1NDUyIDk2LjIwOTMzNTMzIDkwLjEyMDI1NDUyIEM5MC4yNjkzMzUzMyA5MC4xMjAyNTQ1MiA4NC4zMjkzMzUzMyA5MC4xMjAyNTQ1MiA3OC4yMDkzMzUzMyA5MC4xMjAyNTQ1MiBDNzkuMTk5MzM1MzMgOTMuNTg1MjU0NTIgNzkuMTk5MzM1MzMgOTMuNTg1MjU0NTIgODAuMjA5MzM1MzMgOTcuMTIwMjU0NTIgQzg1LjQ4OTMzNTMzIDk3LjEyMDI1NDUyIDkwLjc2OTMzNTMzIDk3LjEyMDI1NDUyIDk2LjIwOTMzNTMzIDk3LjEyMDI1NDUyIEM5Ni4yMDkzMzUzMyAxMDIuMDcwMjU0NTIgOTYuMjA5MzM1MzMgMTA3LjAyMDI1NDUyIDk2LjIwOTMzNTMzIDExMi4xMjAyNTQ1MiBDOTEuNzU0MzM1MzMgMTEyLjYxNTI1NDUyIDkxLjc1NDMzNTMzIDExMi42MTUyNTQ1MiA4Ny4yMDkzMzUzMyAxMTMuMTIwMjU0NTIgQzg3LjcxNDY0NzgzIDExNC4zODQ4MjQ4MyA4OC4yMTk5NjAzMyAxMTUuNjQ5Mzk1MTQgODguNzQwNTg1MzMgMTE2Ljk1MjI4NTc3IEM4OS4zOTcxMDI1MiAxMTguNjEyMzM2MzcgOTAuMDUzMzM3ODkgMTIwLjI3MjQ5ODQ1IDkwLjcwOTMzNTMzIDEyMS45MzI3NTQ1MiBDOTEuMjEwMTM2MTEgMTIzLjE4MjgyMjg4IDkxLjIxMDEzNjExIDEyMy4xODI4MjI4OCA5MS43MjEwNTQwOCAxMjQuNDU4MTQ1MTQgQzkyLjE5NDc4NDU1IDEyNS42NjE4MDcyNSA5Mi4xOTQ3ODQ1NSAxMjUuNjYxODA3MjUgOTIuNjc4MDg1MzMgMTI2Ljg4OTc4NTc3IEM5Mi45NzEzNDcwNSAxMjcuNjI4MTc2ODggOTMuMjY0NjA4NzYgMTI4LjM2NjU2Nzk5IDkzLjU2Njc1NzIgMTI5LjEyNzMzNDU5IEM5NC4yMDkzMzUzMyAxMzEuMTIwMjU0NTIgOTQuMjA5MzM1MzMgMTMxLjEyMDI1NDUyIDk0LjIwOTMzNTMzIDEzNC4xMjAyNTQ1MiBDODEuOTk5MzM1MzMgMTM0LjEyMDI1NDUyIDY5Ljc4OTMzNTMzIDEzNC4xMjAyNTQ1MiA1Ny4yMDkzMzUzMyAxMzQuMTIwMjU0NTIgQzUyLjIwOTMzNTMzIDEyMi4xMjAyNTQ1MiA1Mi4yMDkzMzUzMyAxMjIuMTIwMjU0NTIgNDkuMjA5MzM1MzMgMTEyLjEyMDI1NDUyIEMzMC4wNjkzMzUzMyAxMTIuMTIwMjU0NTIgMTAuOTI5MzM1MzMgMTEyLjEyMDI1NDUyIC04Ljc5MDY2NDY3IDExMi4xMjAyNTQ1MiBDLTkuNzgwNjY0NjcgMTE1LjQyMDI1NDUyIC0xMC43NzA2NjQ2NyAxMTguNzIwMjU0NTIgLTExLjc5MDY2NDY3IDEyMi4xMjAyNTQ1MiBDLTEzLjQ0MDY2NDY3IDEyNi4wODAyNTQ1MiAtMTUuMDkwNjY0NjcgMTMwLjA0MDI1NDUyIC0xNi43OTA2NjQ2NyAxMzQuMTIwMjU0NTIgQy0yOS4wMDA2NjQ2NyAxMzQuMTIwMjU0NTIgLTQxLjIxMDY2NDY3IDEzNC4xMjAyNTQ1MiAtNTMuNzkwNjY0NjcgMTM0LjEyMDI1NDUyIEMtNTMuMTI2NDQxNjkgMTMwLjc5OTEzOTYgLTUyLjU1MzU4NjExIDEyOC4yMDE5NDI1MyAtNTEuMzgwNTA4NDIgMTI1LjEzMTk3MzI3IEMtNTAuOTc5Mjg3NzIgMTI0LjA3MzMzMDY5IC01MC45NzkyODc3MiAxMjQuMDczMzMwNjkgLTUwLjU2OTk2MTU1IDEyMi45OTMzMDEzOSBDLTUwLjI5MjE2ODU4IDEyMi4yNzIwNzA5MiAtNTAuMDE0Mzc1NjEgMTIxLjU1MDg0MDQ1IC00OS43MjgxNjQ2NyAxMjAuODA3NzU0NTIgQy00OS4zMDU2NzQ0NCAxMTkuNjk2OTA0OTEgLTQ5LjMwNTY3NDQ0IDExOS42OTY5MDQ5MSAtNDguODc0NjQ5MDUgMTE4LjU2MzYxMzg5IEMtNDguMTgzNDc4OTIgMTE2Ljc0NzgyNzk2IC00Ny40ODc1NDc3OSAxMTQuOTMzODU1NTIgLTQ2Ljc5MDY2NDY3IDExMy4xMjAyNTQ1MiBDLTQ5Ljc2MDY2NDY3IDExMi43OTAyNTQ1MiAtNTIuNzMwNjY0NjcgMTEyLjQ2MDI1NDUyIC01NS43OTA2NjQ2NyAxMTIuMTIwMjU0NTIgQy01NS43OTA2NjQ2NyAxMDcuMTcwMjU0NTIgLTU1Ljc5MDY2NDY3IDEwMi4yMjAyNTQ1MiAtNTUuNzkwNjY0NjcgOTcuMTIwMjU0NTIgQy01MC41MTA2NjQ2NyA5Ny4xMjAyNTQ1MiAtNDUuMjMwNjY0NjcgOTcuMTIwMjU0NTIgLTM5Ljc5MDY2NDY3IDk3LjEyMDI1NDUyIEMtMzkuMTMwNjY0NjcgOTQuODEwMjU0NTIgLTM4LjQ3MDY2NDY3IDkyLjUwMDI1NDUyIC0zNy43OTA2NjQ2NyA5MC4xMjAyNTQ1MiBDLTQzLjczMDY2NDY3IDkwLjEyMDI1NDUyIC00OS42NzA2NjQ2NyA5MC4xMjAyNTQ1MiAtNTUuNzkwNjY0NjcgOTAuMTIwMjU0NTIgQy01NS43OTA2NjQ2NyA4NS4xNzAyNTQ1MiAtNTUuNzkwNjY0NjcgODAuMjIwMjU0NTIgLTU1Ljc5MDY2NDY3IDc1LjEyMDI1NDUyIEMtNDcuNTQwNjY0NjcgNzUuMTIwMjU0NTIgLTM5LjI5MDY2NDY3IDc1LjEyMDI1NDUyIC0zMC43OTA2NjQ2NyA3NS4xMjAyNTQ1MiBDLTMwLjQ2MDY2NDY3IDczLjQ3MDI1NDUyIC0zMC4xMzA2NjQ2NyA3MS44MjAyNTQ1MiAtMjkuNzkwNjY0NjcgNzAuMTIwMjU0NTIgQy0yOS4zNTY1NzU4MyA2OC44MTI0MDQ1NiAtMjguODg3MjM5MjEgNjcuNTE1NzA5OTggLTI4LjM4Mjk0OTgzIDY2LjIzMzI5MTYzIEMtMjcuOTU1MjcwNjEgNjUuMTM2NzU1MTQgLTI3Ljk1NTI3MDYxIDY1LjEzNjc1NTE0IC0yNy41MTg5NTE0MiA2NC4wMTgwNjY0MSBDLTI3LjIwOTAwNzQyIDYzLjIzNTgxMTkyIC0yNi44OTkwNjM0MiA2Mi40NTM1NTc0MyAtMjYuNTc5NzI3MTcgNjEuNjQ3NTk4MjcgQy0yNi4wOTMyMzk1MiA2MC40MDUyNzE4NCAtMjYuMDkzMjM5NTIgNjAuNDA1MjcxODQgLTI1LjU5NjkyMzgzIDU5LjEzNzg0NzkgQy0yNC41NDA0OTM5NyA1Ni40NDI4OTc0OSAtMjMuNDc4MjE0MDQgNTMuNzUwMjk3MzYgLTIyLjQxNTY2NDY3IDUxLjA1Nzc1NDUyIEMtMjEuNjg4NjgwNTUgNDkuMjA3NjI3NzYgLTIwLjk2MjAzODM5IDQ3LjM1NzM2NjU5IC0yMC4yMzU3MzMwMyA0NS41MDY5NzMyNyBDLTE4Ljc3OTY4MzY3IDQxLjc5ODk3MzEgLTE3LjMyMTM4MjQ0IDM4LjA5MTg3MDIyIC0xNS44NjE0NjU0NSAzNC4zODUzOTEyNCBDLTE0LjAwMzg3MjU1IDI5LjY2NjY4MzE1IC0xMi4xNTg0NzMxNyAyNC45NDMzMjA2NSAtMTAuMzE4MDA4NDIgMjAuMjE3OTEwNzcgQy05LjgwNjIzMTMyIDE4LjkwNjEwMjQ1IC05LjI5NDM1Mzc3IDE3LjU5NDMzMzMyIC04Ljc4MjM2Mzg5IDE2LjI4MjYwODAzIEMtNy44NDYzMDQ5OSAxMy44ODM5MzcxMSAtNi45MTE2ODAwOCAxMS40ODQ3MDU5NyAtNS45Nzg2NTI5NSA5LjA4NDg1NDEzIEMtNS41NjcyODA4OCA4LjAzNDM0ODc1IC01LjE1NTkwODgxIDYuOTgzODQzMzggLTQuNzMyMDcwOTIgNS45MDE1MDQ1MiBDLTQuMzc4MzAzODMgNC45OTQ2NDkwNSAtNC4wMjQ1MzY3NCA0LjA4Nzc5MzU4IC0zLjY2MDA0OTQ0IDMuMTUzNDU3NjQgQy0yLjM3OTk5Mzk4IDAuMTU5ODMxNzMgLTIuMzc5OTkzOTggMC4xNTk4MzE3MyAwIDAgWiBNMjAuMjA5MzM1MzMgMzQuMTIwMjU0NTIgQzE2LjgxMTU1MDQyIDQxLjQ0MTY3MiAxMy45NzAzMDk5MyA0OC45Mjk2MjIxMiAxMS4yMDc4NzA0OCA1Ni41MDY3MjkxMyBDMTAuNDUxMzgyMzUgNTguNTc5NTQ2MDkgOS42ODgwNjYyNSA2MC42NDk3NjM3OSA4LjkyNDE3OTA4IDYyLjcxOTg2Mzg5IEM4LjQ0MDY5OTkyIDY0LjAzOTM3NjU3IDcuOTU3NjEyMjcgNjUuMzU5MDMyNzggNy40NzQ5NjAzMyA2Ni42Nzg4NDgyNyBDNy4wMzk1Nzk0NyA2Ny44Njc5Mjc4NiA2LjYwNDE5ODYxIDY5LjA1NzAwNzQ1IDYuMTU1NjI0MzkgNzAuMjgyMTE5NzUgQzUuMTAzOTAxNTkgNzIuOTM3ODUxOCA1LjEwMzkwMTU5IDcyLjkzNzg1MTggNS4yMDkzMzUzMyA3NS4xMjAyNTQ1MiBDMTUuMTA5MzM1MzMgNzUuMTIwMjU0NTIgMjUuMDA5MzM1MzMgNzUuMTIwMjU0NTIgMzUuMjA5MzM1MzMgNzUuMTIwMjU0NTIgQzMzLjQxMTgzNzk3IDY5LjEyODU5NjY3IDMxLjYyMDI3MzkyIDYzLjIzNDQ4Mzc4IDI5LjUxMDExNjU4IDU3LjM2MjQ0MjAyIEMyOS4yNzAyMDQ5MyA1Ni42ODg1MTQxIDI5LjAzMDI5MzI3IDU2LjAxNDU4NjE4IDI4Ljc4MzExMTU3IDU1LjMyMDIzNjIxIEMyOC4wMzE2Nzg1NiA1My4yMTEwNzA1NyAyNy4yNzY4MzI1IDUxLjEwMzE0NjU4IDI2LjUyMTgzNTMzIDQ4Ljk5NTI1NDUyIEMyNi4wMDUzMzA1NCA0Ny41NDc0MTk0MyAyNS40ODkwNTI4MSA0Ni4wOTk1MDMzMyAyNC45NzMwMDcyIDQ0LjY1MTUwNDUyIEMyMy43MjEwNjM0NyA0MS4xNDAxNTA4OCAyMi40NjYwNjAxOSAzNy42Mjk5MDAyNSAyMS4yMDkzMzUzMyAzNC4xMjAyNTQ1MiBDMjAuODc5MzM1MzMgMzQuMTIwMjU0NTIgMjAuNTQ5MzM1MzMgMzQuMTIwMjU0NTIgMjAuMjA5MzM1MzMgMzQuMTIwMjU0NTIgWiBNLTAuNzkwNjY0NjcgOTAuMTIwMjU0NTIgQy0xLjQ1MDY2NDY3IDkyLjQzMDI1NDUyIC0yLjExMDY2NDY3IDk0Ljc0MDI1NDUyIC0yLjc5MDY2NDY3IDk3LjEyMDI1NDUyIEMxMi4zODkzMzUzMyA5Ny4xMjAyNTQ1MiAyNy41NjkzMzUzMyA5Ny4xMjAyNTQ1MiA0My4yMDkzMzUzMyA5Ny4xMjAyNTQ1MiBDNDIuNTQ5MzM1MzMgOTQuODEwMjU0NTIgNDEuODg5MzM1MzMgOTIuNTAwMjU0NTIgNDEuMjA5MzM1MzMgOTAuMTIwMjU0NTIgQzI3LjM0OTMzNTMzIDkwLjEyMDI1NDUyIDEzLjQ4OTMzNTMzIDkwLjEyMDI1NDUyIC0wLjc5MDY2NDY3IDkwLjEyMDI1NDUyIFogIiBmaWxsPSIjOUU5RTlFIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMDcuNzkwNjY0NjcyODUxNTYsNDUuODc5NzQ1NDgzMzk4NDQpIi8+Cjwvc3ZnPgo=",
- color1: "#FFAB19",
- color2: "#FF8C00",
- color3: "#E76F00",
- blocks: [
- {
- opcode: "login",
- text: Scratch.translate({
- id: "oauthExtension.login",
- default: "Log in with [SERVICE]",
- }),
- blockType: Scratch.BlockType.COMMAND,
- arguments: {
- SERVICE: { type: Scratch.ArgumentType.STRING, menu: "SERVICE" },
- },
- },
- {
- opcode: "isLoggedIn",
- text: Scratch.translate({
- id: "oauthExtension.isLoggedIn",
- default: "Is user logged in with [SERVICE]?",
- }),
- blockType: Scratch.BlockType.BOOLEAN,
- arguments: {
- SERVICE: { type: Scratch.ArgumentType.STRING, menu: "SERVICE" },
- },
- },
- {
- opcode: "setClientId",
- text: Scratch.translate({
- id: "oauthExtension.setClientId",
- default: "Set client ID for [SERVICE] to [CLIENT_ID]",
- }),
- blockType: Scratch.BlockType.COMMAND,
- arguments: {
- SERVICE: { type: Scratch.ArgumentType.STRING, menu: "SERVICE" },
- CLIENT_ID: {
- type: Scratch.ArgumentType.STRING,
- defaultValue: "",
- },
- },
- },
- {
- opcode: "setClientSecret",
- text: Scratch.translate({
- id: "oauthExtension.setClientSecret",
- default: "Set client secret for [SERVICE] to [CLIENT_SECRET]",
- }),
- blockType: Scratch.BlockType.COMMAND,
- arguments: {
- SERVICE: { type: Scratch.ArgumentType.STRING, menu: "SERVICE" },
- CLIENT_SECRET: {
- type: Scratch.ArgumentType.STRING,
- defaultValue: "",
- },
- },
- },
- {
- opcode: "setRedirectUri",
- text: Scratch.translate({
- id: "oauthExtension.setRedirectUri",
- default: "Set redirect URI for [SERVICE] to [REDIRECT_URI]",
- }),
- blockType: Scratch.BlockType.COMMAND,
- arguments: {
- SERVICE: { type: Scratch.ArgumentType.STRING, menu: "SERVICE" },
- REDIRECT_URI: {
- type: Scratch.ArgumentType.STRING,
- defaultValue: "",
- },
- },
- },
- ],
- menus: {
- SERVICE: {
- items: [
- { text: "Google", value: "google" },
- { text: "Microsoft", value: "microsoft" },
- { text: "Discord", value: "discord" },
- { text: "Twitter", value: "twitter" },
- { text: "GitHub", value: "github" },
- { text: "Facebook", value: "facebook" },
- { text: "LinkedIn", value: "linkedin" },
- { text: "Spotify", value: "spotify" },
- ],
- },
- },
- };
- }
+ getInfo() {
+ return {
+ id: "oauthExtension",
+ name: Scratch.translate({ id: "oauthExtension.name", default: "OAuth Extension" }),
+ blockIconURI: "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI1NiIgaGVpZ2h0PSIyNTYiPgo8cGF0aCBkPSJNMCAwIEMyMi4wMzg1MjY1MiAxOC44MTE1OTg1NiAzNi40NjU3OTMzNCA0MS4wNjM3MzM3NyA0NC4zNTE1NjI1IDY4LjkxMDE1NjI1IEM0NC42OTMxNjQwNiA3MC4wODgzNTkzNyA0NS4wMzQ3NjU2MyA3MS4yNjY1NjI1IDQ1LjM4NjcxODc1IDcyLjQ4MDQ2ODc1IEM1MS41OTA5Mjc1NSA5OC43NDAxNDMyMiA0OC4xMTkzNTU5NyAxMjguNDA3NTUzODkgMzcuMzUxNTYyNSAxNTIuOTEwMTU2MjUgQzM2LjkyNjY1NTI3IDE1My44OTE0NTUwOCAzNi45MjY2NTUyNyAxNTMuODkxNDU1MDggMzYuNDkzMTY0MDYgMTU0Ljg5MjU3ODEyIEMyNi41NTAxNTk0MyAxNzcuNDE1NDA2MzEgOS4zNjgzODI4MiAxOTcuMDgzNzE0NDMgLTExLjY0ODQzNzUgMjA5LjkxMDE1NjI1IEMtMTIuNzIwOTM3NSAyMTAuNTkzMzU5MzggLTEzLjc5MzQzNzUgMjExLjI3NjU2MjUgLTE0Ljg5ODQzNzUgMjExLjk4MDQ2ODc1IEMtNDIuNzU5MjI3OTQgMjI4Ljk0MjAxNDc4IC03OC4yNTA2MTE4OSAyMzMuOTI2NDg1NDUgLTExMC4wMzAyNzM0NCAyMjYuNzQ3MDcwMzEgQy0xMTcuODE5NDE3MjkgMjI0Ljc3NzM2MzU3IC0xMjUuMjk4MDI2MiAyMjIuMTQwMzMxOTUgLTEzMi42NDg0Mzc1IDIxOC45MTAxNTYyNSBDLTEzMy4zMDI2MzY3MiAyMTguNjI2ODg0NzcgLTEzMy45NTY4MzU5NCAyMTguMzQzNjEzMjggLTEzNC42MzA4NTkzOCAyMTguMDUxNzU3ODEgQy0xNjQuNzI1OTMyMzQgMjA0Ljc2NTg4NDE0IC0xODguNDMyNjIzMzkgMTc5LjE4ODU5MzM5IC0yMDAuNTE5NTMxMjUgMTQ4LjcxMzg2NzE5IEMtMjAyLjQ3ODkwMDc3IDE0My41MTUyMTc0MiAtMjA0LjEzNTA4MjUgMTM4LjI1NDE1Mjc0IC0yMDUuNjQ4NDM3NSAxMzIuOTEwMTU2MjUgQy0yMDUuOTkwMDM5MDYgMTMxLjczMTk1MzEyIC0yMDYuMzMxNjQwNjMgMTMwLjU1Mzc1IC0yMDYuNjgzNTkzNzUgMTI5LjMzOTg0Mzc1IEMtMjE0LjIxNzQzOTk4IDk3LjQ1MjQwMTU3IC0yMDcuODM1NTc0NTYgNjEuNDM0NjUxNjEgLTE5MS4wMDc4MTI1IDMzLjYwNTQ2ODc1IEMtMTcyLjcxOTMxMzkzIDQuNTE1NjA4MTggLTE0NS40NzI3MDQ5NSAtMTQuNzk0NDA5MjYgLTExMi42NDg0Mzc1IC0yNC4wODk4NDM3NSBDLTExMS40NzAyMzQzOCAtMjQuNDMxNDQ1MzEgLTExMC4yOTIwMzEyNSAtMjQuNzczMDQ2ODcgLTEwOS4wNzgxMjUgLTI1LjEyNSBDLTcxLjkxMjE2MjA0IC0zMy45MDU5NjkyNyAtMjkuNDM4MzUxODQgLTI0LjE0NjUyMjQyIDAgMCBaIE0tMTU2LjY0ODQzNzUgMzguOTEwMTU2MjUgQy0xNzIuNjc2OTQzNTIgNTguMDg4NzczMjggLTE4MC4zOTY0OTAzOCA4NC41ODg4MzUyMyAtMTc4LjM3MTA5Mzc1IDEwOS4yOTI5Njg3NSBDLTE3NS40NzE3NjMxNSAxMzUuNzQ1OTA4ODUgLTE2Mi45NTU1MTQxMyAxNTkuNTg0NTMzMDggLTE0Mi42NDg0Mzc1IDE3Ni45MTAxNTYyNSBDLTEyNi41NDMxNjcwNSAxODkuNjk5NjM1NzIgLTEwNi4zMjExMTA2MiAxOTguMDkxNzg4ODEgLTg1LjY0ODQzNzUgMTk4LjkxMDE1NjI1IEMtODQuODg5MTc5NjkgMTk4Ljk1MDExNzE5IC04NC4xMjk5MjE4NyAxOTguOTkwMDc4MTIgLTgzLjM0NzY1NjI1IDE5OS4wMzEyNSBDLTU2LjU4MDI3NzA5IDE5OS43NzYwMDUyMyAtMzEuNDM2MTQxNzYgMTg4LjgxNjI3MjU4IC0xMi4wNTQ0NDMzNiAxNzAuNzY1NjI1IEM1LjI3MjM5MDEyIDE1NC4wMTA3MzQ1MiAxNi4zOTQyODMxMyAxMzAuMDkxODY1NjUgMTcuMzUxNTYyNSAxMDUuOTEwMTU2MjUgQzE3LjM5MTUyMzQ0IDEwNS4xNTA4OTg0NCAxNy40MzE0ODQzNyAxMDQuMzkxNjQwNjIgMTcuNDcyNjU2MjUgMTAzLjYwOTM3NSBDMTguMjE3NDExNDggNzYuODQxOTk1ODQgNy4yNTc2Nzg4MyA1MS42OTc4NjA1MSAtMTAuNzkyOTY4NzUgMzIuMzE2MTYyMTEgQy0yNy41NDc4NTkyMyAxNC45ODkzMjg2MyAtNTEuNDY2NzI4MSAzLjg2NzQzNTYyIC03NS42NDg0Mzc1IDIuOTEwMTU2MjUgQy03Ni43ODczMjQyMiAyLjg1MDIxNDg0IC03Ni43ODczMjQyMiAyLjg1MDIxNDg0IC03Ny45NDkyMTg3NSAyLjc4OTA2MjUgQy0xMDguODU5OTYwMDYgMS45MjkwMjU1MSAtMTM2LjI0OTk3Njk4IDE2LjQzMzI0OTk3IC0xNTYuNjQ4NDM3NSAzOC45MTAxNTYyNSBaICIgZmlsbD0iIzlFOUU5RSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjA4LjY0ODQzNzUsMjcuMDg5ODQzNzUpIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuNzc5NDM0NjYgMC4wMDIyMjA2MSAxLjU1ODg2OTMyIDAuMDA0NDQxMjIgMi4zNjE5MjMyMiAwLjAwNjcyOTEzIEMzLjI0Mjc2MDc3IDAuMDA2ODA0NjYgNC4xMjM1OTgzMyAwLjAwNjg4MDE5IDUuMDMxMTI3OTMgMC4wMDY5NTgwMSBDNS45ODg0MTI5MyAwLjAxMjExOTI5IDYuOTQ1Njk3OTQgMC4wMTcyODA1OCA3LjkzMTk5MTU4IDAuMDIyNTk4MjcgQzkuMzk0ODA4MTIgMC4wMjQ3MjA2OSA5LjM5NDgwODEyIDAuMDI0NzIwNjkgMTAuODg3MTc2NTEgMC4wMjY4ODU5OSBDMTQuMDE1NDI2NzUgMC4wMzI1MDMxOSAxNy4xNDM2MDY1NiAwLjA0NTA1ODU5IDIwLjI3MTgzNTMzIDAuMDU3NzU0NTIgQzIyLjM4NzA2ODY3IDAuMDYyNzY3MyAyNC41MDIzMDMxMyAwLjA2NzMzMDU5IDI2LjYxNzUzODQ1IDAuMDcxNDI2MzkgQzMxLjgxNDgyODI5IDAuMDgyNDc4MiAzNy4wMTIwNzY3OCAwLjA5OTIzMzA1IDQyLjIwOTMzNTMzIDAuMTIwMjU0NTIgQzQ0Ljk5MTE0MDUxIDYuMjUxMzU5MTEgNDcuNTc5MTE3NDUgMTIuNDM1MDc1MzMgNTAuMDM3NDYwMzMgMTguNzAyMjg1NzcgQzUwLjM5MDE1OTkxIDE5LjU5NjU0NzcgNTAuNzQyODU5NSAyMC40OTA4MDk2MyA1MS4xMDYyNDY5NSAyMS40MTIxNzA0MSBDNTIuMjI1NzczMjEgMjQuMjUxNjQ4MTQgNTMuMzQyNjgwOCAyNy4wOTIxNDYzOCA1NC40NTkzMzUzMyAyOS45MzI3NTQ1MiBDNTUuNTU3NzAyMTUgMzIuNzIyNDMxMiA1Ni42NTY2Mzk1MiAzNS41MTE4ODE3NCA1Ny43NTYwODgyNiAzOC4zMDExMzIyIEM1OC40ODMyNDk1MSA0MC4xNDY2MDUxNSA1OS4yMDk1NzI4OCA0MS45OTI0MDg0OCA1OS45MzUwNDMzMyA0My44Mzg1NDY3NSBDNjEuNzc4MzM5NjQgNDguNTIyNzUzMjQgNjMuNjQxMjU5NzcgNTMuMTk3NzI3NjUgNjUuNTM5NDEzNDUgNTcuODYwMDAwNjEgQzY1LjkxMTc3MTI0IDU4Ljc3Nzg2ODUgNjYuMjg0MTI5MDMgNTkuNjk1NzM2MzkgNjYuNjY3NzcwMzkgNjAuNjQxNDE4NDYgQzY3LjM3NzQxMTc2IDYyLjM4NzQ1NzM3IDY4LjA5MTI4MzIxIDY0LjEzMTc4NDgzIDY4LjgwOTk4MjMgNjUuODc0MTE0OTkgQzY5LjEyNTc4MjQ3IDY2LjY1MjMyMTAxIDY5LjQ0MTU4MjY0IDY3LjQzMDUyNzA0IDY5Ljc2Njk1MjUxIDY4LjIzMjMxNTA2IEM3MC4wNDY0MTcyNCA2OC45MTMyNzc0NCA3MC4zMjU4ODE5NiA2OS41OTQyMzk4MSA3MC42MTM4MTUzMSA3MC4yOTU4Mzc0IEM3MS4yMDkzMzUzMyA3Mi4xMjAyNTQ1MiA3MS4yMDkzMzUzMyA3Mi4xMjAyNTQ1MiA3MS4yMDkzMzUzMyA3NS4xMjAyNTQ1MiBDNzkuNDU5MzM1MzMgNzUuMTIwMjU0NTIgODcuNzA5MzM1MzMgNzUuMTIwMjU0NTIgOTYuMjA5MzM1MzMgNzUuMTIwMjU0NTIgQzk2LjIwOTMzNTMzIDgwLjA3MDI1NDUyIDk2LjIwOTMzNTMzIDg1LjAyMDI1NDUyIDk2LjIwOTMzNTMzIDkwLjEyMDI1NDUyIEM5MC4yNjkzMzUzMyA5MC4xMjAyNTQ1MiA4NC4zMjkzMzUzMyA5MC4xMjAyNTQ1MiA3OC4yMDkzMzUzMyA5MC4xMjAyNTQ1MiBDNzkuMTk5MzM1MzMgOTMuNTg1MjU0NTIgNzkuMTk5MzM1MzMgOTMuNTg1MjU0NTIgODAuMjA5MzM1MzMgOTcuMTIwMjU0NTIgQzg1LjQ4OTMzNTMzIDk3LjEyMDI1NDUyIDkwLjc2OTMzNTMzIDk3LjEyMDI1NDUyIDk2LjIwOTMzNTMzIDk3LjEyMDI1NDUyIEM5Ni4yMDkzMzUzMyAxMDIuMDcwMjU0NTIgOTYuMjA5MzM1MzMgMTA3LjAyMDI1NDUyIDk2LjIwOTMzNTMzIDExMi4xMjAyNTQ1MiBDOTEuNzU0MzM1MzMgMTEyLjYxNTI1NDUyIDkxLjc1NDMzNTMzIDExMi42MTUyNTQ1MiA4Ny4yMDkzMzUzMyAxMTMuMTIwMjU0NTIgQzg3LjcxNDY0NzgzIDExNC4zODQ4MjQ4MyA4OC4yMTk5NjAzMyAxMTUuNjQ5Mzk1MTQgODguNzQwNTg1MzMgMTE2Ljk1MjI4NTc3IEM4OS4zOTcxMDI1MiAxMTguNjEyMzM2MzcgOTAuMDUzMzM3ODkgMTIwLjI3MjQ5ODQ1IDkwLjcwOTMzNTMzIDEyMS45MzI3NTQ1MiBDOTEuMjEwMTM2MTEgMTIzLjE4MjgyMjg4IDkxLjIxMDEzNjExIDEyMy4xODI4MjI4OCA5MS43MjEwNTQwOCAxMjQuNDU4MTQ1MTQgQzkyLjE5NDc4NDU1IDEyNS42NjE4MDcyNSA5Mi4xOTQ3ODQ1NSAxMjUuNjYxODA3MjUgOTIuNjc4MDg1MzMgMTI2Ljg4OTc4NTc3IEM5Mi45NzEzNDcwNSAxMjcuNjI4MTc2ODggOTMuMjY0NjA4NzYgMTI4LjM2NjU2Nzk5IDkzLjU2Njc1NzIgMTI5LjEyNzMzNDU5IEM5NC4yMDkzMzUzMyAxMzEuMTIwMjU0NTIgOTQuMjA5MzM1MzMgMTMxLjEyMDI1NDUyIDk0LjIwOTMzNTMzIDEzNC4xMjAyNTQ1MiBDODEuOTk5MzM1MzMgMTM0LjEyMDI1NDUyIDY5Ljc4OTMzNTMzIDEzNC4xMjAyNTQ1MiA1Ny4yMDkzMzUzMyAxMzQuMTIwMjU0NTIgQzUyLjIwOTMzNTMzIDEyMi4xMjAyNTQ1MiA1Mi4yMDkzMzUzMyAxMjIuMTIwMjU0NTIgNDkuMjA5MzM1MzMgMTEyLjEyMDI1NDUyIEMzMC4wNjkzMzUzMyAxMTIuMTIwMjU0NTIgMTAuOTI5MzM1MzMgMTEyLjEyMDI1NDUyIC04Ljc5MDY2NDY3IDExMi4xMjAyNTQ1MiBDLTkuNzgwNjY0NjcgMTE1LjQyMDI1NDUyIC0xMC43NzA2NjQ2NyAxMTguNzIwMjU0NTIgLTExLjc5MDY2NDY3IDEyMi4xMjAyNTQ1MiBDLTEzLjQ0MDY2NDY3IDEyNi4wODAyNTQ1MiAtMTUuMDkwNjY0NjcgMTMwLjA0MDI1NDUyIC0xNi43OTA2NjQ2NyAxMzQuMTIwMjU0NTIgQy0yOS4wMDA2NjQ2NyAxMzQuMTIwMjU0NTIgLTQxLjIxMDY2NDY3IDEzNC4xMjAyNTQ1MiAtNTMuNzkwNjY0NjcgMTM0LjEyMDI1NDUyIEMtNTMuMTI2NDQxNjkgMTMwLjc5OTEzOTYgLTUyLjU1MzU4NjExIDEyOC4yMDE5NDI1MyAtNTEuMzgwNTA4NDIgMTI1LjEzMTk3MzI3IEMtNTAuOTc5Mjg3NzIgMTI0LjA3MzMzMDY5IC01MC45NzkyODc3MiAxMjQuMDczMzMwNjkgLTUwLjU2OTk2MTU1IDEyMi45OTMzMDEzOSBDLTUwLjI5MjE2ODU4IDEyMi4yNzIwNzA5MiAtNTAuMDE0Mzc1NjEgMTIxLjU1MDg0MDQ1IC00OS43MjgxNjQ2NyAxMjAuODA3NzU0NTIgQy00OS4zMDU2NzQ0NCAxMTkuNjk2OTA0OTEgLTQ5LjMwNTY3NDQ0IDExOS42OTY5MDQ5MSAtNDguODc0NjQ5MDUgMTE4LjU2MzYxMzg5IEMtNDguMTgzNDc4OTIgMTE2Ljc0NzgyNzk2IC00Ny40ODc1NDc3OSAxMTQuOTMzODU1NTIgLTQ2Ljc5MDY2NDY3IDExMy4xMjAyNTQ1MiBDLTQ5Ljc2MDY2NDY3IDExMi43OTAyNTQ1MiAtNTIuNzMwNjY0NjcgMTEyLjQ2MDI1NDUyIC01NS43OTA2NjQ2NyAxMTIuMTIwMjU0NTIgQy01NS43OTA2NjQ2NyAxMDcuMTcwMjU0NTIgLTU1Ljc5MDY2NDY3IDEwMi4yMjAyNTQ1MiAtNTUuNzkwNjY0NjcgOTcuMTIwMjU0NTIgQy01MC41MTA2NjQ2NyA5Ny4xMjAyNTQ1MiAtNDUuMjMwNjY0NjcgOTcuMTIwMjU0NTIgLTM5Ljc5MDY2NDY3IDk3LjEyMDI1NDUyIEMtMzkuMTMwNjY0NjcgOTQuODEwMjU0NTIgLTM4LjQ3MDY2NDY3IDkyLjUwMDI1NDUyIC0zNy43OTA2NjQ2NyA5MC4xMjAyNTQ1MiBDLTQzLjczMDY2NDY3IDkwLjEyMDI1NDUyIC00OS42NzA2NjQ2NyA5MC4xMjAyNTQ1MiAtNTUuNzkwNjY0NjcgOTAuMTIwMjU0NTIgQy01NS43OTA2NjQ2NyA4NS4xNzAyNTQ1MiAtNTUuNzkwNjY0NjcgODAuMjIwMjU0NTIgLTU1Ljc5MDY2NDY3IDc1LjEyMDI1NDUyIEMtNDcuNTQwNjY0NjcgNzUuMTIwMjU0NTIgLTM5LjI5MDY2NDY3IDc1LjEyMDI1NDUyIC0zMC43OTA2NjQ2NyA3NS4xMjAyNTQ1MiBDLTMwLjQ2MDY2NDY3IDczLjQ3MDI1NDUyIC0zMC4xMzA2NjQ2NyA3MS44MjAyNTQ1MiAtMjkuNzkwNjY0NjcgNzAuMTIwMjU0NTIgQy0yOS4zNTY1NzU4MyA2OC44MTI0MDQ1NiAtMjguODg3MjM5MjEgNjcuNTE1NzA5OTggLTI4LjM4Mjk0OTgzIDY2LjIzMzI5MTYzIEMtMjcuOTU1MjcwNjEgNjUuMTM2NzU1MTQgLTI3Ljk1NTI3MDYxIDY1LjEzNjc1NTE0IC0yNy41MTg5NTE0MiA2NC4wMTgwNjY0MSBDLTI3LjIwOTAwNzQyIDYzLjIzNTgxMTkyIC0yNi44OTkwNjM0MiA2Mi40NTM1NTc0MyAtMjYuNTc5NzI3MTcgNjEuNjQ3NTk4MjcgQy0yNi4wOTMyMzk1MiA2MC40MDUyNzE4NCAtMjYuMDkzMjM5NTIgNjAuNDA1MjcxODQgLTI1LjU5NjkyMzgzIDU5LjEzNzg0NzkgQy0yNC41NDA0OTM5NyA1Ni40NDI4OTc0OSAtMjMuNDc4MjE0MDQgNTMuNzUwMjk3MzYgLTIyLjQxNTY2NDY3IDUxLjA1Nzc1NDUyIEMtMjEuNjg4NjgwNTUgNDkuMjA3NjI3NzYgLTIwLjk2MjAzODM5IDQ3LjM1NzM2NjU5IC0yMC4yMzU3MzMwMyA0NS41MDY5NzMyNyBDLTE4Ljc3OTY4MzY3IDQxLjc5ODk3MzEgLTE3LjMyMTM4MjQ0IDM4LjA5MTg3MDIyIC0xNS44NjE0NjU0NSAzNC4zODUzOTEyNCBDLTE0LjAwMzg3MjU1IDI5LjY2NjY4MzE1IC0xMi4xNTg0NzMxNyAyNC45NDMzMjA2NSAtMTAuMzE4MDA4NDIgMjAuMjE3OTEwNzcgQy05LjgwNjIzMTMyIDE4LjkwNjEwMjQ1IC05LjI5NDM1Mzc3IDE3LjU5NDMzMzMyIC04Ljc4MjM2Mzg5IDE2LjI4MjYwODAzIEMtNy44NDYzMDQ5OSAxMy44ODM5MzcxMSAtNi45MTE2ODAwOCAxMS40ODQ3MDU5NyAtNS45Nzg2NTI5NSA5LjA4NDg1NDEzIEMtNS41NjcyODA4OCA4LjAzNDM0ODc1IC01LjE1NTkwODgxIDYuOTgzODQzMzggLTQuNzMyMDcwOTIgNS45MDE1MDQ1MiBDLTQuMzc4MzAzODMgNC45OTQ2NDkwNSAtNC4wMjQ1MzY3NCA0LjA4Nzc5MzU4IC0zLjY2MDA0OTQ0IDMuMTUzNDU3NjQgQy0yLjM3OTk5Mzk4IDAuMTU5ODMxNzMgLTIuMzc5OTkzOTggMC4xNTk4MzE3MyAwIDAgWiBNMjAuMjA5MzM1MzMgMzQuMTIwMjU0NTIgQzE2LjgxMTU1MDQyIDQxLjQ0MTY3MiAxMy45NzAzMDk5MyA0OC45Mjk2MjIxMiAxMS4yMDc4NzA0OCA1Ni41MDY3MjkxMyBDMTAuNDUxMzgyMzUgNTguNTc5NTQ2MDkgOS42ODgwNjYyNSA2MC42NDk3NjM3OSA4LjkyNDE3OTA4IDYyLjcxOTg2Mzg5IEM4LjQ0MDY5OTkyIDY0LjAzOTM3NjU3IDcuOTU3NjEyMjcgNjUuMzU5MDMyNzggNy40NzQ5NjAzMyA2Ni42Nzg4NDgyNyBDNy4wMzk1Nzk0NyA2Ny44Njc5Mjc4NiA2LjYwNDE5ODYxIDY5LjA1NzAwNzQ1IDYuMTU1NjI0MzkgNzAuMjgyMTE5NzUgQzUuMTAzOTAxNTkgNzIuOTM3ODUxOCA1LjEwMzkwMTU5IDcyLjkzNzg1MTggNS4yMDkzMzUzMyA3NS4xMjAyNTQ1MiBDMTUuMTA5MzM1MzMgNzUuMTIwMjU0NTIgMjUuMDA5MzM1MzMgNzUuMTIwMjU0NTIgMzUuMjA5MzM1MzMgNzUuMTIwMjU0NTIgQzMzLjQxMTgzNzk3IDY5LjEyODU5NjY3IDMxLjYyMDI3MzkyIDYzLjIzNDQ4Mzc4IDI5LjUxMDExNjU4IDU3LjM2MjQ0MjAyIEMyOS4yNzAyMDQ5MyA1Ni42ODg1MTQxIDI5LjAzMDI5MzI3IDU2LjAxNDU4NjE4IDI4Ljc4MzExMTU3IDU1LjMyMDIzNjIxIEMyOC4wMzE2Nzg1NiA1My4yMTEwNzA1NyAyNy4yNzY4MzI1IDUxLjEwMzE0NjU4IDI2LjUyMTgzNTMzIDQ4Ljk5NTI1NDUyIEMyNi4wMDUzMzA1NCA0Ny41NDc0MTk0MyAyNS40ODkwNTI4MSA0Ni4wOTk1MDMzMyAyNC45NzMwMDcyIDQ0LjY1MTUwNDUyIEMyMy43MjEwNjM0NyA0MS4xNDAxNTA4OCAyMi40NjYwNjAxOSAzNy42Mjk5MDAyNSAyMS4yMDkzMzUzMyAzNC4xMjAyNTQ1MiBDMjAuODc5MzM1MzMgMzQuMTIwMjU0NTIgMjAuNTQ5MzM1MzMgMzQuMTIwMjU0NTIgMjAuMjA5MzM1MzMgMzQuMTIwMjU0NTIgWiBNLTAuNzkwNjY0NjcgOTAuMTIwMjU0NTIgQy0xLjQ1MDY2NDY3IDkyLjQzMDI1NDUyIC0yLjExMDY2NDY3IDk0Ljc0MDI1NDUyIC0yLjc5MDY2NDY3IDk3LjEyMDI1NDUyIEMxMi4zODkzMzUzMyA5Ny4xMjAyNTQ1MiAyNy41NjkzMzUzMyA5Ny4xMjAyNTQ1MiA0My4yMDkzMzUzMyA5Ny4xMjAyNTQ1MiBDNDIuNTQ5MzM1MzMgOTQuODEwMjU0NTIgNDEuODg5MzM1MzMgOTIuNTAwMjU0NTIgNDEuMjA5MzM1MzMgOTAuMTIwMjU0NTIgQzI3LjM0OTMzNTMzIDkwLjEyMDI1NDUyIDEzLjQ4OTMzNTMzIDkwLjEyMDI1NDUyIC0wLjc5MDY2NDY3IDkwLjEyMDI1NDUyIFogIiBmaWxsPSIjOUU5RTlFIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMDcuNzkwNjY0NjcyODUxNTYsNDUuODc5NzQ1NDgzMzk4NDQpIi8+Cjwvc3ZnPgo=",
+ menuIconURI: "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI1NiIgaGVpZ2h0PSIyNTYiPgo8cGF0aCBkPSJNMCAwIEMyMi4wMzg1MjY1MiAxOC44MTE1OTg1NiAzNi40NjU3OTMzNCA0MS4wNjM3MzM3NyA0NC4zNTE1NjI1IDY4LjkxMDE1NjI1IEM0NC42OTMxNjQwNiA3MC4wODgzNTkzNyA0NS4wMzQ3NjU2MyA3MS4yNjY1NjI1IDQ1LjM4NjcxODc1IDcyLjQ4MDQ2ODc1IEM1MS41OTA5Mjc1NSA5OC43NDAxNDMyMiA0OC4xMTkzNTU5NyAxMjguNDA3NTUzODkgMzcuMzUxNTYyNSAxNTIuOTEwMTU2MjUgQzM2LjkyNjY1NTI3IDE1My44OTE0NTUwOCAzNi45MjY2NTUyNyAxNTMuODkxNDU1MDggMzYuNDkzMTY0MDYgMTU0Ljg5MjU3ODEyIEMyNi41NTAxNTk0MyAxNzcuNDE1NDA2MzEgOS4zNjgzODI4MiAxOTcuMDgzNzE0NDMgLTExLjY0ODQzNzUgMjA5LjkxMDE1NjI1IEMtMTIuNzIwOTM3NSAyMTAuNTkzMzU5MzggLTEzLjc5MzQzNzUgMjExLjI3NjU2MjUgLTE0Ljg5ODQzNzUgMjExLjk4MDQ2ODc1IEMtNDIuNzU5MjI3OTQgMjI4Ljk0MjAxNDc4IC03OC4yNTA2MTE4OSAyMzMuOTI2NDg1NDUgLTExMC4wMzAyNzM0NCAyMjYuNzQ3MDcwMzEgQy0xMTcuODE5NDE3MjkgMjI0Ljc3NzM2MzU3IC0xMjUuMjk4MDI2MiAyMjIuMTQwMzMxOTUgLTEzMi42NDg0Mzc1IDIxOC45MTAxNTYyNSBDLTEzMy4zMDI2MzY3MiAyMTguNjI2ODg0NzcgLTEzMy45NTY4MzU5NCAyMTguMzQzNjEzMjggLTEzNC42MzA4NTkzOCAyMTguMDUxNzU3ODEgQy0xNjQuNzI1OTMyMzQgMjA0Ljc2NTg4NDE0IC0xODguNDMyNjIzMzkgMTc5LjE4ODU5MzM5IC0yMDAuNTE5NTMxMjUgMTQ4LjcxMzg2NzE5IEMtMjAyLjQ3ODkwMDc3IDE0My41MTUyMTc0MiAtMjA0LjEzNTA4MjUgMTM4LjI1NDE1Mjc0IC0yMDUuNjQ4NDM3NSAxMzIuOTEwMTU2MjUgQy0yMDUuOTkwMDM5MDYgMTMxLjczMTk1MzEyIC0yMDYuMzMxNjQwNjMgMTMwLjU1Mzc1IC0yMDYuNjgzNTkzNzUgMTI5LjMzOTg0Mzc1IEMtMjE0LjIxNzQzOTk4IDk3LjQ1MjQwMTU3IC0yMDcuODM1NTc0NTYgNjEuNDM0NjUxNjEgLTE5MS4wMDc4MTI1IDMzLjYwNTQ2ODc1IEMtMTcyLjcxOTMxMzkzIDQuNTE1NjA4MTggLTE0NS40NzI3MDQ5NSAtMTQuNzk0NDA5MjYgLTExMi42NDg0Mzc1IC0yNC4wODk4NDM3NSBDLTExMS40NzAyMzQzOCAtMjQuNDMxNDQ1MzEgLTExMC4yOTIwMzEyNSAtMjQuNzczMDQ2ODcgLTEwOS4wNzgxMjUgLTI1LjEyNSBDLTcxLjkxMjE2MjA0IC0zMy45MDU5NjkyNyAtMjkuNDM4MzUxODQgLTI0LjE0NjUyMjQyIDAgMCBaIE0tMTU2LjY0ODQzNzUgMzguOTEwMTU2MjUgQy0xNzIuNjc2OTQzNTIgNTguMDg4NzczMjggLTE4MC4zOTY0OTAzOCA4NC41ODg4MzUyMyAtMTc4LjM3MTA5Mzc1IDEwOS4yOTI5Njg3NSBDLTE3NS40NzE3NjMxNSAxMzUuNzQ1OTA4ODUgLTE2Mi45NTU1MTQxMyAxNTkuNTg0NTMzMDggLTE0Mi42NDg0Mzc1IDE3Ni45MTAxNTYyNSBDLTEyNi41NDMxNjcwNSAxODkuNjk5NjM1NzIgLTEwNi4zMjExMTA2MiAxOTguMDkxNzg4ODEgLTg1LjY0ODQzNzUgMTk4LjkxMDE1NjI1IEMtODQuODg5MTc5NjkgMTk4Ljk1MDExNzE5IC04NC4xMjk5MjE4NyAxOTguOTkwMDc4MTIgLTgzLjM0NzY1NjI1IDE5OS4wMzEyNSBDLTU2LjU4MDI3NzA5IDE5OS43NzYwMDUyMyAtMzEuNDM2MTQxNzYgMTg4LjgxNjI3MjU4IC0xMi4wNTQ0NDMzNiAxNzAuNzY1NjI1IEM1LjI3MjM5MDEyIDE1NC4wMTA3MzQ1MiAxNi4zOTQyODMxMyAxMzAuMDkxODY1NjUgMTcuMzUxNTYyNSAxMDUuOTEwMTU2MjUgQzE3LjM5MTUyMzQ0IDEwNS4xNTA4OTg0NCAxNy40MzE0ODQzNyAxMDQuMzkxNjQwNjIgMTcuNDcyNjU2MjUgMTAzLjYwOTM3NSBDMTguMjE3NDExNDggNzYuODQxOTk1ODQgNy4yNTc2Nzg4MyA1MS42OTc4NjA1MSAtMTAuNzkyOTY4NzUgMzIuMzE2MTYyMTEgQy0yNy41NDc4NTkyMyAxNC45ODkzMjg2MyAtNTEuNDY2NzI4MSAzLjg2NzQzNTYyIC03NS42NDg0Mzc1IDIuOTEwMTU2MjUgQy03Ni43ODczMjQyMiAyLjg1MDIxNDg0IC03Ni43ODczMjQyMiAyLjg1MDIxNDg0IC03Ny45NDkyMTg3NSAyLjc4OTA2MjUgQy0xMDguODU5OTYwMDYgMS45MjkwMjU1MSAtMTM2LjI0OTk3Njk4IDE2LjQzMzI0OTk3IC0xNTYuNjQ4NDM3NSAzOC45MTAxNTYyNSBaICIgZmlsbD0iIzlFOUU5RSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjA4LjY0ODQzNzUsMjcuMDg5ODQzNzUpIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuNzc5NDM0NjYgMC4wMDIyMjA2MSAxLjU1ODg2OTMyIDAuMDA0NDQxMjIgMi4zNjE5MjMyMiAwLjAwNjcyOTEzIEMzLjI0Mjc2MDc3IDAuMDA2ODA0NjYgNC4xMjM1OTgzMyAwLjAwNjg4MDE5IDUuMDMxMTI3OTMgMC4wMDY5NTgwMSBDNS45ODg0MTI5MyAwLjAxMjExOTI5IDYuOTQ1Njk3OTQgMC4wMTcyODA1OCA3LjkzMTk5MTU4IDAuMDIyNTk4MjcgQzkuMzk0ODA4MTIgMC4wMjQ3MjA2OSA5LjM5NDgwODEyIDAuMDI0NzIwNjkgMTAuODg3MTc2NTEgMC4wMjY4ODU5OSBDMTQuMDE1NDI2NzUgMC4wMzI1MDMxOSAxNy4xNDM2MDY1NiAwLjA0NTA1ODU5IDIwLjI3MTgzNTMzIDAuMDU3NzU0NTIgQzIyLjM4NzA2ODY3IDAuMDYyNzY3MyAyNC41MDIzMDMxMyAwLjA2NzMzMDU5IDI2LjYxNzUzODQ1IDAuMDcxNDI2MzkgQzMxLjgxNDgyODI5IDAuMDgyNDc4MiAzNy4wMTIwNzY3OCAwLjA5OTIzMzA1IDQyLjIwOTMzNTMzIDAuMTIwMjU0NTIgQzQ0Ljk5MTE0MDUxIDYuMjUxMzU5MTEgNDcuNTc5MTE3NDUgMTIuNDM1MDc1MzMgNTAuMDM3NDYwMzMgMTguNzAyMjg1NzcgQzUwLjM5MDE1OTkxIDE5LjU5NjU0NzcgNTAuNzQyODU5NSAyMC40OTA4MDk2MyA1MS4xMDYyNDY5NSAyMS40MTIxNzA0MSBDNTIuMjI1NzczMjEgMjQuMjUxNjQ4MTQgNTMuMzQyNjgwOCAyNy4wOTIxNDYzOCA1NC40NTkzMzUzMyAyOS45MzI3NTQ1MiBDNTUuNTU3NzAyMTUgMzIuNzIyNDMxMiA1Ni42NTY2Mzk1MiAzNS41MTE4ODE3NCA1Ny43NTYwODgyNiAzOC4zMDExMzIyIEM1OC40ODMyNDk1MSA0MC4xNDY2MDUxNSA1OS4yMDk1NzI4OCA0MS45OTI0MDg0OCA1OS45MzUwNDMzMyA0My44Mzg1NDY3NSBDNjEuNzc4MzM5NjQgNDguNTIyNzUzMjQgNjMuNjQxMjU5NzcgNTMuMTk3NzI3NjUgNjUuNTM5NDEzNDUgNTcuODYwMDAwNjEgQzY1LjkxMTc3MTI0IDU4Ljc3Nzg2ODUgNjYuMjg0MTI5MDMgNTkuNjk1NzM2MzkgNjYuNjY3NzcwMzkgNjAuNjQxNDE4NDYgQzY3LjM3NzQxMTc2IDYyLjM4NzQ1NzM3IDY4LjA5MTI4MzIxIDY0LjEzMTc4NDgzIDY4LjgwOTk4MjMgNjUuODc0MTE0OTkgQzY5LjEyNTc4MjQ3IDY2LjY1MjMyMTAxIDY5LjQ0MTU4MjY0IDY3LjQzMDUyNzA0IDY5Ljc2Njk1MjUxIDY4LjIzMjMxNTA2IEM3MC4wNDY0MTcyNCA2OC45MTMyNzc0NCA3MC4zMjU4ODE5NiA2OS41OTQyMzk4MSA3MC42MTM4MTUzMSA3MC4yOTU4Mzc0IEM3MS4yMDkzMzUzMyA3Mi4xMjAyNTQ1MiA3MS4yMDkzMzUzMyA3Mi4xMjAyNTQ1MiA3MS4yMDkzMzUzMyA3NS4xMjAyNTQ1MiBDNzkuNDU5MzM1MzMgNzUuMTIwMjU0NTIgODcuNzA5MzM1MzMgNzUuMTIwMjU0NTIgOTYuMjA5MzM1MzMgNzUuMTIwMjU0NTIgQzk2LjIwOTMzNTMzIDgwLjA3MDI1NDUyIDk2LjIwOTMzNTMzIDg1LjAyMDI1NDUyIDk2LjIwOTMzNTMzIDkwLjEyMDI1NDUyIEM5MC4yNjkzMzUzMyA5MC4xMjAyNTQ1MiA4NC4zMjkzMzUzMyA5MC4xMjAyNTQ1MiA3OC4yMDkzMzUzMyA5MC4xMjAyNTQ1MiBDNzkuMTk5MzM1MzMgOTMuNTg1MjU0NTIgNzkuMTk5MzM1MzMgOTMuNTg1MjU0NTIgODAuMjA5MzM1MzMgOTcuMTIwMjU0NTIgQzg1LjQ4OTMzNTMzIDk3LjEyMDI1NDUyIDkwLjc2OTMzNTMzIDk3LjEyMDI1NDUyIDk2LjIwOTMzNTMzIDk3LjEyMDI1NDUyIEM5Ni4yMDkzMzUzMyAxMDIuMDcwMjU0NTIgOTYuMjA5MzM1MzMgMTA3LjAyMDI1NDUyIDk2LjIwOTMzNTMzIDExMi4xMjAyNTQ1MiBDOTEuNzU0MzM1MzMgMTEyLjYxNTI1NDUyIDkxLjc1NDMzNTMzIDExMi42MTUyNTQ1MiA4Ny4yMDkzMzUzMyAxMTMuMTIwMjU0NTIgQzg3LjcxNDY0NzgzIDExNC4zODQ4MjQ4MyA4OC4yMTk5NjAzMyAxMTUuNjQ5Mzk1MTQgODguNzQwNTg1MzMgMTE2Ljk1MjI4NTc3IEM4OS4zOTcxMDI1MiAxMTguNjEyMzM2MzcgOTAuMDUzMzM3ODkgMTIwLjI3MjQ5ODQ1IDkwLjcwOTMzNTMzIDEyMS45MzI3NTQ1MiBDOTEuMjEwMTM2MTEgMTIzLjE4MjgyMjg4IDkxLjIxMDEzNjExIDEyMy4xODI4MjI4OCA5MS43MjEwNTQwOCAxMjQuNDU4MTQ1MTQgQzkyLjE5NDc4NDU1IDEyNS42NjE4MDcyNSA5Mi4xOTQ3ODQ1NSAxMjUuNjYxODA3MjUgOTIuNjc4MDg1MzMgMTI2Ljg4OTc4NTc3IEM5Mi45NzEzNDcwNSAxMjcuNjI4MTc2ODggOTMuMjY0NjA4NzYgMTI4LjM2NjU2Nzk5IDkzLjU2Njc1NzIgMTI5LjEyNzMzNDU5IEM5NC4yMDkzMzUzMyAxMzEuMTIwMjU0NTIgOTQuMjA5MzM1MzMgMTMxLjEyMDI1NDUyIDk0LjIwOTMzNTMzIDEzNC4xMjAyNTQ1MiBDODEuOTk5MzM1MzMgMTM0LjEyMDI1NDUyIDY5Ljc4OTMzNTMzIDEzNC4xMjAyNTQ1MiA1Ny4yMDkzMzUzMyAxMzQuMTIwMjU0NTIgQzUyLjIwOTMzNTMzIDEyMi4xMjAyNTQ1MiA1Mi4yMDkzMzUzMyAxMjIuMTIwMjU0NTIgNDkuMjA5MzM1MzMgMTEyLjEyMDI1NDUyIEMzMC4wNjkzMzUzMyAxMTIuMTIwMjU0NTIgMTAuOTI5MzM1MzMgMTEyLjEyMDI1NDUyIC04Ljc5MDY2NDY3IDExMi4xMjAyNTQ1MiBDLTkuNzgwNjY0NjcgMTE1LjQyMDI1NDUyIC0xMC43NzA2NjQ2NyAxMTguNzIwMjU0NTIgLTExLjc5MDY2NDY3IDEyMi4xMjAyNTQ1MiBDLTEzLjQ0MDY2NDY3IDEyNi4wODAyNTQ1MiAtMTUuMDkwNjY0NjcgMTMwLjA0MDI1NDUyIC0xNi43OTA2NjQ2NyAxMzQuMTIwMjU0NTIgQy0yOS4wMDA2NjQ2NyAxMzQuMTIwMjU0NTIgLTQxLjIxMDY2NDY3IDEzNC4xMjAyNTQ1MiAtNTMuNzkwNjY0NjcgMTM0LjEyMDI1NDUyIEMtNTMuMTI2NDQxNjkgMTMwLjc5OTEzOTYgLTUyLjU1MzU4NjExIDEyOC4yMDE5NDI1MyAtNTEuMzgwNTA4NDIgMTI1LjEzMTk3MzI3IEMtNTAuOTc5Mjg3NzIgMTI0LjA3MzMzMDY5IC01MC45NzkyODc3MiAxMjQuMDczMzMwNjkgLTUwLjU2OTk2MTU1IDEyMi45OTMzMDEzOSBDLTUwLjI5MjE2ODU4IDEyMi4yNzIwNzA5MiAtNTAuMDE0Mzc1NjEgMTIxLjU1MDg0MDQ1IC00OS43MjgxNjQ2NyAxMjAuODA3NzU0NTIgQy00OS4zMDU2NzQ0NCAxMTkuNjk2OTA0OTEgLTQ5LjMwNTY3NDQ0IDExOS42OTY5MDQ5MSAtNDguODc0NjQ5MDUgMTE4LjU2MzYxMzg5IEMtNDguMTgzNDc4OTIgMTE2Ljc0NzgyNzk2IC00Ny40ODc1NDc3OSAxMTQuOTMzODU1NTIgLTQ2Ljc5MDY2NDY3IDExMy4xMjAyNTQ1MiBDLTQ5Ljc2MDY2NDY3IDExMi43OTAyNTQ1MiAtNTIuNzMwNjY0NjcgMTEyLjQ2MDI1NDUyIC01NS43OTA2NjQ2NyAxMTIuMTIwMjU0NTIgQy01NS43OTA2NjQ2NyAxMDcuMTcwMjU0NTIgLTU1Ljc5MDY2NDY3IDEwMi4yMjAyNTQ1MiAtNTUuNzkwNjY0NjcgOTcuMTIwMjU0NTIgQy01MC41MTA2NjQ2NyA5Ny4xMjAyNTQ1MiAtNDUuMjMwNjY0NjcgOTcuMTIwMjU0NTIgLTM5Ljc5MDY2NDY3IDk3LjEyMDI1NDUyIEMtMzkuMTMwNjY0NjcgOTQuODEwMjU0NTIgLTM4LjQ3MDY2NDY3IDkyLjUwMDI1NDUyIC0zNy43OTA2NjQ2NyA5MC4xMjAyNTQ1MiBDLTQzLjczMDY2NDY3IDkwLjEyMDI1NDUyIC00OS42NzA2NjQ2NyA5MC4xMjAyNTQ1MiAtNTUuNzkwNjY0NjcgOTAuMTIwMjU0NTIgQy01NS43OTA2NjQ2NyA4NS4xNzAyNTQ1MiAtNTUuNzkwNjY0NjcgODAuMjIwMjU0NTIgLTU1Ljc5MDY2NDY3IDc1LjEyMDI1NDUyIEMtNDcuNTQwNjY0NjcgNzUuMTIwMjU0NTIgLTM5LjI5MDY2NDY3IDc1LjEyMDI1NDUyIC0zMC43OTA2NjQ2NyA3NS4xMjAyNTQ1MiBDLTMwLjQ2MDY2NDY3IDczLjQ3MDI1NDUyIC0zMC4xMzA2NjQ2NyA3MS44MjAyNTQ1MiAtMjkuNzkwNjY0NjcgNzAuMTIwMjU0NTIgQy0yOS4zNTY1NzU4MyA2OC44MTI0MDQ1NiAtMjguODg3MjM5MjEgNjcuNTE1NzA5OTggLTI4LjM4Mjk0OTgzIDY2LjIzMzI5MTYzIEMtMjcuOTU1MjcwNjEgNjUuMTM2NzU1MTQgLTI3Ljk1NTI3MDYxIDY1LjEzNjc1NTE0IC0yNy41MTg5NTE0MiA2NC4wMTgwNjY0MSBDLTI3LjIwOTAwNzQyIDYzLjIzNTgxMTkyIC0yNi44OTkwNjM0MiA2Mi40NTM1NTc0MyAtMjYuNTc5NzI3MTcgNjEuNjQ3NTk4MjcgQy0yNi4wOTMyMzk1MiA2MC40MDUyNzE4NCAtMjYuMDkzMjM5NTIgNjAuNDA1MjcxODQgLTI1LjU5NjkyMzgzIDU5LjEzNzg0NzkgQy0yNC41NDA0OTM5NyA1Ni40NDI4OTc0OSAtMjMuNDc4MjE0MDQgNTMuNzUwMjk3MzYgLTIyLjQxNTY2NDY3IDUxLjA1Nzc1NDUyIEMtMjEuNjg4NjgwNTUgNDkuMjA3NjI3NzYgLTIwLjk2MjAzODM5IDQ3LjM1NzM2NjU5IC0yMC4yMzU3MzMwMyA0NS41MDY5NzMyNyBDLTE4Ljc3OTY4MzY3IDQxLjc5ODk3MzEgLTE3LjMyMTM4MjQ0IDM4LjA5MTg3MDIyIC0xNS44NjE0NjU0NSAzNC4zODUzOTEyNCBDLTE0LjAwMzg3MjU1IDI5LjY2NjY4MzE1IC0xMi4xNTg0NzMxNyAyNC45NDMzMjA2NSAtMTAuMzE4MDA4NDIgMjAuMjE3OTEwNzcgQy05LjgwNjIzMTMyIDE4LjkwNjEwMjQ1IC05LjI5NDM1Mzc3IDE3LjU5NDMzMzMyIC04Ljc4MjM2Mzg5IDE2LjI4MjYwODAzIEMtNy44NDYzMDQ5OSAxMy44ODM5MzcxMSAtNi45MTE2ODAwOCAxMS40ODQ3MDU5NyAtNS45Nzg2NTI5NSA5LjA4NDg1NDEzIEMtNS41NjcyODA4OCA4LjAzNDM0ODc1IC01LjE1NTkwODgxIDYuOTgzODQzMzggLTQuNzMyMDcwOTIgNS45MDE1MDQ1MiBDLTQuMzc4MzAzODMgNC45OTQ2NDkwNSAtNC4wMjQ1MzY3NCA0LjA4Nzc5MzU4IC0zLjY2MDA0OTQ0IDMuMTUzNDU3NjQgQy0yLjM3OTk5Mzk4IDAuMTU5ODMxNzMgLTIuMzc5OTkzOTggMC4xNTk4MzE3MyAwIDAgWiBNMjAuMjA5MzM1MzMgMzQuMTIwMjU0NTIgQzE2LjgxMTU1MDQyIDQxLjQ0MTY3MiAxMy45NzAzMDk5MyA0OC45Mjk2MjIxMiAxMS4yMDc4NzA0OCA1Ni41MDY3MjkxMyBDMTAuNDUxMzgyMzUgNTguNTc5NTQ2MDkgOS42ODgwNjYyNSA2MC42NDk3NjM3OSA4LjkyNDE3OTA4IDYyLjcxOTg2Mzg5IEM4LjQ0MDY5OTkyIDY0LjAzOTM3NjU3IDcuOTU3NjEyMjcgNjUuMzU5MDMyNzggNy40NzQ5NjAzMyA2Ni42Nzg4NDgyNyBDNy4wMzk1Nzk0NyA2Ny44Njc5Mjc4NiA2LjYwNDE5ODYxIDY5LjA1NzAwNzQ1IDYuMTU1NjI0MzkgNzAuMjgyMTE5NzUgQzUuMTAzOTAxNTkgNzIuOTM3ODUxOCA1LjEwMzkwMTU5IDcyLjkzNzg1MTggNS4yMDkzMzUzMyA3NS4xMjAyNTQ1MiBDMTUuMTA5MzM1MzMgNzUuMTIwMjU0NTIgMjUuMDA5MzM1MzMgNzUuMTIwMjU0NTIgMzUuMjA5MzM1MzMgNzUuMTIwMjU0NTIgQzMzLjQxMTgzNzk3IDY5LjEyODU5NjY3IDMxLjYyMDI3MzkyIDYzLjIzNDQ4Mzc4IDI5LjUxMDExNjU4IDU3LjM2MjQ0MjAyIEMyOS4yNzAyMDQ5MyA1Ni42ODg1MTQxIDI5LjAzMDI5MzI3IDU2LjAxNDU4NjE4IDI4Ljc4MzExMTU3IDU1LjMyMDIzNjIxIEMyOC4wMzE2Nzg1NiA1My4yMTEwNzA1NyAyNy4yNzY4MzI1IDUxLjEwMzE0NjU4IDI2LjUyMTgzNTMzIDQ4Ljk5NTI1NDUyIEMyNi4wMDUzMzA1NCA0Ny41NDc0MTk0MyAyNS40ODkwNTI4MSA0Ni4wOTk1MDMzMyAyNC45NzMwMDcyIDQ0LjY1MTUwNDUyIEMyMy43MjEwNjM0NyA0MS4xNDAxNTA4OCAyMi40NjYwNjAxOSAzNy42Mjk5MDAyNSAyMS4yMDkzMzUzMyAzNC4xMjAyNTQ1MiBDMjAuODc5MzM1MzMgMzQuMTIwMjU0NTIgMjAuNTQ5MzM1MzMgMzQuMTIwMjU0NTIgMjAuMjA5MzM1MzMgMzQuMTIwMjU0NTIgWiBNLTAuNzkwNjY0NjcgOTAuMTIwMjU0NTIgQy0xLjQ1MDY2NDY3IDkyLjQzMDI1NDUyIC0yLjExMDY2NDY3IDk0Ljc0MDI1NDUyIC0yLjc5MDY2NDY3IDk3LjEyMDI1NDUyIEMxMi4zODkzMzUzMyA5Ny4xMjAyNTQ1MiAyNy41NjkzMzUzMyA5Ny4xMjAyNTQ1MiA0My4yMDkzMzUzMyA5Ny4xMjAyNTQ1MiBDNDIuNTQ5MzM1MzMgOTQuODEwMjU0NTIgNDEuODg5MzM1MzMgOTIuNTAwMjU0NTIgNDEuMjA5MzM1MzMgOTAuMTIwMjU0NTIgQzI3LjM0OTMzNTMzIDkwLjEyMDI1NDUyIDEzLjQ4OTMzNTMzIDkwLjEyMDI1NDUyIC0wLjc5MDY2NDY3IDkwLjEyMDI1NDUyIFogIiBmaWxsPSIjOUU5RTlFIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMDcuNzkwNjY0NjcyODUxNTYsNDUuODc5NzQ1NDgzMzk4NDQpIi8+Cjwvc3ZnPgo=",
+ color1: "#FFAB19",
+ color2: "#FF8C00",
+ color3: "#E76F00",
+ blocks: [
+ {
+ opcode: "login",
+ text: Scratch.translate({ id: "oauthExtension.login", default: "Log in with [SERVICE]" }),
+ blockType: Scratch.BlockType.COMMAND,
+ arguments: {
+ SERVICE: { type: Scratch.ArgumentType.STRING, menu: "SERVICE" },
+ },
+ },
+ {
+ opcode: "isLoggedIn",
+ text: Scratch.translate({ id: "oauthExtension.isLoggedIn", default: "Is user logged in with [SERVICE]?" }),
+ blockType: Scratch.BlockType.BOOLEAN,
+ arguments: {
+ SERVICE: { type: Scratch.ArgumentType.STRING, menu: "SERVICE" },
+ },
+ },
+ {
+ opcode: "setClientId",
+ text: Scratch.translate({ id: "oauthExtension.setClientId", default: "Set client ID for [SERVICE] to [CLIENT_ID]" }),
+ blockType: Scratch.BlockType.COMMAND,
+ arguments: {
+ SERVICE: { type: Scratch.ArgumentType.STRING, menu: "SERVICE" },
+ CLIENT_ID: { type: Scratch.ArgumentType.STRING, defaultValue: "" },
+ },
+ },
+ {
+ opcode: "setClientSecret",
+ text: Scratch.translate({ id: "oauthExtension.setClientSecret", default: "Set client secret for [SERVICE] to [CLIENT_SECRET]" }),
+ blockType: Scratch.BlockType.COMMAND,
+ arguments: {
+ SERVICE: { type: Scratch.ArgumentType.STRING, menu: "SERVICE" },
+ CLIENT_SECRET: { type: Scratch.ArgumentType.STRING, defaultValue: "" },
+ },
+ },
+ {
+ opcode: "setRedirectUri",
+ text: Scratch.translate({ id: "oauthExtension.setRedirectUri", default: "Set redirect URI for [SERVICE] to [REDIRECT_URI]" }),
+ blockType: Scratch.BlockType.COMMAND,
+ arguments: {
+ SERVICE: { type: Scratch.ArgumentType.STRING, menu: "SERVICE" },
+ REDIRECT_URI: { type: Scratch.ArgumentType.STRING, defaultValue: "" },
+ },
+ },
+ ],
+ menus: {
+ SERVICE: {
+ items: [
+ { text: "Google", value: "google" },
+ { text: "Microsoft", value: "microsoft" },
+ { text: "Discord", value: "discord" },
+ { text: "Twitter", value: "twitter" },
+ { text: "GitHub", value: "github" },
+ { text: "Facebook", value: "facebook" },
+ { text: "LinkedIn", value: "linkedin" },
+ { text: "Spotify", value: "spotify" },
+ ],
+ },
+ },
+ };
+ }
- setClientId(args) {
- const service = args.SERVICE;
- this.clients[service].clientId = args.CLIENT_ID;
- }
+ setClientId(args) {
+ const service = args.SERVICE;
+ this.clients[service].clientId = args.CLIENT_ID;
+ }
- setClientSecret(args) {
- const service = args.SERVICE;
- this.clients[service].clientSecret = args.CLIENT_SECRET;
- }
+ setClientSecret(args) {
+ const service = args.SERVICE;
+ this.clients[service].clientSecret = args.CLIENT_SECRET;
+ }
- setRedirectUri(args) {
- const service = args.SERVICE;
- this.clients[service].redirectUri = args.REDIRECT_URI;
- }
-
- async login(args) {
- const service = args.SERVICE;
- const client = this.clients[service];
- const authUrl = `${client.authUrl}?response_type=code&client_id=${client.clientId}&redirect_uri=${client.redirectUri}&scope=${encodeURIComponent(client.scope)}`;
+ setRedirectUri(args) {
+ const service = args.SERVICE;
+ this.clients[service].redirectUri = args.REDIRECT_URI;
+ }
- // Open a new tab for the user to authorize the app
- Scratch.openWindow(authUrl, "_blank");
+ login(args) {
+ const service = args.SERVICE;
+ const client = this.clients[service];
+ const authUrl = `${client.authUrl}?response_type=code&client_id=${client.clientId}&redirect_uri=${client.redirectUri}&scope=${encodeURIComponent(client.scope)}`;
- // Listen for message with authorization code (assuming your app handles this securely)
- window.addEventListener(
- "message",
- (event) => {
- if (event.origin !== window.location.origin) return;
+ // Open a new tab for the user to authorize the app
+ Scratch.openWindow(authUrl, "_blank");
- const authorizationCode = event.data.code;
+ // Listen for message with authorization code (assuming your app handles this securely)
+ window.addEventListener("message", async (event) => {
+ if (event.origin !== window.location.origin) return;
- // Ensure there is an await expression
- const tokenResponse = await Scratch.fetch(client.tokenUrl, {
- method: "POST",
- headers: {
- "Content-Type": "application/x-www-form-urlencoded",
- },
- body: `code=${authorizationCode}&client_id=${client.clientId}&client_secret=${client.clientSecret}&redirect_uri=${client.redirectUri}&grant_type=authorization_code`,
- });
+ const authorizationCode = event.data.code;
- const tokens = await tokenResponse.json();
- this.tokens[service] = tokens;
+ // Ensure there is an await expression
+ const tokenResponse = await Scratch.fetch(client.tokenUrl, {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/x-www-form-urlencoded",
+ },
+ body: `code=${authorizationCode}&client_id=${client.clientId}&client_secret=${client.clientSecret}&redirect_uri=${client.redirectUri}&grant_type=authorization_code`,
+ });
- // Await for a token response
- await tokenResponse;
- },
- { once: true }
- );
- }
+ const tokens = await tokenResponse.json();
+ this.tokens[service] = tokens;
+ }, { once: true });
+ }
- isLoggedIn(args) {
- const service = args.SERVICE;
- return !!this.tokens[service];
+ isLoggedIn(args) {
+ const service = args.SERVICE;
+ return !!this.tokens[service];
+ }
}
- }
- Scratch.extensions.register(new OAuthExtension());
+ Scratch.extensions.register(new OAuthExtension());
})(Scratch);
From 8ca471135caf3094e5a5472c9c54c757541981c9 Mon Sep 17 00:00:00 2001
From: "DangoCat[bot]"
Date: Sat, 15 Feb 2025 12:53:50 +0000
Subject: [PATCH 20/20] [Automated] Format code
---
extensions/Thebloxers998/oauth.js | 395 ++++++++++++++++--------------
1 file changed, 215 insertions(+), 180 deletions(-)
diff --git a/extensions/Thebloxers998/oauth.js b/extensions/Thebloxers998/oauth.js
index 69b0db6d59..3a751a72ed 100644
--- a/extensions/Thebloxers998/oauth.js
+++ b/extensions/Thebloxers998/oauth.js
@@ -1,201 +1,236 @@
// Name: OAuth Extension
// ID: oauthExtension
-// Description: Provides OAuth login functionality for various services (Google, Microsoft, Discord, Twitter, GitHub, Facebook, LinkedIn, Spotify).
+// Description: Provides OAuth login functionality for various services (Google, Microsoft, Discord, Twitter, GitHub, Facebook, LinkedIn, Spotify).
// By: Thebloxers998
// License: MPL-2.0
(function (Scratch) {
- "use strict";
+ "use strict";
- class OAuthExtension {
- constructor() {
- this.tokens = {};
- this.clients = {
- google: {
- clientId: "",
- clientSecret: "",
- redirectUri: "",
- authUrl: "https://accounts.google.com/o/oauth2/auth",
- tokenUrl: "https://oauth2.googleapis.com/token",
- scope: "https://www.googleapis.com/auth/userinfo.profile",
- },
- microsoft: {
- clientId: "",
- clientSecret: "",
- redirectUri: "",
- authUrl: "https://login.microsoftonline.com/common/oauth2/v2.0/authorize",
- tokenUrl: "https://login.microsoftonline.com/common/oauth2/v2.0/token",
- scope: "https://graph.microsoft.com/User.Read",
- },
- discord: {
- clientId: "",
- clientSecret: "",
- redirectUri: "",
- authUrl: "https://discord.com/api/oauth2/authorize",
- tokenUrl: "https://discord.com/api/oauth2/token",
- scope: "identify",
- },
- twitter: {
- clientId: "",
- clientSecret: "",
- redirectUri: "",
- authUrl: "https://api.twitter.com/oauth/authorize",
- tokenUrl: "https://api.twitter.com/oauth/access_token",
- },
- github: {
- clientId: "",
- clientSecret: "",
- redirectUri: "",
- authUrl: "https://github.com/login/oauth/authorize",
- tokenUrl: "https://github.com/login/oauth/access_token",
- scope: "user",
- },
- facebook: {
- clientId: "",
- clientSecret: "",
- redirectUri: "",
- authUrl: "https://www.facebook.com/v10.0/dialog/oauth",
- tokenUrl: "https://graph.facebook.com/v10.0/oauth/access_token",
- scope: "public_profile",
- },
- linkedin: {
- clientId: "",
- clientSecret: "",
- redirectUri: "",
- authUrl: "https://www.linkedin.com/oauth/v2/authorization",
- tokenUrl: "https://www.linkedin.com/oauth/v2/accessToken",
- scope: "r_liteprofile",
- },
- spotify: {
- clientId: "",
- clientSecret: "",
- redirectUri: "",
- authUrl: "https://accounts.spotify.com/authorize",
- tokenUrl: "https://accounts.spotify.com/api/token",
- scope: "user-read-private",
- },
- };
- }
+ class OAuthExtension {
+ constructor() {
+ this.tokens = {};
+ this.clients = {
+ google: {
+ clientId: "",
+ clientSecret: "",
+ redirectUri: "",
+ authUrl: "https://accounts.google.com/o/oauth2/auth",
+ tokenUrl: "https://oauth2.googleapis.com/token",
+ scope: "https://www.googleapis.com/auth/userinfo.profile",
+ },
+ microsoft: {
+ clientId: "",
+ clientSecret: "",
+ redirectUri: "",
+ authUrl:
+ "https://login.microsoftonline.com/common/oauth2/v2.0/authorize",
+ tokenUrl:
+ "https://login.microsoftonline.com/common/oauth2/v2.0/token",
+ scope: "https://graph.microsoft.com/User.Read",
+ },
+ discord: {
+ clientId: "",
+ clientSecret: "",
+ redirectUri: "",
+ authUrl: "https://discord.com/api/oauth2/authorize",
+ tokenUrl: "https://discord.com/api/oauth2/token",
+ scope: "identify",
+ },
+ twitter: {
+ clientId: "",
+ clientSecret: "",
+ redirectUri: "",
+ authUrl: "https://api.twitter.com/oauth/authorize",
+ tokenUrl: "https://api.twitter.com/oauth/access_token",
+ },
+ github: {
+ clientId: "",
+ clientSecret: "",
+ redirectUri: "",
+ authUrl: "https://github.com/login/oauth/authorize",
+ tokenUrl: "https://github.com/login/oauth/access_token",
+ scope: "user",
+ },
+ facebook: {
+ clientId: "",
+ clientSecret: "",
+ redirectUri: "",
+ authUrl: "https://www.facebook.com/v10.0/dialog/oauth",
+ tokenUrl: "https://graph.facebook.com/v10.0/oauth/access_token",
+ scope: "public_profile",
+ },
+ linkedin: {
+ clientId: "",
+ clientSecret: "",
+ redirectUri: "",
+ authUrl: "https://www.linkedin.com/oauth/v2/authorization",
+ tokenUrl: "https://www.linkedin.com/oauth/v2/accessToken",
+ scope: "r_liteprofile",
+ },
+ spotify: {
+ clientId: "",
+ clientSecret: "",
+ redirectUri: "",
+ authUrl: "https://accounts.spotify.com/authorize",
+ tokenUrl: "https://accounts.spotify.com/api/token",
+ scope: "user-read-private",
+ },
+ };
+ }
- getInfo() {
- return {
- id: "oauthExtension",
- name: Scratch.translate({ id: "oauthExtension.name", default: "OAuth Extension" }),
- blockIconURI: "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI1NiIgaGVpZ2h0PSIyNTYiPgo8cGF0aCBkPSJNMCAwIEMyMi4wMzg1MjY1MiAxOC44MTE1OTg1NiAzNi40NjU3OTMzNCA0MS4wNjM3MzM3NyA0NC4zNTE1NjI1IDY4LjkxMDE1NjI1IEM0NC42OTMxNjQwNiA3MC4wODgzNTkzNyA0NS4wMzQ3NjU2MyA3MS4yNjY1NjI1IDQ1LjM4NjcxODc1IDcyLjQ4MDQ2ODc1IEM1MS41OTA5Mjc1NSA5OC43NDAxNDMyMiA0OC4xMTkzNTU5NyAxMjguNDA3NTUzODkgMzcuMzUxNTYyNSAxNTIuOTEwMTU2MjUgQzM2LjkyNjY1NTI3IDE1My44OTE0NTUwOCAzNi45MjY2NTUyNyAxNTMuODkxNDU1MDggMzYuNDkzMTY0MDYgMTU0Ljg5MjU3ODEyIEMyNi41NTAxNTk0MyAxNzcuNDE1NDA2MzEgOS4zNjgzODI4MiAxOTcuMDgzNzE0NDMgLTExLjY0ODQzNzUgMjA5LjkxMDE1NjI1IEMtMTIuNzIwOTM3NSAyMTAuNTkzMzU5MzggLTEzLjc5MzQzNzUgMjExLjI3NjU2MjUgLTE0Ljg5ODQzNzUgMjExLjk4MDQ2ODc1IEMtNDIuNzU5MjI3OTQgMjI4Ljk0MjAxNDc4IC03OC4yNTA2MTE4OSAyMzMuOTI2NDg1NDUgLTExMC4wMzAyNzM0NCAyMjYuNzQ3MDcwMzEgQy0xMTcuODE5NDE3MjkgMjI0Ljc3NzM2MzU3IC0xMjUuMjk4MDI2MiAyMjIuMTQwMzMxOTUgLTEzMi42NDg0Mzc1IDIxOC45MTAxNTYyNSBDLTEzMy4zMDI2MzY3MiAyMTguNjI2ODg0NzcgLTEzMy45NTY4MzU5NCAyMTguMzQzNjEzMjggLTEzNC42MzA4NTkzOCAyMTguMDUxNzU3ODEgQy0xNjQuNzI1OTMyMzQgMjA0Ljc2NTg4NDE0IC0xODguNDMyNjIzMzkgMTc5LjE4ODU5MzM5IC0yMDAuNTE5NTMxMjUgMTQ4LjcxMzg2NzE5IEMtMjAyLjQ3ODkwMDc3IDE0My41MTUyMTc0MiAtMjA0LjEzNTA4MjUgMTM4LjI1NDE1Mjc0IC0yMDUuNjQ4NDM3NSAxMzIuOTEwMTU2MjUgQy0yMDUuOTkwMDM5MDYgMTMxLjczMTk1MzEyIC0yMDYuMzMxNjQwNjMgMTMwLjU1Mzc1IC0yMDYuNjgzNTkzNzUgMTI5LjMzOTg0Mzc1IEMtMjE0LjIxNzQzOTk4IDk3LjQ1MjQwMTU3IC0yMDcuODM1NTc0NTYgNjEuNDM0NjUxNjEgLTE5MS4wMDc4MTI1IDMzLjYwNTQ2ODc1IEMtMTcyLjcxOTMxMzkzIDQuNTE1NjA4MTggLTE0NS40NzI3MDQ5NSAtMTQuNzk0NDA5MjYgLTExMi42NDg0Mzc1IC0yNC4wODk4NDM3NSBDLTExMS40NzAyMzQzOCAtMjQuNDMxNDQ1MzEgLTExMC4yOTIwMzEyNSAtMjQuNzczMDQ2ODcgLTEwOS4wNzgxMjUgLTI1LjEyNSBDLTcxLjkxMjE2MjA0IC0zMy45MDU5NjkyNyAtMjkuNDM4MzUxODQgLTI0LjE0NjUyMjQyIDAgMCBaIE0tMTU2LjY0ODQzNzUgMzguOTEwMTU2MjUgQy0xNzIuNjc2OTQzNTIgNTguMDg4NzczMjggLTE4MC4zOTY0OTAzOCA4NC41ODg4MzUyMyAtMTc4LjM3MTA5Mzc1IDEwOS4yOTI5Njg3NSBDLTE3NS40NzE3NjMxNSAxMzUuNzQ1OTA4ODUgLTE2Mi45NTU1MTQxMyAxNTkuNTg0NTMzMDggLTE0Mi42NDg0Mzc1IDE3Ni45MTAxNTYyNSBDLTEyNi41NDMxNjcwNSAxODkuNjk5NjM1NzIgLTEwNi4zMjExMTA2MiAxOTguMDkxNzg4ODEgLTg1LjY0ODQzNzUgMTk4LjkxMDE1NjI1IEMtODQuODg5MTc5NjkgMTk4Ljk1MDExNzE5IC04NC4xMjk5MjE4NyAxOTguOTkwMDc4MTIgLTgzLjM0NzY1NjI1IDE5OS4wMzEyNSBDLTU2LjU4MDI3NzA5IDE5OS43NzYwMDUyMyAtMzEuNDM2MTQxNzYgMTg4LjgxNjI3MjU4IC0xMi4wNTQ0NDMzNiAxNzAuNzY1NjI1IEM1LjI3MjM5MDEyIDE1NC4wMTA3MzQ1MiAxNi4zOTQyODMxMyAxMzAuMDkxODY1NjUgMTcuMzUxNTYyNSAxMDUuOTEwMTU2MjUgQzE3LjM5MTUyMzQ0IDEwNS4xNTA4OTg0NCAxNy40MzE0ODQzNyAxMDQuMzkxNjQwNjIgMTcuNDcyNjU2MjUgMTAzLjYwOTM3NSBDMTguMjE3NDExNDggNzYuODQxOTk1ODQgNy4yNTc2Nzg4MyA1MS42OTc4NjA1MSAtMTAuNzkyOTY4NzUgMzIuMzE2MTYyMTEgQy0yNy41NDc4NTkyMyAxNC45ODkzMjg2MyAtNTEuNDY2NzI4MSAzLjg2NzQzNTYyIC03NS42NDg0Mzc1IDIuOTEwMTU2MjUgQy03Ni43ODczMjQyMiAyLjg1MDIxNDg0IC03Ni43ODczMjQyMiAyLjg1MDIxNDg0IC03Ny45NDkyMTg3NSAyLjc4OTA2MjUgQy0xMDguODU5OTYwMDYgMS45MjkwMjU1MSAtMTM2LjI0OTk3Njk4IDE2LjQzMzI0OTk3IC0xNTYuNjQ4NDM3NSAzOC45MTAxNTYyNSBaICIgZmlsbD0iIzlFOUU5RSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjA4LjY0ODQzNzUsMjcuMDg5ODQzNzUpIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuNzc5NDM0NjYgMC4wMDIyMjA2MSAxLjU1ODg2OTMyIDAuMDA0NDQxMjIgMi4zNjE5MjMyMiAwLjAwNjcyOTEzIEMzLjI0Mjc2MDc3IDAuMDA2ODA0NjYgNC4xMjM1OTgzMyAwLjAwNjg4MDE5IDUuMDMxMTI3OTMgMC4wMDY5NTgwMSBDNS45ODg0MTI5MyAwLjAxMjExOTI5IDYuOTQ1Njk3OTQgMC4wMTcyODA1OCA3LjkzMTk5MTU4IDAuMDIyNTk4MjcgQzkuMzk0ODA4MTIgMC4wMjQ3MjA2OSA5LjM5NDgwODEyIDAuMDI0NzIwNjkgMTAuODg3MTc2NTEgMC4wMjY4ODU5OSBDMTQuMDE1NDI2NzUgMC4wMzI1MDMxOSAxNy4xNDM2MDY1NiAwLjA0NTA1ODU5IDIwLjI3MTgzNTMzIDAuMDU3NzU0NTIgQzIyLjM4NzA2ODY3IDAuMDYyNzY3MyAyNC41MDIzMDMxMyAwLjA2NzMzMDU5IDI2LjYxNzUzODQ1IDAuMDcxNDI2MzkgQzMxLjgxNDgyODI5IDAuMDgyNDc4MiAzNy4wMTIwNzY3OCAwLjA5OTIzMzA1IDQyLjIwOTMzNTMzIDAuMTIwMjU0NTIgQzQ0Ljk5MTE0MDUxIDYuMjUxMzU5MTEgNDcuNTc5MTE3NDUgMTIuNDM1MDc1MzMgNTAuMDM3NDYwMzMgMTguNzAyMjg1NzcgQzUwLjM5MDE1OTkxIDE5LjU5NjU0NzcgNTAuNzQyODU5NSAyMC40OTA4MDk2MyA1MS4xMDYyNDY5NSAyMS40MTIxNzA0MSBDNTIuMjI1NzczMjEgMjQuMjUxNjQ4MTQgNTMuMzQyNjgwOCAyNy4wOTIxNDYzOCA1NC40NTkzMzUzMyAyOS45MzI3NTQ1MiBDNTUuNTU3NzAyMTUgMzIuNzIyNDMxMiA1Ni42NTY2Mzk1MiAzNS41MTE4ODE3NCA1Ny43NTYwODgyNiAzOC4zMDExMzIyIEM1OC40ODMyNDk1MSA0MC4xNDY2MDUxNSA1OS4yMDk1NzI4OCA0MS45OTI0MDg0OCA1OS45MzUwNDMzMyA0My44Mzg1NDY3NSBDNjEuNzc4MzM5NjQgNDguNTIyNzUzMjQgNjMuNjQxMjU5NzcgNTMuMTk3NzI3NjUgNjUuNTM5NDEzNDUgNTcuODYwMDAwNjEgQzY1LjkxMTc3MTI0IDU4Ljc3Nzg2ODUgNjYuMjg0MTI5MDMgNTkuNjk1NzM2MzkgNjYuNjY3NzcwMzkgNjAuNjQxNDE4NDYgQzY3LjM3NzQxMTc2IDYyLjM4NzQ1NzM3IDY4LjA5MTI4MzIxIDY0LjEzMTc4NDgzIDY4LjgwOTk4MjMgNjUuODc0MTE0OTkgQzY5LjEyNTc4MjQ3IDY2LjY1MjMyMTAxIDY5LjQ0MTU4MjY0IDY3LjQzMDUyNzA0IDY5Ljc2Njk1MjUxIDY4LjIzMjMxNTA2IEM3MC4wNDY0MTcyNCA2OC45MTMyNzc0NCA3MC4zMjU4ODE5NiA2OS41OTQyMzk4MSA3MC42MTM4MTUzMSA3MC4yOTU4Mzc0IEM3MS4yMDkzMzUzMyA3Mi4xMjAyNTQ1MiA3MS4yMDkzMzUzMyA3Mi4xMjAyNTQ1MiA3MS4yMDkzMzUzMyA3NS4xMjAyNTQ1MiBDNzkuNDU5MzM1MzMgNzUuMTIwMjU0NTIgODcuNzA5MzM1MzMgNzUuMTIwMjU0NTIgOTYuMjA5MzM1MzMgNzUuMTIwMjU0NTIgQzk2LjIwOTMzNTMzIDgwLjA3MDI1NDUyIDk2LjIwOTMzNTMzIDg1LjAyMDI1NDUyIDk2LjIwOTMzNTMzIDkwLjEyMDI1NDUyIEM5MC4yNjkzMzUzMyA5MC4xMjAyNTQ1MiA4NC4zMjkzMzUzMyA5MC4xMjAyNTQ1MiA3OC4yMDkzMzUzMyA5MC4xMjAyNTQ1MiBDNzkuMTk5MzM1MzMgOTMuNTg1MjU0NTIgNzkuMTk5MzM1MzMgOTMuNTg1MjU0NTIgODAuMjA5MzM1MzMgOTcuMTIwMjU0NTIgQzg1LjQ4OTMzNTMzIDk3LjEyMDI1NDUyIDkwLjc2OTMzNTMzIDk3LjEyMDI1NDUyIDk2LjIwOTMzNTMzIDk3LjEyMDI1NDUyIEM5Ni4yMDkzMzUzMyAxMDIuMDcwMjU0NTIgOTYuMjA5MzM1MzMgMTA3LjAyMDI1NDUyIDk2LjIwOTMzNTMzIDExMi4xMjAyNTQ1MiBDOTEuNzU0MzM1MzMgMTEyLjYxNTI1NDUyIDkxLjc1NDMzNTMzIDExMi42MTUyNTQ1MiA4Ny4yMDkzMzUzMyAxMTMuMTIwMjU0NTIgQzg3LjcxNDY0NzgzIDExNC4zODQ4MjQ4MyA4OC4yMTk5NjAzMyAxMTUuNjQ5Mzk1MTQgODguNzQwNTg1MzMgMTE2Ljk1MjI4NTc3IEM4OS4zOTcxMDI1MiAxMTguNjEyMzM2MzcgOTAuMDUzMzM3ODkgMTIwLjI3MjQ5ODQ1IDkwLjcwOTMzNTMzIDEyMS45MzI3NTQ1MiBDOTEuMjEwMTM2MTEgMTIzLjE4MjgyMjg4IDkxLjIxMDEzNjExIDEyMy4xODI4MjI4OCA5MS43MjEwNTQwOCAxMjQuNDU4MTQ1MTQgQzkyLjE5NDc4NDU1IDEyNS42NjE4MDcyNSA5Mi4xOTQ3ODQ1NSAxMjUuNjYxODA3MjUgOTIuNjc4MDg1MzMgMTI2Ljg4OTc4NTc3IEM5Mi45NzEzNDcwNSAxMjcuNjI4MTc2ODggOTMuMjY0NjA4NzYgMTI4LjM2NjU2Nzk5IDkzLjU2Njc1NzIgMTI5LjEyNzMzNDU5IEM5NC4yMDkzMzUzMyAxMzEuMTIwMjU0NTIgOTQuMjA5MzM1MzMgMTMxLjEyMDI1NDUyIDk0LjIwOTMzNTMzIDEzNC4xMjAyNTQ1MiBDODEuOTk5MzM1MzMgMTM0LjEyMDI1NDUyIDY5Ljc4OTMzNTMzIDEzNC4xMjAyNTQ1MiA1Ny4yMDkzMzUzMyAxMzQuMTIwMjU0NTIgQzUyLjIwOTMzNTMzIDEyMi4xMjAyNTQ1MiA1Mi4yMDkzMzUzMyAxMjIuMTIwMjU0NTIgNDkuMjA5MzM1MzMgMTEyLjEyMDI1NDUyIEMzMC4wNjkzMzUzMyAxMTIuMTIwMjU0NTIgMTAuOTI5MzM1MzMgMTEyLjEyMDI1NDUyIC04Ljc5MDY2NDY3IDExMi4xMjAyNTQ1MiBDLTkuNzgwNjY0NjcgMTE1LjQyMDI1NDUyIC0xMC43NzA2NjQ2NyAxMTguNzIwMjU0NTIgLTExLjc5MDY2NDY3IDEyMi4xMjAyNTQ1MiBDLTEzLjQ0MDY2NDY3IDEyNi4wODAyNTQ1MiAtMTUuMDkwNjY0NjcgMTMwLjA0MDI1NDUyIC0xNi43OTA2NjQ2NyAxMzQuMTIwMjU0NTIgQy0yOS4wMDA2NjQ2NyAxMzQuMTIwMjU0NTIgLTQxLjIxMDY2NDY3IDEzNC4xMjAyNTQ1MiAtNTMuNzkwNjY0NjcgMTM0LjEyMDI1NDUyIEMtNTMuMTI2NDQxNjkgMTMwLjc5OTEzOTYgLTUyLjU1MzU4NjExIDEyOC4yMDE5NDI1MyAtNTEuMzgwNTA4NDIgMTI1LjEzMTk3MzI3IEMtNTAuOTc5Mjg3NzIgMTI0LjA3MzMzMDY5IC01MC45NzkyODc3MiAxMjQuMDczMzMwNjkgLTUwLjU2OTk2MTU1IDEyMi45OTMzMDEzOSBDLTUwLjI5MjE2ODU4IDEyMi4yNzIwNzA5MiAtNTAuMDE0Mzc1NjEgMTIxLjU1MDg0MDQ1IC00OS43MjgxNjQ2NyAxMjAuODA3NzU0NTIgQy00OS4zMDU2NzQ0NCAxMTkuNjk2OTA0OTEgLTQ5LjMwNTY3NDQ0IDExOS42OTY5MDQ5MSAtNDguODc0NjQ5MDUgMTE4LjU2MzYxMzg5IEMtNDguMTgzNDc4OTIgMTE2Ljc0NzgyNzk2IC00Ny40ODc1NDc3OSAxMTQuOTMzODU1NTIgLTQ2Ljc5MDY2NDY3IDExMy4xMjAyNTQ1MiBDLTQ5Ljc2MDY2NDY3IDExMi43OTAyNTQ1MiAtNTIuNzMwNjY0NjcgMTEyLjQ2MDI1NDUyIC01NS43OTA2NjQ2NyAxMTIuMTIwMjU0NTIgQy01NS43OTA2NjQ2NyAxMDcuMTcwMjU0NTIgLTU1Ljc5MDY2NDY3IDEwMi4yMjAyNTQ1MiAtNTUuNzkwNjY0NjcgOTcuMTIwMjU0NTIgQy01MC41MTA2NjQ2NyA5Ny4xMjAyNTQ1MiAtNDUuMjMwNjY0NjcgOTcuMTIwMjU0NTIgLTM5Ljc5MDY2NDY3IDk3LjEyMDI1NDUyIEMtMzkuMTMwNjY0NjcgOTQuODEwMjU0NTIgLTM4LjQ3MDY2NDY3IDkyLjUwMDI1NDUyIC0zNy43OTA2NjQ2NyA5MC4xMjAyNTQ1MiBDLTQzLjczMDY2NDY3IDkwLjEyMDI1NDUyIC00OS42NzA2NjQ2NyA5MC4xMjAyNTQ1MiAtNTUuNzkwNjY0NjcgOTAuMTIwMjU0NTIgQy01NS43OTA2NjQ2NyA4NS4xNzAyNTQ1MiAtNTUuNzkwNjY0NjcgODAuMjIwMjU0NTIgLTU1Ljc5MDY2NDY3IDc1LjEyMDI1NDUyIEMtNDcuNTQwNjY0NjcgNzUuMTIwMjU0NTIgLTM5LjI5MDY2NDY3IDc1LjEyMDI1NDUyIC0zMC43OTA2NjQ2NyA3NS4xMjAyNTQ1MiBDLTMwLjQ2MDY2NDY3IDczLjQ3MDI1NDUyIC0zMC4xMzA2NjQ2NyA3MS44MjAyNTQ1MiAtMjkuNzkwNjY0NjcgNzAuMTIwMjU0NTIgQy0yOS4zNTY1NzU4MyA2OC44MTI0MDQ1NiAtMjguODg3MjM5MjEgNjcuNTE1NzA5OTggLTI4LjM4Mjk0OTgzIDY2LjIzMzI5MTYzIEMtMjcuOTU1MjcwNjEgNjUuMTM2NzU1MTQgLTI3Ljk1NTI3MDYxIDY1LjEzNjc1NTE0IC0yNy41MTg5NTE0MiA2NC4wMTgwNjY0MSBDLTI3LjIwOTAwNzQyIDYzLjIzNTgxMTkyIC0yNi44OTkwNjM0MiA2Mi40NTM1NTc0MyAtMjYuNTc5NzI3MTcgNjEuNjQ3NTk4MjcgQy0yNi4wOTMyMzk1MiA2MC40MDUyNzE4NCAtMjYuMDkzMjM5NTIgNjAuNDA1MjcxODQgLTI1LjU5NjkyMzgzIDU5LjEzNzg0NzkgQy0yNC41NDA0OTM5NyA1Ni40NDI4OTc0OSAtMjMuNDc4MjE0MDQgNTMuNzUwMjk3MzYgLTIyLjQxNTY2NDY3IDUxLjA1Nzc1NDUyIEMtMjEuNjg4NjgwNTUgNDkuMjA3NjI3NzYgLTIwLjk2MjAzODM5IDQ3LjM1NzM2NjU5IC0yMC4yMzU3MzMwMyA0NS41MDY5NzMyNyBDLTE4Ljc3OTY4MzY3IDQxLjc5ODk3MzEgLTE3LjMyMTM4MjQ0IDM4LjA5MTg3MDIyIC0xNS44NjE0NjU0NSAzNC4zODUzOTEyNCBDLTE0LjAwMzg3MjU1IDI5LjY2NjY4MzE1IC0xMi4xNTg0NzMxNyAyNC45NDMzMjA2NSAtMTAuMzE4MDA4NDIgMjAuMjE3OTEwNzcgQy05LjgwNjIzMTMyIDE4LjkwNjEwMjQ1IC05LjI5NDM1Mzc3IDE3LjU5NDMzMzMyIC04Ljc4MjM2Mzg5IDE2LjI4MjYwODAzIEMtNy44NDYzMDQ5OSAxMy44ODM5MzcxMSAtNi45MTE2ODAwOCAxMS40ODQ3MDU5NyAtNS45Nzg2NTI5NSA5LjA4NDg1NDEzIEMtNS41NjcyODA4OCA4LjAzNDM0ODc1IC01LjE1NTkwODgxIDYuOTgzODQzMzggLTQuNzMyMDcwOTIgNS45MDE1MDQ1MiBDLTQuMzc4MzAzODMgNC45OTQ2NDkwNSAtNC4wMjQ1MzY3NCA0LjA4Nzc5MzU4IC0zLjY2MDA0OTQ0IDMuMTUzNDU3NjQgQy0yLjM3OTk5Mzk4IDAuMTU5ODMxNzMgLTIuMzc5OTkzOTggMC4xNTk4MzE3MyAwIDAgWiBNMjAuMjA5MzM1MzMgMzQuMTIwMjU0NTIgQzE2LjgxMTU1MDQyIDQxLjQ0MTY3MiAxMy45NzAzMDk5MyA0OC45Mjk2MjIxMiAxMS4yMDc4NzA0OCA1Ni41MDY3MjkxMyBDMTAuNDUxMzgyMzUgNTguNTc5NTQ2MDkgOS42ODgwNjYyNSA2MC42NDk3NjM3OSA4LjkyNDE3OTA4IDYyLjcxOTg2Mzg5IEM4LjQ0MDY5OTkyIDY0LjAzOTM3NjU3IDcuOTU3NjEyMjcgNjUuMzU5MDMyNzggNy40NzQ5NjAzMyA2Ni42Nzg4NDgyNyBDNy4wMzk1Nzk0NyA2Ny44Njc5Mjc4NiA2LjYwNDE5ODYxIDY5LjA1NzAwNzQ1IDYuMTU1NjI0MzkgNzAuMjgyMTE5NzUgQzUuMTAzOTAxNTkgNzIuOTM3ODUxOCA1LjEwMzkwMTU5IDcyLjkzNzg1MTggNS4yMDkzMzUzMyA3NS4xMjAyNTQ1MiBDMTUuMTA5MzM1MzMgNzUuMTIwMjU0NTIgMjUuMDA5MzM1MzMgNzUuMTIwMjU0NTIgMzUuMjA5MzM1MzMgNzUuMTIwMjU0NTIgQzMzLjQxMTgzNzk3IDY5LjEyODU5NjY3IDMxLjYyMDI3MzkyIDYzLjIzNDQ4Mzc4IDI5LjUxMDExNjU4IDU3LjM2MjQ0MjAyIEMyOS4yNzAyMDQ5MyA1Ni42ODg1MTQxIDI5LjAzMDI5MzI3IDU2LjAxNDU4NjE4IDI4Ljc4MzExMTU3IDU1LjMyMDIzNjIxIEMyOC4wMzE2Nzg1NiA1My4yMTEwNzA1NyAyNy4yNzY4MzI1IDUxLjEwMzE0NjU4IDI2LjUyMTgzNTMzIDQ4Ljk5NTI1NDUyIEMyNi4wMDUzMzA1NCA0Ny41NDc0MTk0MyAyNS40ODkwNTI4MSA0Ni4wOTk1MDMzMyAyNC45NzMwMDcyIDQ0LjY1MTUwNDUyIEMyMy43MjEwNjM0NyA0MS4xNDAxNTA4OCAyMi40NjYwNjAxOSAzNy42Mjk5MDAyNSAyMS4yMDkzMzUzMyAzNC4xMjAyNTQ1MiBDMjAuODc5MzM1MzMgMzQuMTIwMjU0NTIgMjAuNTQ5MzM1MzMgMzQuMTIwMjU0NTIgMjAuMjA5MzM1MzMgMzQuMTIwMjU0NTIgWiBNLTAuNzkwNjY0NjcgOTAuMTIwMjU0NTIgQy0xLjQ1MDY2NDY3IDkyLjQzMDI1NDUyIC0yLjExMDY2NDY3IDk0Ljc0MDI1NDUyIC0yLjc5MDY2NDY3IDk3LjEyMDI1NDUyIEMxMi4zODkzMzUzMyA5Ny4xMjAyNTQ1MiAyNy41NjkzMzUzMyA5Ny4xMjAyNTQ1MiA0My4yMDkzMzUzMyA5Ny4xMjAyNTQ1MiBDNDIuNTQ5MzM1MzMgOTQuODEwMjU0NTIgNDEuODg5MzM1MzMgOTIuNTAwMjU0NTIgNDEuMjA5MzM1MzMgOTAuMTIwMjU0NTIgQzI3LjM0OTMzNTMzIDkwLjEyMDI1NDUyIDEzLjQ4OTMzNTMzIDkwLjEyMDI1NDUyIC0wLjc5MDY2NDY3IDkwLjEyMDI1NDUyIFogIiBmaWxsPSIjOUU5RTlFIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMDcuNzkwNjY0NjcyODUxNTYsNDUuODc5NzQ1NDgzMzk4NDQpIi8+Cjwvc3ZnPgo=",
- menuIconURI: "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI1NiIgaGVpZ2h0PSIyNTYiPgo8cGF0aCBkPSJNMCAwIEMyMi4wMzg1MjY1MiAxOC44MTE1OTg1NiAzNi40NjU3OTMzNCA0MS4wNjM3MzM3NyA0NC4zNTE1NjI1IDY4LjkxMDE1NjI1IEM0NC42OTMxNjQwNiA3MC4wODgzNTkzNyA0NS4wMzQ3NjU2MyA3MS4yNjY1NjI1IDQ1LjM4NjcxODc1IDcyLjQ4MDQ2ODc1IEM1MS41OTA5Mjc1NSA5OC43NDAxNDMyMiA0OC4xMTkzNTU5NyAxMjguNDA3NTUzODkgMzcuMzUxNTYyNSAxNTIuOTEwMTU2MjUgQzM2LjkyNjY1NTI3IDE1My44OTE0NTUwOCAzNi45MjY2NTUyNyAxNTMuODkxNDU1MDggMzYuNDkzMTY0MDYgMTU0Ljg5MjU3ODEyIEMyNi41NTAxNTk0MyAxNzcuNDE1NDA2MzEgOS4zNjgzODI4MiAxOTcuMDgzNzE0NDMgLTExLjY0ODQzNzUgMjA5LjkxMDE1NjI1IEMtMTIuNzIwOTM3NSAyMTAuNTkzMzU5MzggLTEzLjc5MzQzNzUgMjExLjI3NjU2MjUgLTE0Ljg5ODQzNzUgMjExLjk4MDQ2ODc1IEMtNDIuNzU5MjI3OTQgMjI4Ljk0MjAxNDc4IC03OC4yNTA2MTE4OSAyMzMuOTI2NDg1NDUgLTExMC4wMzAyNzM0NCAyMjYuNzQ3MDcwMzEgQy0xMTcuODE5NDE3MjkgMjI0Ljc3NzM2MzU3IC0xMjUuMjk4MDI2MiAyMjIuMTQwMzMxOTUgLTEzMi42NDg0Mzc1IDIxOC45MTAxNTYyNSBDLTEzMy4zMDI2MzY3MiAyMTguNjI2ODg0NzcgLTEzMy45NTY4MzU5NCAyMTguMzQzNjEzMjggLTEzNC42MzA4NTkzOCAyMTguMDUxNzU3ODEgQy0xNjQuNzI1OTMyMzQgMjA0Ljc2NTg4NDE0IC0xODguNDMyNjIzMzkgMTc5LjE4ODU5MzM5IC0yMDAuNTE5NTMxMjUgMTQ4LjcxMzg2NzE5IEMtMjAyLjQ3ODkwMDc3IDE0My41MTUyMTc0MiAtMjA0LjEzNTA4MjUgMTM4LjI1NDE1Mjc0IC0yMDUuNjQ4NDM3NSAxMzIuOTEwMTU2MjUgQy0yMDUuOTkwMDM5MDYgMTMxLjczMTk1MzEyIC0yMDYuMzMxNjQwNjMgMTMwLjU1Mzc1IC0yMDYuNjgzNTkzNzUgMTI5LjMzOTg0Mzc1IEMtMjE0LjIxNzQzOTk4IDk3LjQ1MjQwMTU3IC0yMDcuODM1NTc0NTYgNjEuNDM0NjUxNjEgLTE5MS4wMDc4MTI1IDMzLjYwNTQ2ODc1IEMtMTcyLjcxOTMxMzkzIDQuNTE1NjA4MTggLTE0NS40NzI3MDQ5NSAtMTQuNzk0NDA5MjYgLTExMi42NDg0Mzc1IC0yNC4wODk4NDM3NSBDLTExMS40NzAyMzQzOCAtMjQuNDMxNDQ1MzEgLTExMC4yOTIwMzEyNSAtMjQuNzczMDQ2ODcgLTEwOS4wNzgxMjUgLTI1LjEyNSBDLTcxLjkxMjE2MjA0IC0zMy45MDU5NjkyNyAtMjkuNDM4MzUxODQgLTI0LjE0NjUyMjQyIDAgMCBaIE0tMTU2LjY0ODQzNzUgMzguOTEwMTU2MjUgQy0xNzIuNjc2OTQzNTIgNTguMDg4NzczMjggLTE4MC4zOTY0OTAzOCA4NC41ODg4MzUyMyAtMTc4LjM3MTA5Mzc1IDEwOS4yOTI5Njg3NSBDLTE3NS40NzE3NjMxNSAxMzUuNzQ1OTA4ODUgLTE2Mi45NTU1MTQxMyAxNTkuNTg0NTMzMDggLTE0Mi42NDg0Mzc1IDE3Ni45MTAxNTYyNSBDLTEyNi41NDMxNjcwNSAxODkuNjk5NjM1NzIgLTEwNi4zMjExMTA2MiAxOTguMDkxNzg4ODEgLTg1LjY0ODQzNzUgMTk4LjkxMDE1NjI1IEMtODQuODg5MTc5NjkgMTk4Ljk1MDExNzE5IC04NC4xMjk5MjE4NyAxOTguOTkwMDc4MTIgLTgzLjM0NzY1NjI1IDE5OS4wMzEyNSBDLTU2LjU4MDI3NzA5IDE5OS43NzYwMDUyMyAtMzEuNDM2MTQxNzYgMTg4LjgxNjI3MjU4IC0xMi4wNTQ0NDMzNiAxNzAuNzY1NjI1IEM1LjI3MjM5MDEyIDE1NC4wMTA3MzQ1MiAxNi4zOTQyODMxMyAxMzAuMDkxODY1NjUgMTcuMzUxNTYyNSAxMDUuOTEwMTU2MjUgQzE3LjM5MTUyMzQ0IDEwNS4xNTA4OTg0NCAxNy40MzE0ODQzNyAxMDQuMzkxNjQwNjIgMTcuNDcyNjU2MjUgMTAzLjYwOTM3NSBDMTguMjE3NDExNDggNzYuODQxOTk1ODQgNy4yNTc2Nzg4MyA1MS42OTc4NjA1MSAtMTAuNzkyOTY4NzUgMzIuMzE2MTYyMTEgQy0yNy41NDc4NTkyMyAxNC45ODkzMjg2MyAtNTEuNDY2NzI4MSAzLjg2NzQzNTYyIC03NS42NDg0Mzc1IDIuOTEwMTU2MjUgQy03Ni43ODczMjQyMiAyLjg1MDIxNDg0IC03Ni43ODczMjQyMiAyLjg1MDIxNDg0IC03Ny45NDkyMTg3NSAyLjc4OTA2MjUgQy0xMDguODU5OTYwMDYgMS45MjkwMjU1MSAtMTM2LjI0OTk3Njk4IDE2LjQzMzI0OTk3IC0xNTYuNjQ4NDM3NSAzOC45MTAxNTYyNSBaICIgZmlsbD0iIzlFOUU5RSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjA4LjY0ODQzNzUsMjcuMDg5ODQzNzUpIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuNzc5NDM0NjYgMC4wMDIyMjA2MSAxLjU1ODg2OTMyIDAuMDA0NDQxMjIgMi4zNjE5MjMyMiAwLjAwNjcyOTEzIEMzLjI0Mjc2MDc3IDAuMDA2ODA0NjYgNC4xMjM1OTgzMyAwLjAwNjg4MDE5IDUuMDMxMTI3OTMgMC4wMDY5NTgwMSBDNS45ODg0MTI5MyAwLjAxMjExOTI5IDYuOTQ1Njk3OTQgMC4wMTcyODA1OCA3LjkzMTk5MTU4IDAuMDIyNTk4MjcgQzkuMzk0ODA4MTIgMC4wMjQ3MjA2OSA5LjM5NDgwODEyIDAuMDI0NzIwNjkgMTAuODg3MTc2NTEgMC4wMjY4ODU5OSBDMTQuMDE1NDI2NzUgMC4wMzI1MDMxOSAxNy4xNDM2MDY1NiAwLjA0NTA1ODU5IDIwLjI3MTgzNTMzIDAuMDU3NzU0NTIgQzIyLjM4NzA2ODY3IDAuMDYyNzY3MyAyNC41MDIzMDMxMyAwLjA2NzMzMDU5IDI2LjYxNzUzODQ1IDAuMDcxNDI2MzkgQzMxLjgxNDgyODI5IDAuMDgyNDc4MiAzNy4wMTIwNzY3OCAwLjA5OTIzMzA1IDQyLjIwOTMzNTMzIDAuMTIwMjU0NTIgQzQ0Ljk5MTE0MDUxIDYuMjUxMzU5MTEgNDcuNTc5MTE3NDUgMTIuNDM1MDc1MzMgNTAuMDM3NDYwMzMgMTguNzAyMjg1NzcgQzUwLjM5MDE1OTkxIDE5LjU5NjU0NzcgNTAuNzQyODU5NSAyMC40OTA4MDk2MyA1MS4xMDYyNDY5NSAyMS40MTIxNzA0MSBDNTIuMjI1NzczMjEgMjQuMjUxNjQ4MTQgNTMuMzQyNjgwOCAyNy4wOTIxNDYzOCA1NC40NTkzMzUzMyAyOS45MzI3NTQ1MiBDNTUuNTU3NzAyMTUgMzIuNzIyNDMxMiA1Ni42NTY2Mzk1MiAzNS41MTE4ODE3NCA1Ny43NTYwODgyNiAzOC4zMDExMzIyIEM1OC40ODMyNDk1MSA0MC4xNDY2MDUxNSA1OS4yMDk1NzI4OCA0MS45OTI0MDg0OCA1OS45MzUwNDMzMyA0My44Mzg1NDY3NSBDNjEuNzc4MzM5NjQgNDguNTIyNzUzMjQgNjMuNjQxMjU5NzcgNTMuMTk3NzI3NjUgNjUuNTM5NDEzNDUgNTcuODYwMDAwNjEgQzY1LjkxMTc3MTI0IDU4Ljc3Nzg2ODUgNjYuMjg0MTI5MDMgNTkuNjk1NzM2MzkgNjYuNjY3NzcwMzkgNjAuNjQxNDE4NDYgQzY3LjM3NzQxMTc2IDYyLjM4NzQ1NzM3IDY4LjA5MTI4MzIxIDY0LjEzMTc4NDgzIDY4LjgwOTk4MjMgNjUuODc0MTE0OTkgQzY5LjEyNTc4MjQ3IDY2LjY1MjMyMTAxIDY5LjQ0MTU4MjY0IDY3LjQzMDUyNzA0IDY5Ljc2Njk1MjUxIDY4LjIzMjMxNTA2IEM3MC4wNDY0MTcyNCA2OC45MTMyNzc0NCA3MC4zMjU4ODE5NiA2OS41OTQyMzk4MSA3MC42MTM4MTUzMSA3MC4yOTU4Mzc0IEM3MS4yMDkzMzUzMyA3Mi4xMjAyNTQ1MiA3MS4yMDkzMzUzMyA3Mi4xMjAyNTQ1MiA3MS4yMDkzMzUzMyA3NS4xMjAyNTQ1MiBDNzkuNDU5MzM1MzMgNzUuMTIwMjU0NTIgODcuNzA5MzM1MzMgNzUuMTIwMjU0NTIgOTYuMjA5MzM1MzMgNzUuMTIwMjU0NTIgQzk2LjIwOTMzNTMzIDgwLjA3MDI1NDUyIDk2LjIwOTMzNTMzIDg1LjAyMDI1NDUyIDk2LjIwOTMzNTMzIDkwLjEyMDI1NDUyIEM5MC4yNjkzMzUzMyA5MC4xMjAyNTQ1MiA4NC4zMjkzMzUzMyA5MC4xMjAyNTQ1MiA3OC4yMDkzMzUzMyA5MC4xMjAyNTQ1MiBDNzkuMTk5MzM1MzMgOTMuNTg1MjU0NTIgNzkuMTk5MzM1MzMgOTMuNTg1MjU0NTIgODAuMjA5MzM1MzMgOTcuMTIwMjU0NTIgQzg1LjQ4OTMzNTMzIDk3LjEyMDI1NDUyIDkwLjc2OTMzNTMzIDk3LjEyMDI1NDUyIDk2LjIwOTMzNTMzIDk3LjEyMDI1NDUyIEM5Ni4yMDkzMzUzMyAxMDIuMDcwMjU0NTIgOTYuMjA5MzM1MzMgMTA3LjAyMDI1NDUyIDk2LjIwOTMzNTMzIDExMi4xMjAyNTQ1MiBDOTEuNzU0MzM1MzMgMTEyLjYxNTI1NDUyIDkxLjc1NDMzNTMzIDExMi42MTUyNTQ1MiA4Ny4yMDkzMzUzMyAxMTMuMTIwMjU0NTIgQzg3LjcxNDY0NzgzIDExNC4zODQ4MjQ4MyA4OC4yMTk5NjAzMyAxMTUuNjQ5Mzk1MTQgODguNzQwNTg1MzMgMTE2Ljk1MjI4NTc3IEM4OS4zOTcxMDI1MiAxMTguNjEyMzM2MzcgOTAuMDUzMzM3ODkgMTIwLjI3MjQ5ODQ1IDkwLjcwOTMzNTMzIDEyMS45MzI3NTQ1MiBDOTEuMjEwMTM2MTEgMTIzLjE4MjgyMjg4IDkxLjIxMDEzNjExIDEyMy4xODI4MjI4OCA5MS43MjEwNTQwOCAxMjQuNDU4MTQ1MTQgQzkyLjE5NDc4NDU1IDEyNS42NjE4MDcyNSA5Mi4xOTQ3ODQ1NSAxMjUuNjYxODA3MjUgOTIuNjc4MDg1MzMgMTI2Ljg4OTc4NTc3IEM5Mi45NzEzNDcwNSAxMjcuNjI4MTc2ODggOTMuMjY0NjA4NzYgMTI4LjM2NjU2Nzk5IDkzLjU2Njc1NzIgMTI5LjEyNzMzNDU5IEM5NC4yMDkzMzUzMyAxMzEuMTIwMjU0NTIgOTQuMjA5MzM1MzMgMTMxLjEyMDI1NDUyIDk0LjIwOTMzNTMzIDEzNC4xMjAyNTQ1MiBDODEuOTk5MzM1MzMgMTM0LjEyMDI1NDUyIDY5Ljc4OTMzNTMzIDEzNC4xMjAyNTQ1MiA1Ny4yMDkzMzUzMyAxMzQuMTIwMjU0NTIgQzUyLjIwOTMzNTMzIDEyMi4xMjAyNTQ1MiA1Mi4yMDkzMzUzMyAxMjIuMTIwMjU0NTIgNDkuMjA5MzM1MzMgMTEyLjEyMDI1NDUyIEMzMC4wNjkzMzUzMyAxMTIuMTIwMjU0NTIgMTAuOTI5MzM1MzMgMTEyLjEyMDI1NDUyIC04Ljc5MDY2NDY3IDExMi4xMjAyNTQ1MiBDLTkuNzgwNjY0NjcgMTE1LjQyMDI1NDUyIC0xMC43NzA2NjQ2NyAxMTguNzIwMjU0NTIgLTExLjc5MDY2NDY3IDEyMi4xMjAyNTQ1MiBDLTEzLjQ0MDY2NDY3IDEyNi4wODAyNTQ1MiAtMTUuMDkwNjY0NjcgMTMwLjA0MDI1NDUyIC0xNi43OTA2NjQ2NyAxMzQuMTIwMjU0NTIgQy0yOS4wMDA2NjQ2NyAxMzQuMTIwMjU0NTIgLTQxLjIxMDY2NDY3IDEzNC4xMjAyNTQ1MiAtNTMuNzkwNjY0NjcgMTM0LjEyMDI1NDUyIEMtNTMuMTI2NDQxNjkgMTMwLjc5OTEzOTYgLTUyLjU1MzU4NjExIDEyOC4yMDE5NDI1MyAtNTEuMzgwNTA4NDIgMTI1LjEzMTk3MzI3IEMtNTAuOTc5Mjg3NzIgMTI0LjA3MzMzMDY5IC01MC45NzkyODc3MiAxMjQuMDczMzMwNjkgLTUwLjU2OTk2MTU1IDEyMi45OTMzMDEzOSBDLTUwLjI5MjE2ODU4IDEyMi4yNzIwNzA5MiAtNTAuMDE0Mzc1NjEgMTIxLjU1MDg0MDQ1IC00OS43MjgxNjQ2NyAxMjAuODA3NzU0NTIgQy00OS4zMDU2NzQ0NCAxMTkuNjk2OTA0OTEgLTQ5LjMwNTY3NDQ0IDExOS42OTY5MDQ5MSAtNDguODc0NjQ5MDUgMTE4LjU2MzYxMzg5IEMtNDguMTgzNDc4OTIgMTE2Ljc0NzgyNzk2IC00Ny40ODc1NDc3OSAxMTQuOTMzODU1NTIgLTQ2Ljc5MDY2NDY3IDExMy4xMjAyNTQ1MiBDLTQ5Ljc2MDY2NDY3IDExMi43OTAyNTQ1MiAtNTIuNzMwNjY0NjcgMTEyLjQ2MDI1NDUyIC01NS43OTA2NjQ2NyAxMTIuMTIwMjU0NTIgQy01NS43OTA2NjQ2NyAxMDcuMTcwMjU0NTIgLTU1Ljc5MDY2NDY3IDEwMi4yMjAyNTQ1MiAtNTUuNzkwNjY0NjcgOTcuMTIwMjU0NTIgQy01MC41MTA2NjQ2NyA5Ny4xMjAyNTQ1MiAtNDUuMjMwNjY0NjcgOTcuMTIwMjU0NTIgLTM5Ljc5MDY2NDY3IDk3LjEyMDI1NDUyIEMtMzkuMTMwNjY0NjcgOTQuODEwMjU0NTIgLTM4LjQ3MDY2NDY3IDkyLjUwMDI1NDUyIC0zNy43OTA2NjQ2NyA5MC4xMjAyNTQ1MiBDLTQzLjczMDY2NDY3IDkwLjEyMDI1NDUyIC00OS42NzA2NjQ2NyA5MC4xMjAyNTQ1MiAtNTUuNzkwNjY0NjcgOTAuMTIwMjU0NTIgQy01NS43OTA2NjQ2NyA4NS4xNzAyNTQ1MiAtNTUuNzkwNjY0NjcgODAuMjIwMjU0NTIgLTU1Ljc5MDY2NDY3IDc1LjEyMDI1NDUyIEMtNDcuNTQwNjY0NjcgNzUuMTIwMjU0NTIgLTM5LjI5MDY2NDY3IDc1LjEyMDI1NDUyIC0zMC43OTA2NjQ2NyA3NS4xMjAyNTQ1MiBDLTMwLjQ2MDY2NDY3IDczLjQ3MDI1NDUyIC0zMC4xMzA2NjQ2NyA3MS44MjAyNTQ1MiAtMjkuNzkwNjY0NjcgNzAuMTIwMjU0NTIgQy0yOS4zNTY1NzU4MyA2OC44MTI0MDQ1NiAtMjguODg3MjM5MjEgNjcuNTE1NzA5OTggLTI4LjM4Mjk0OTgzIDY2LjIzMzI5MTYzIEMtMjcuOTU1MjcwNjEgNjUuMTM2NzU1MTQgLTI3Ljk1NTI3MDYxIDY1LjEzNjc1NTE0IC0yNy41MTg5NTE0MiA2NC4wMTgwNjY0MSBDLTI3LjIwOTAwNzQyIDYzLjIzNTgxMTkyIC0yNi44OTkwNjM0MiA2Mi40NTM1NTc0MyAtMjYuNTc5NzI3MTcgNjEuNjQ3NTk4MjcgQy0yNi4wOTMyMzk1MiA2MC40MDUyNzE4NCAtMjYuMDkzMjM5NTIgNjAuNDA1MjcxODQgLTI1LjU5NjkyMzgzIDU5LjEzNzg0NzkgQy0yNC41NDA0OTM5NyA1Ni40NDI4OTc0OSAtMjMuNDc4MjE0MDQgNTMuNzUwMjk3MzYgLTIyLjQxNTY2NDY3IDUxLjA1Nzc1NDUyIEMtMjEuNjg4NjgwNTUgNDkuMjA3NjI3NzYgLTIwLjk2MjAzODM5IDQ3LjM1NzM2NjU5IC0yMC4yMzU3MzMwMyA0NS41MDY5NzMyNyBDLTE4Ljc3OTY4MzY3IDQxLjc5ODk3MzEgLTE3LjMyMTM4MjQ0IDM4LjA5MTg3MDIyIC0xNS44NjE0NjU0NSAzNC4zODUzOTEyNCBDLTE0LjAwMzg3MjU1IDI5LjY2NjY4MzE1IC0xMi4xNTg0NzMxNyAyNC45NDMzMjA2NSAtMTAuMzE4MDA4NDIgMjAuMjE3OTEwNzcgQy05LjgwNjIzMTMyIDE4LjkwNjEwMjQ1IC05LjI5NDM1Mzc3IDE3LjU5NDMzMzMyIC04Ljc4MjM2Mzg5IDE2LjI4MjYwODAzIEMtNy44NDYzMDQ5OSAxMy44ODM5MzcxMSAtNi45MTE2ODAwOCAxMS40ODQ3MDU5NyAtNS45Nzg2NTI5NSA5LjA4NDg1NDEzIEMtNS41NjcyODA4OCA4LjAzNDM0ODc1IC01LjE1NTkwODgxIDYuOTgzODQzMzggLTQuNzMyMDcwOTIgNS45MDE1MDQ1MiBDLTQuMzc4MzAzODMgNC45OTQ2NDkwNSAtNC4wMjQ1MzY3NCA0LjA4Nzc5MzU4IC0zLjY2MDA0OTQ0IDMuMTUzNDU3NjQgQy0yLjM3OTk5Mzk4IDAuMTU5ODMxNzMgLTIuMzc5OTkzOTggMC4xNTk4MzE3MyAwIDAgWiBNMjAuMjA5MzM1MzMgMzQuMTIwMjU0NTIgQzE2LjgxMTU1MDQyIDQxLjQ0MTY3MiAxMy45NzAzMDk5MyA0OC45Mjk2MjIxMiAxMS4yMDc4NzA0OCA1Ni41MDY3MjkxMyBDMTAuNDUxMzgyMzUgNTguNTc5NTQ2MDkgOS42ODgwNjYyNSA2MC42NDk3NjM3OSA4LjkyNDE3OTA4IDYyLjcxOTg2Mzg5IEM4LjQ0MDY5OTkyIDY0LjAzOTM3NjU3IDcuOTU3NjEyMjcgNjUuMzU5MDMyNzggNy40NzQ5NjAzMyA2Ni42Nzg4NDgyNyBDNy4wMzk1Nzk0NyA2Ny44Njc5Mjc4NiA2LjYwNDE5ODYxIDY5LjA1NzAwNzQ1IDYuMTU1NjI0MzkgNzAuMjgyMTE5NzUgQzUuMTAzOTAxNTkgNzIuOTM3ODUxOCA1LjEwMzkwMTU5IDcyLjkzNzg1MTggNS4yMDkzMzUzMyA3NS4xMjAyNTQ1MiBDMTUuMTA5MzM1MzMgNzUuMTIwMjU0NTIgMjUuMDA5MzM1MzMgNzUuMTIwMjU0NTIgMzUuMjA5MzM1MzMgNzUuMTIwMjU0NTIgQzMzLjQxMTgzNzk3IDY5LjEyODU5NjY3IDMxLjYyMDI3MzkyIDYzLjIzNDQ4Mzc4IDI5LjUxMDExNjU4IDU3LjM2MjQ0MjAyIEMyOS4yNzAyMDQ5MyA1Ni42ODg1MTQxIDI5LjAzMDI5MzI3IDU2LjAxNDU4NjE4IDI4Ljc4MzExMTU3IDU1LjMyMDIzNjIxIEMyOC4wMzE2Nzg1NiA1My4yMTEwNzA1NyAyNy4yNzY4MzI1IDUxLjEwMzE0NjU4IDI2LjUyMTgzNTMzIDQ4Ljk5NTI1NDUyIEMyNi4wMDUzMzA1NCA0Ny41NDc0MTk0MyAyNS40ODkwNTI4MSA0Ni4wOTk1MDMzMyAyNC45NzMwMDcyIDQ0LjY1MTUwNDUyIEMyMy43MjEwNjM0NyA0MS4xNDAxNTA4OCAyMi40NjYwNjAxOSAzNy42Mjk5MDAyNSAyMS4yMDkzMzUzMyAzNC4xMjAyNTQ1MiBDMjAuODc5MzM1MzMgMzQuMTIwMjU0NTIgMjAuNTQ5MzM1MzMgMzQuMTIwMjU0NTIgMjAuMjA5MzM1MzMgMzQuMTIwMjU0NTIgWiBNLTAuNzkwNjY0NjcgOTAuMTIwMjU0NTIgQy0xLjQ1MDY2NDY3IDkyLjQzMDI1NDUyIC0yLjExMDY2NDY3IDk0Ljc0MDI1NDUyIC0yLjc5MDY2NDY3IDk3LjEyMDI1NDUyIEMxMi4zODkzMzUzMyA5Ny4xMjAyNTQ1MiAyNy41NjkzMzUzMyA5Ny4xMjAyNTQ1MiA0My4yMDkzMzUzMyA5Ny4xMjAyNTQ1MiBDNDIuNTQ5MzM1MzMgOTQuODEwMjU0NTIgNDEuODg5MzM1MzMgOTIuNTAwMjU0NTIgNDEuMjA5MzM1MzMgOTAuMTIwMjU0NTIgQzI3LjM0OTMzNTMzIDkwLjEyMDI1NDUyIDEzLjQ4OTMzNTMzIDkwLjEyMDI1NDUyIC0wLjc5MDY2NDY3IDkwLjEyMDI1NDUyIFogIiBmaWxsPSIjOUU5RTlFIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMDcuNzkwNjY0NjcyODUxNTYsNDUuODc5NzQ1NDgzMzk4NDQpIi8+Cjwvc3ZnPgo=",
- color1: "#FFAB19",
- color2: "#FF8C00",
- color3: "#E76F00",
- blocks: [
- {
- opcode: "login",
- text: Scratch.translate({ id: "oauthExtension.login", default: "Log in with [SERVICE]" }),
- blockType: Scratch.BlockType.COMMAND,
- arguments: {
- SERVICE: { type: Scratch.ArgumentType.STRING, menu: "SERVICE" },
- },
- },
- {
- opcode: "isLoggedIn",
- text: Scratch.translate({ id: "oauthExtension.isLoggedIn", default: "Is user logged in with [SERVICE]?" }),
- blockType: Scratch.BlockType.BOOLEAN,
- arguments: {
- SERVICE: { type: Scratch.ArgumentType.STRING, menu: "SERVICE" },
- },
- },
- {
- opcode: "setClientId",
- text: Scratch.translate({ id: "oauthExtension.setClientId", default: "Set client ID for [SERVICE] to [CLIENT_ID]" }),
- blockType: Scratch.BlockType.COMMAND,
- arguments: {
- SERVICE: { type: Scratch.ArgumentType.STRING, menu: "SERVICE" },
- CLIENT_ID: { type: Scratch.ArgumentType.STRING, defaultValue: "" },
- },
- },
- {
- opcode: "setClientSecret",
- text: Scratch.translate({ id: "oauthExtension.setClientSecret", default: "Set client secret for [SERVICE] to [CLIENT_SECRET]" }),
- blockType: Scratch.BlockType.COMMAND,
- arguments: {
- SERVICE: { type: Scratch.ArgumentType.STRING, menu: "SERVICE" },
- CLIENT_SECRET: { type: Scratch.ArgumentType.STRING, defaultValue: "" },
- },
- },
- {
- opcode: "setRedirectUri",
- text: Scratch.translate({ id: "oauthExtension.setRedirectUri", default: "Set redirect URI for [SERVICE] to [REDIRECT_URI]" }),
- blockType: Scratch.BlockType.COMMAND,
- arguments: {
- SERVICE: { type: Scratch.ArgumentType.STRING, menu: "SERVICE" },
- REDIRECT_URI: { type: Scratch.ArgumentType.STRING, defaultValue: "" },
- },
- },
- ],
- menus: {
- SERVICE: {
- items: [
- { text: "Google", value: "google" },
- { text: "Microsoft", value: "microsoft" },
- { text: "Discord", value: "discord" },
- { text: "Twitter", value: "twitter" },
- { text: "GitHub", value: "github" },
- { text: "Facebook", value: "facebook" },
- { text: "LinkedIn", value: "linkedin" },
- { text: "Spotify", value: "spotify" },
- ],
- },
- },
- };
- }
+ getInfo() {
+ return {
+ id: "oauthExtension",
+ name: Scratch.translate({
+ id: "oauthExtension.name",
+ default: "OAuth Extension",
+ }),
+ blockIconURI:
+ "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI1NiIgaGVpZ2h0PSIyNTYiPgo8cGF0aCBkPSJNMCAwIEMyMi4wMzg1MjY1MiAxOC44MTE1OTg1NiAzNi40NjU3OTMzNCA0MS4wNjM3MzM3NyA0NC4zNTE1NjI1IDY4LjkxMDE1NjI1IEM0NC42OTMxNjQwNiA3MC4wODgzNTkzNyA0NS4wMzQ3NjU2MyA3MS4yNjY1NjI1IDQ1LjM4NjcxODc1IDcyLjQ4MDQ2ODc1IEM1MS41OTA5Mjc1NSA5OC43NDAxNDMyMiA0OC4xMTkzNTU5NyAxMjguNDA3NTUzODkgMzcuMzUxNTYyNSAxNTIuOTEwMTU2MjUgQzM2LjkyNjY1NTI3IDE1My44OTE0NTUwOCAzNi45MjY2NTUyNyAxNTMuODkxNDU1MDggMzYuNDkzMTY0MDYgMTU0Ljg5MjU3ODEyIEMyNi41NTAxNTk0MyAxNzcuNDE1NDA2MzEgOS4zNjgzODI4MiAxOTcuMDgzNzE0NDMgLTExLjY0ODQzNzUgMjA5LjkxMDE1NjI1IEMtMTIuNzIwOTM3NSAyMTAuNTkzMzU5MzggLTEzLjc5MzQzNzUgMjExLjI3NjU2MjUgLTE0Ljg5ODQzNzUgMjExLjk4MDQ2ODc1IEMtNDIuNzU5MjI3OTQgMjI4Ljk0MjAxNDc4IC03OC4yNTA2MTE4OSAyMzMuOTI2NDg1NDUgLTExMC4wMzAyNzM0NCAyMjYuNzQ3MDcwMzEgQy0xMTcuODE5NDE3MjkgMjI0Ljc3NzM2MzU3IC0xMjUuMjk4MDI2MiAyMjIuMTQwMzMxOTUgLTEzMi42NDg0Mzc1IDIxOC45MTAxNTYyNSBDLTEzMy4zMDI2MzY3MiAyMTguNjI2ODg0NzcgLTEzMy45NTY4MzU5NCAyMTguMzQzNjEzMjggLTEzNC42MzA4NTkzOCAyMTguMDUxNzU3ODEgQy0xNjQuNzI1OTMyMzQgMjA0Ljc2NTg4NDE0IC0xODguNDMyNjIzMzkgMTc5LjE4ODU5MzM5IC0yMDAuNTE5NTMxMjUgMTQ4LjcxMzg2NzE5IEMtMjAyLjQ3ODkwMDc3IDE0My41MTUyMTc0MiAtMjA0LjEzNTA4MjUgMTM4LjI1NDE1Mjc0IC0yMDUuNjQ4NDM3NSAxMzIuOTEwMTU2MjUgQy0yMDUuOTkwMDM5MDYgMTMxLjczMTk1MzEyIC0yMDYuMzMxNjQwNjMgMTMwLjU1Mzc1IC0yMDYuNjgzNTkzNzUgMTI5LjMzOTg0Mzc1IEMtMjE0LjIxNzQzOTk4IDk3LjQ1MjQwMTU3IC0yMDcuODM1NTc0NTYgNjEuNDM0NjUxNjEgLTE5MS4wMDc4MTI1IDMzLjYwNTQ2ODc1IEMtMTcyLjcxOTMxMzkzIDQuNTE1NjA4MTggLTE0NS40NzI3MDQ5NSAtMTQuNzk0NDA5MjYgLTExMi42NDg0Mzc1IC0yNC4wODk4NDM3NSBDLTExMS40NzAyMzQzOCAtMjQuNDMxNDQ1MzEgLTExMC4yOTIwMzEyNSAtMjQuNzczMDQ2ODcgLTEwOS4wNzgxMjUgLTI1LjEyNSBDLTcxLjkxMjE2MjA0IC0zMy45MDU5NjkyNyAtMjkuNDM4MzUxODQgLTI0LjE0NjUyMjQyIDAgMCBaIE0tMTU2LjY0ODQzNzUgMzguOTEwMTU2MjUgQy0xNzIuNjc2OTQzNTIgNTguMDg4NzczMjggLTE4MC4zOTY0OTAzOCA4NC41ODg4MzUyMyAtMTc4LjM3MTA5Mzc1IDEwOS4yOTI5Njg3NSBDLTE3NS40NzE3NjMxNSAxMzUuNzQ1OTA4ODUgLTE2Mi45NTU1MTQxMyAxNTkuNTg0NTMzMDggLTE0Mi42NDg0Mzc1IDE3Ni45MTAxNTYyNSBDLTEyNi41NDMxNjcwNSAxODkuNjk5NjM1NzIgLTEwNi4zMjExMTA2MiAxOTguMDkxNzg4ODEgLTg1LjY0ODQzNzUgMTk4LjkxMDE1NjI1IEMtODQuODg5MTc5NjkgMTk4Ljk1MDExNzE5IC04NC4xMjk5MjE4NyAxOTguOTkwMDc4MTIgLTgzLjM0NzY1NjI1IDE5OS4wMzEyNSBDLTU2LjU4MDI3NzA5IDE5OS43NzYwMDUyMyAtMzEuNDM2MTQxNzYgMTg4LjgxNjI3MjU4IC0xMi4wNTQ0NDMzNiAxNzAuNzY1NjI1IEM1LjI3MjM5MDEyIDE1NC4wMTA3MzQ1MiAxNi4zOTQyODMxMyAxMzAuMDkxODY1NjUgMTcuMzUxNTYyNSAxMDUuOTEwMTU2MjUgQzE3LjM5MTUyMzQ0IDEwNS4xNTA4OTg0NCAxNy40MzE0ODQzNyAxMDQuMzkxNjQwNjIgMTcuNDcyNjU2MjUgMTAzLjYwOTM3NSBDMTguMjE3NDExNDggNzYuODQxOTk1ODQgNy4yNTc2Nzg4MyA1MS42OTc4NjA1MSAtMTAuNzkyOTY4NzUgMzIuMzE2MTYyMTEgQy0yNy41NDc4NTkyMyAxNC45ODkzMjg2MyAtNTEuNDY2NzI4MSAzLjg2NzQzNTYyIC03NS42NDg0Mzc1IDIuOTEwMTU2MjUgQy03Ni43ODczMjQyMiAyLjg1MDIxNDg0IC03Ni43ODczMjQyMiAyLjg1MDIxNDg0IC03Ny45NDkyMTg3NSAyLjc4OTA2MjUgQy0xMDguODU5OTYwMDYgMS45MjkwMjU1MSAtMTM2LjI0OTk3Njk4IDE2LjQzMzI0OTk3IC0xNTYuNjQ4NDM3NSAzOC45MTAxNTYyNSBaICIgZmlsbD0iIzlFOUU5RSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjA4LjY0ODQzNzUsMjcuMDg5ODQzNzUpIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuNzc5NDM0NjYgMC4wMDIyMjA2MSAxLjU1ODg2OTMyIDAuMDA0NDQxMjIgMi4zNjE5MjMyMiAwLjAwNjcyOTEzIEMzLjI0Mjc2MDc3IDAuMDA2ODA0NjYgNC4xMjM1OTgzMyAwLjAwNjg4MDE5IDUuMDMxMTI3OTMgMC4wMDY5NTgwMSBDNS45ODg0MTI5MyAwLjAxMjExOTI5IDYuOTQ1Njk3OTQgMC4wMTcyODA1OCA3LjkzMTk5MTU4IDAuMDIyNTk4MjcgQzkuMzk0ODA4MTIgMC4wMjQ3MjA2OSA5LjM5NDgwODEyIDAuMDI0NzIwNjkgMTAuODg3MTc2NTEgMC4wMjY4ODU5OSBDMTQuMDE1NDI2NzUgMC4wMzI1MDMxOSAxNy4xNDM2MDY1NiAwLjA0NTA1ODU5IDIwLjI3MTgzNTMzIDAuMDU3NzU0NTIgQzIyLjM4NzA2ODY3IDAuMDYyNzY3MyAyNC41MDIzMDMxMyAwLjA2NzMzMDU5IDI2LjYxNzUzODQ1IDAuMDcxNDI2MzkgQzMxLjgxNDgyODI5IDAuMDgyNDc4MiAzNy4wMTIwNzY3OCAwLjA5OTIzMzA1IDQyLjIwOTMzNTMzIDAuMTIwMjU0NTIgQzQ0Ljk5MTE0MDUxIDYuMjUxMzU5MTEgNDcuNTc5MTE3NDUgMTIuNDM1MDc1MzMgNTAuMDM3NDYwMzMgMTguNzAyMjg1NzcgQzUwLjM5MDE1OTkxIDE5LjU5NjU0NzcgNTAuNzQyODU5NSAyMC40OTA4MDk2MyA1MS4xMDYyNDY5NSAyMS40MTIxNzA0MSBDNTIuMjI1NzczMjEgMjQuMjUxNjQ4MTQgNTMuMzQyNjgwOCAyNy4wOTIxNDYzOCA1NC40NTkzMzUzMyAyOS45MzI3NTQ1MiBDNTUuNTU3NzAyMTUgMzIuNzIyNDMxMiA1Ni42NTY2Mzk1MiAzNS41MTE4ODE3NCA1Ny43NTYwODgyNiAzOC4zMDExMzIyIEM1OC40ODMyNDk1MSA0MC4xNDY2MDUxNSA1OS4yMDk1NzI4OCA0MS45OTI0MDg0OCA1OS45MzUwNDMzMyA0My44Mzg1NDY3NSBDNjEuNzc4MzM5NjQgNDguNTIyNzUzMjQgNjMuNjQxMjU5NzcgNTMuMTk3NzI3NjUgNjUuNTM5NDEzNDUgNTcuODYwMDAwNjEgQzY1LjkxMTc3MTI0IDU4Ljc3Nzg2ODUgNjYuMjg0MTI5MDMgNTkuNjk1NzM2MzkgNjYuNjY3NzcwMzkgNjAuNjQxNDE4NDYgQzY3LjM3NzQxMTc2IDYyLjM4NzQ1NzM3IDY4LjA5MTI4MzIxIDY0LjEzMTc4NDgzIDY4LjgwOTk4MjMgNjUuODc0MTE0OTkgQzY5LjEyNTc4MjQ3IDY2LjY1MjMyMTAxIDY5LjQ0MTU4MjY0IDY3LjQzMDUyNzA0IDY5Ljc2Njk1MjUxIDY4LjIzMjMxNTA2IEM3MC4wNDY0MTcyNCA2OC45MTMyNzc0NCA3MC4zMjU4ODE5NiA2OS41OTQyMzk4MSA3MC42MTM4MTUzMSA3MC4yOTU4Mzc0IEM3MS4yMDkzMzUzMyA3Mi4xMjAyNTQ1MiA3MS4yMDkzMzUzMyA3Mi4xMjAyNTQ1MiA3MS4yMDkzMzUzMyA3NS4xMjAyNTQ1MiBDNzkuNDU5MzM1MzMgNzUuMTIwMjU0NTIgODcuNzA5MzM1MzMgNzUuMTIwMjU0NTIgOTYuMjA5MzM1MzMgNzUuMTIwMjU0NTIgQzk2LjIwOTMzNTMzIDgwLjA3MDI1NDUyIDk2LjIwOTMzNTMzIDg1LjAyMDI1NDUyIDk2LjIwOTMzNTMzIDkwLjEyMDI1NDUyIEM5MC4yNjkzMzUzMyA5MC4xMjAyNTQ1MiA4NC4zMjkzMzUzMyA5MC4xMjAyNTQ1MiA3OC4yMDkzMzUzMyA5MC4xMjAyNTQ1MiBDNzkuMTk5MzM1MzMgOTMuNTg1MjU0NTIgNzkuMTk5MzM1MzMgOTMuNTg1MjU0NTIgODAuMjA5MzM1MzMgOTcuMTIwMjU0NTIgQzg1LjQ4OTMzNTMzIDk3LjEyMDI1NDUyIDkwLjc2OTMzNTMzIDk3LjEyMDI1NDUyIDk2LjIwOTMzNTMzIDk3LjEyMDI1NDUyIEM5Ni4yMDkzMzUzMyAxMDIuMDcwMjU0NTIgOTYuMjA5MzM1MzMgMTA3LjAyMDI1NDUyIDk2LjIwOTMzNTMzIDExMi4xMjAyNTQ1MiBDOTEuNzU0MzM1MzMgMTEyLjYxNTI1NDUyIDkxLjc1NDMzNTMzIDExMi42MTUyNTQ1MiA4Ny4yMDkzMzUzMyAxMTMuMTIwMjU0NTIgQzg3LjcxNDY0NzgzIDExNC4zODQ4MjQ4MyA4OC4yMTk5NjAzMyAxMTUuNjQ5Mzk1MTQgODguNzQwNTg1MzMgMTE2Ljk1MjI4NTc3IEM4OS4zOTcxMDI1MiAxMTguNjEyMzM2MzcgOTAuMDUzMzM3ODkgMTIwLjI3MjQ5ODQ1IDkwLjcwOTMzNTMzIDEyMS45MzI3NTQ1MiBDOTEuMjEwMTM2MTEgMTIzLjE4MjgyMjg4IDkxLjIxMDEzNjExIDEyMy4xODI4MjI4OCA5MS43MjEwNTQwOCAxMjQuNDU4MTQ1MTQgQzkyLjE5NDc4NDU1IDEyNS42NjE4MDcyNSA5Mi4xOTQ3ODQ1NSAxMjUuNjYxODA3MjUgOTIuNjc4MDg1MzMgMTI2Ljg4OTc4NTc3IEM5Mi45NzEzNDcwNSAxMjcuNjI4MTc2ODggOTMuMjY0NjA4NzYgMTI4LjM2NjU2Nzk5IDkzLjU2Njc1NzIgMTI5LjEyNzMzNDU5IEM5NC4yMDkzMzUzMyAxMzEuMTIwMjU0NTIgOTQuMjA5MzM1MzMgMTMxLjEyMDI1NDUyIDk0LjIwOTMzNTMzIDEzNC4xMjAyNTQ1MiBDODEuOTk5MzM1MzMgMTM0LjEyMDI1NDUyIDY5Ljc4OTMzNTMzIDEzNC4xMjAyNTQ1MiA1Ny4yMDkzMzUzMyAxMzQuMTIwMjU0NTIgQzUyLjIwOTMzNTMzIDEyMi4xMjAyNTQ1MiA1Mi4yMDkzMzUzMyAxMjIuMTIwMjU0NTIgNDkuMjA5MzM1MzMgMTEyLjEyMDI1NDUyIEMzMC4wNjkzMzUzMyAxMTIuMTIwMjU0NTIgMTAuOTI5MzM1MzMgMTEyLjEyMDI1NDUyIC04Ljc5MDY2NDY3IDExMi4xMjAyNTQ1MiBDLTkuNzgwNjY0NjcgMTE1LjQyMDI1NDUyIC0xMC43NzA2NjQ2NyAxMTguNzIwMjU0NTIgLTExLjc5MDY2NDY3IDEyMi4xMjAyNTQ1MiBDLTEzLjQ0MDY2NDY3IDEyNi4wODAyNTQ1MiAtMTUuMDkwNjY0NjcgMTMwLjA0MDI1NDUyIC0xNi43OTA2NjQ2NyAxMzQuMTIwMjU0NTIgQy0yOS4wMDA2NjQ2NyAxMzQuMTIwMjU0NTIgLTQxLjIxMDY2NDY3IDEzNC4xMjAyNTQ1MiAtNTMuNzkwNjY0NjcgMTM0LjEyMDI1NDUyIEMtNTMuMTI2NDQxNjkgMTMwLjc5OTEzOTYgLTUyLjU1MzU4NjExIDEyOC4yMDE5NDI1MyAtNTEuMzgwNTA4NDIgMTI1LjEzMTk3MzI3IEMtNTAuOTc5Mjg3NzIgMTI0LjA3MzMzMDY5IC01MC45NzkyODc3MiAxMjQuMDczMzMwNjkgLTUwLjU2OTk2MTU1IDEyMi45OTMzMDEzOSBDLTUwLjI5MjE2ODU4IDEyMi4yNzIwNzA5MiAtNTAuMDE0Mzc1NjEgMTIxLjU1MDg0MDQ1IC00OS43MjgxNjQ2NyAxMjAuODA3NzU0NTIgQy00OS4zMDU2NzQ0NCAxMTkuNjk2OTA0OTEgLTQ5LjMwNTY3NDQ0IDExOS42OTY5MDQ5MSAtNDguODc0NjQ5MDUgMTE4LjU2MzYxMzg5IEMtNDguMTgzNDc4OTIgMTE2Ljc0NzgyNzk2IC00Ny40ODc1NDc3OSAxMTQuOTMzODU1NTIgLTQ2Ljc5MDY2NDY3IDExMy4xMjAyNTQ1MiBDLTQ5Ljc2MDY2NDY3IDExMi43OTAyNTQ1MiAtNTIuNzMwNjY0NjcgMTEyLjQ2MDI1NDUyIC01NS43OTA2NjQ2NyAxMTIuMTIwMjU0NTIgQy01NS43OTA2NjQ2NyAxMDcuMTcwMjU0NTIgLTU1Ljc5MDY2NDY3IDEwMi4yMjAyNTQ1MiAtNTUuNzkwNjY0NjcgOTcuMTIwMjU0NTIgQy01MC41MTA2NjQ2NyA5Ny4xMjAyNTQ1MiAtNDUuMjMwNjY0NjcgOTcuMTIwMjU0NTIgLTM5Ljc5MDY2NDY3IDk3LjEyMDI1NDUyIEMtMzkuMTMwNjY0NjcgOTQuODEwMjU0NTIgLTM4LjQ3MDY2NDY3IDkyLjUwMDI1NDUyIC0zNy43OTA2NjQ2NyA5MC4xMjAyNTQ1MiBDLTQzLjczMDY2NDY3IDkwLjEyMDI1NDUyIC00OS42NzA2NjQ2NyA5MC4xMjAyNTQ1MiAtNTUuNzkwNjY0NjcgOTAuMTIwMjU0NTIgQy01NS43OTA2NjQ2NyA4NS4xNzAyNTQ1MiAtNTUuNzkwNjY0NjcgODAuMjIwMjU0NTIgLTU1Ljc5MDY2NDY3IDc1LjEyMDI1NDUyIEMtNDcuNTQwNjY0NjcgNzUuMTIwMjU0NTIgLTM5LjI5MDY2NDY3IDc1LjEyMDI1NDUyIC0zMC43OTA2NjQ2NyA3NS4xMjAyNTQ1MiBDLTMwLjQ2MDY2NDY3IDczLjQ3MDI1NDUyIC0zMC4xMzA2NjQ2NyA3MS44MjAyNTQ1MiAtMjkuNzkwNjY0NjcgNzAuMTIwMjU0NTIgQy0yOS4zNTY1NzU4MyA2OC44MTI0MDQ1NiAtMjguODg3MjM5MjEgNjcuNTE1NzA5OTggLTI4LjM4Mjk0OTgzIDY2LjIzMzI5MTYzIEMtMjcuOTU1MjcwNjEgNjUuMTM2NzU1MTQgLTI3Ljk1NTI3MDYxIDY1LjEzNjc1NTE0IC0yNy41MTg5NTE0MiA2NC4wMTgwNjY0MSBDLTI3LjIwOTAwNzQyIDYzLjIzNTgxMTkyIC0yNi44OTkwNjM0MiA2Mi40NTM1NTc0MyAtMjYuNTc5NzI3MTcgNjEuNjQ3NTk4MjcgQy0yNi4wOTMyMzk1MiA2MC40MDUyNzE4NCAtMjYuMDkzMjM5NTIgNjAuNDA1MjcxODQgLTI1LjU5NjkyMzgzIDU5LjEzNzg0NzkgQy0yNC41NDA0OTM5NyA1Ni40NDI4OTc0OSAtMjMuNDc4MjE0MDQgNTMuNzUwMjk3MzYgLTIyLjQxNTY2NDY3IDUxLjA1Nzc1NDUyIEMtMjEuNjg4NjgwNTUgNDkuMjA3NjI3NzYgLTIwLjk2MjAzODM5IDQ3LjM1NzM2NjU5IC0yMC4yMzU3MzMwMyA0NS41MDY5NzMyNyBDLTE4Ljc3OTY4MzY3IDQxLjc5ODk3MzEgLTE3LjMyMTM4MjQ0IDM4LjA5MTg3MDIyIC0xNS44NjE0NjU0NSAzNC4zODUzOTEyNCBDLTE0LjAwMzg3MjU1IDI5LjY2NjY4MzE1IC0xMi4xNTg0NzMxNyAyNC45NDMzMjA2NSAtMTAuMzE4MDA4NDIgMjAuMjE3OTEwNzcgQy05LjgwNjIzMTMyIDE4LjkwNjEwMjQ1IC05LjI5NDM1Mzc3IDE3LjU5NDMzMzMyIC04Ljc4MjM2Mzg5IDE2LjI4MjYwODAzIEMtNy44NDYzMDQ5OSAxMy44ODM5MzcxMSAtNi45MTE2ODAwOCAxMS40ODQ3MDU5NyAtNS45Nzg2NTI5NSA5LjA4NDg1NDEzIEMtNS41NjcyODA4OCA4LjAzNDM0ODc1IC01LjE1NTkwODgxIDYuOTgzODQzMzggLTQuNzMyMDcwOTIgNS45MDE1MDQ1MiBDLTQuMzc4MzAzODMgNC45OTQ2NDkwNSAtNC4wMjQ1MzY3NCA0LjA4Nzc5MzU4IC0zLjY2MDA0OTQ0IDMuMTUzNDU3NjQgQy0yLjM3OTk5Mzk4IDAuMTU5ODMxNzMgLTIuMzc5OTkzOTggMC4xNTk4MzE3MyAwIDAgWiBNMjAuMjA5MzM1MzMgMzQuMTIwMjU0NTIgQzE2LjgxMTU1MDQyIDQxLjQ0MTY3MiAxMy45NzAzMDk5MyA0OC45Mjk2MjIxMiAxMS4yMDc4NzA0OCA1Ni41MDY3MjkxMyBDMTAuNDUxMzgyMzUgNTguNTc5NTQ2MDkgOS42ODgwNjYyNSA2MC42NDk3NjM3OSA4LjkyNDE3OTA4IDYyLjcxOTg2Mzg5IEM4LjQ0MDY5OTkyIDY0LjAzOTM3NjU3IDcuOTU3NjEyMjcgNjUuMzU5MDMyNzggNy40NzQ5NjAzMyA2Ni42Nzg4NDgyNyBDNy4wMzk1Nzk0NyA2Ny44Njc5Mjc4NiA2LjYwNDE5ODYxIDY5LjA1NzAwNzQ1IDYuMTU1NjI0MzkgNzAuMjgyMTE5NzUgQzUuMTAzOTAxNTkgNzIuOTM3ODUxOCA1LjEwMzkwMTU5IDcyLjkzNzg1MTggNS4yMDkzMzUzMyA3NS4xMjAyNTQ1MiBDMTUuMTA5MzM1MzMgNzUuMTIwMjU0NTIgMjUuMDA5MzM1MzMgNzUuMTIwMjU0NTIgMzUuMjA5MzM1MzMgNzUuMTIwMjU0NTIgQzMzLjQxMTgzNzk3IDY5LjEyODU5NjY3IDMxLjYyMDI3MzkyIDYzLjIzNDQ4Mzc4IDI5LjUxMDExNjU4IDU3LjM2MjQ0MjAyIEMyOS4yNzAyMDQ5MyA1Ni42ODg1MTQxIDI5LjAzMDI5MzI3IDU2LjAxNDU4NjE4IDI4Ljc4MzExMTU3IDU1LjMyMDIzNjIxIEMyOC4wMzE2Nzg1NiA1My4yMTEwNzA1NyAyNy4yNzY4MzI1IDUxLjEwMzE0NjU4IDI2LjUyMTgzNTMzIDQ4Ljk5NTI1NDUyIEMyNi4wMDUzMzA1NCA0Ny41NDc0MTk0MyAyNS40ODkwNTI4MSA0Ni4wOTk1MDMzMyAyNC45NzMwMDcyIDQ0LjY1MTUwNDUyIEMyMy43MjEwNjM0NyA0MS4xNDAxNTA4OCAyMi40NjYwNjAxOSAzNy42Mjk5MDAyNSAyMS4yMDkzMzUzMyAzNC4xMjAyNTQ1MiBDMjAuODc5MzM1MzMgMzQuMTIwMjU0NTIgMjAuNTQ5MzM1MzMgMzQuMTIwMjU0NTIgMjAuMjA5MzM1MzMgMzQuMTIwMjU0NTIgWiBNLTAuNzkwNjY0NjcgOTAuMTIwMjU0NTIgQy0xLjQ1MDY2NDY3IDkyLjQzMDI1NDUyIC0yLjExMDY2NDY3IDk0Ljc0MDI1NDUyIC0yLjc5MDY2NDY3IDk3LjEyMDI1NDUyIEMxMi4zODkzMzUzMyA5Ny4xMjAyNTQ1MiAyNy41NjkzMzUzMyA5Ny4xMjAyNTQ1MiA0My4yMDkzMzUzMyA5Ny4xMjAyNTQ1MiBDNDIuNTQ5MzM1MzMgOTQuODEwMjU0NTIgNDEuODg5MzM1MzMgOTIuNTAwMjU0NTIgNDEuMjA5MzM1MzMgOTAuMTIwMjU0NTIgQzI3LjM0OTMzNTMzIDkwLjEyMDI1NDUyIDEzLjQ4OTMzNTMzIDkwLjEyMDI1NDUyIC0wLjc5MDY2NDY3IDkwLjEyMDI1NDUyIFogIiBmaWxsPSIjOUU5RTlFIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMDcuNzkwNjY0NjcyODUxNTYsNDUuODc5NzQ1NDgzMzk4NDQpIi8+Cjwvc3ZnPgo=",
+ menuIconURI:
+ "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI1NiIgaGVpZ2h0PSIyNTYiPgo8cGF0aCBkPSJNMCAwIEMyMi4wMzg1MjY1MiAxOC44MTE1OTg1NiAzNi40NjU3OTMzNCA0MS4wNjM3MzM3NyA0NC4zNTE1NjI1IDY4LjkxMDE1NjI1IEM0NC42OTMxNjQwNiA3MC4wODgzNTkzNyA0NS4wMzQ3NjU2MyA3MS4yNjY1NjI1IDQ1LjM4NjcxODc1IDcyLjQ4MDQ2ODc1IEM1MS41OTA5Mjc1NSA5OC43NDAxNDMyMiA0OC4xMTkzNTU5NyAxMjguNDA3NTUzODkgMzcuMzUxNTYyNSAxNTIuOTEwMTU2MjUgQzM2LjkyNjY1NTI3IDE1My44OTE0NTUwOCAzNi45MjY2NTUyNyAxNTMuODkxNDU1MDggMzYuNDkzMTY0MDYgMTU0Ljg5MjU3ODEyIEMyNi41NTAxNTk0MyAxNzcuNDE1NDA2MzEgOS4zNjgzODI4MiAxOTcuMDgzNzE0NDMgLTExLjY0ODQzNzUgMjA5LjkxMDE1NjI1IEMtMTIuNzIwOTM3NSAyMTAuNTkzMzU5MzggLTEzLjc5MzQzNzUgMjExLjI3NjU2MjUgLTE0Ljg5ODQzNzUgMjExLjk4MDQ2ODc1IEMtNDIuNzU5MjI3OTQgMjI4Ljk0MjAxNDc4IC03OC4yNTA2MTE4OSAyMzMuOTI2NDg1NDUgLTExMC4wMzAyNzM0NCAyMjYuNzQ3MDcwMzEgQy0xMTcuODE5NDE3MjkgMjI0Ljc3NzM2MzU3IC0xMjUuMjk4MDI2MiAyMjIuMTQwMzMxOTUgLTEzMi42NDg0Mzc1IDIxOC45MTAxNTYyNSBDLTEzMy4zMDI2MzY3MiAyMTguNjI2ODg0NzcgLTEzMy45NTY4MzU5NCAyMTguMzQzNjEzMjggLTEzNC42MzA4NTkzOCAyMTguMDUxNzU3ODEgQy0xNjQuNzI1OTMyMzQgMjA0Ljc2NTg4NDE0IC0xODguNDMyNjIzMzkgMTc5LjE4ODU5MzM5IC0yMDAuNTE5NTMxMjUgMTQ4LjcxMzg2NzE5IEMtMjAyLjQ3ODkwMDc3IDE0My41MTUyMTc0MiAtMjA0LjEzNTA4MjUgMTM4LjI1NDE1Mjc0IC0yMDUuNjQ4NDM3NSAxMzIuOTEwMTU2MjUgQy0yMDUuOTkwMDM5MDYgMTMxLjczMTk1MzEyIC0yMDYuMzMxNjQwNjMgMTMwLjU1Mzc1IC0yMDYuNjgzNTkzNzUgMTI5LjMzOTg0Mzc1IEMtMjE0LjIxNzQzOTk4IDk3LjQ1MjQwMTU3IC0yMDcuODM1NTc0NTYgNjEuNDM0NjUxNjEgLTE5MS4wMDc4MTI1IDMzLjYwNTQ2ODc1IEMtMTcyLjcxOTMxMzkzIDQuNTE1NjA4MTggLTE0NS40NzI3MDQ5NSAtMTQuNzk0NDA5MjYgLTExMi42NDg0Mzc1IC0yNC4wODk4NDM3NSBDLTExMS40NzAyMzQzOCAtMjQuNDMxNDQ1MzEgLTExMC4yOTIwMzEyNSAtMjQuNzczMDQ2ODcgLTEwOS4wNzgxMjUgLTI1LjEyNSBDLTcxLjkxMjE2MjA0IC0zMy45MDU5NjkyNyAtMjkuNDM4MzUxODQgLTI0LjE0NjUyMjQyIDAgMCBaIE0tMTU2LjY0ODQzNzUgMzguOTEwMTU2MjUgQy0xNzIuNjc2OTQzNTIgNTguMDg4NzczMjggLTE4MC4zOTY0OTAzOCA4NC41ODg4MzUyMyAtMTc4LjM3MTA5Mzc1IDEwOS4yOTI5Njg3NSBDLTE3NS40NzE3NjMxNSAxMzUuNzQ1OTA4ODUgLTE2Mi45NTU1MTQxMyAxNTkuNTg0NTMzMDggLTE0Mi42NDg0Mzc1IDE3Ni45MTAxNTYyNSBDLTEyNi41NDMxNjcwNSAxODkuNjk5NjM1NzIgLTEwNi4zMjExMTA2MiAxOTguMDkxNzg4ODEgLTg1LjY0ODQzNzUgMTk4LjkxMDE1NjI1IEMtODQuODg5MTc5NjkgMTk4Ljk1MDExNzE5IC04NC4xMjk5MjE4NyAxOTguOTkwMDc4MTIgLTgzLjM0NzY1NjI1IDE5OS4wMzEyNSBDLTU2LjU4MDI3NzA5IDE5OS43NzYwMDUyMyAtMzEuNDM2MTQxNzYgMTg4LjgxNjI3MjU4IC0xMi4wNTQ0NDMzNiAxNzAuNzY1NjI1IEM1LjI3MjM5MDEyIDE1NC4wMTA3MzQ1MiAxNi4zOTQyODMxMyAxMzAuMDkxODY1NjUgMTcuMzUxNTYyNSAxMDUuOTEwMTU2MjUgQzE3LjM5MTUyMzQ0IDEwNS4xNTA4OTg0NCAxNy40MzE0ODQzNyAxMDQuMzkxNjQwNjIgMTcuNDcyNjU2MjUgMTAzLjYwOTM3NSBDMTguMjE3NDExNDggNzYuODQxOTk1ODQgNy4yNTc2Nzg4MyA1MS42OTc4NjA1MSAtMTAuNzkyOTY4NzUgMzIuMzE2MTYyMTEgQy0yNy41NDc4NTkyMyAxNC45ODkzMjg2MyAtNTEuNDY2NzI4MSAzLjg2NzQzNTYyIC03NS42NDg0Mzc1IDIuOTEwMTU2MjUgQy03Ni43ODczMjQyMiAyLjg1MDIxNDg0IC03Ni43ODczMjQyMiAyLjg1MDIxNDg0IC03Ny45NDkyMTg3NSAyLjc4OTA2MjUgQy0xMDguODU5OTYwMDYgMS45MjkwMjU1MSAtMTM2LjI0OTk3Njk4IDE2LjQzMzI0OTk3IC0xNTYuNjQ4NDM3NSAzOC45MTAxNTYyNSBaICIgZmlsbD0iIzlFOUU5RSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjA4LjY0ODQzNzUsMjcuMDg5ODQzNzUpIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuNzc5NDM0NjYgMC4wMDIyMjA2MSAxLjU1ODg2OTMyIDAuMDA0NDQxMjIgMi4zNjE5MjMyMiAwLjAwNjcyOTEzIEMzLjI0Mjc2MDc3IDAuMDA2ODA0NjYgNC4xMjM1OTgzMyAwLjAwNjg4MDE5IDUuMDMxMTI3OTMgMC4wMDY5NTgwMSBDNS45ODg0MTI5MyAwLjAxMjExOTI5IDYuOTQ1Njk3OTQgMC4wMTcyODA1OCA3LjkzMTk5MTU4IDAuMDIyNTk4MjcgQzkuMzk0ODA4MTIgMC4wMjQ3MjA2OSA5LjM5NDgwODEyIDAuMDI0NzIwNjkgMTAuODg3MTc2NTEgMC4wMjY4ODU5OSBDMTQuMDE1NDI2NzUgMC4wMzI1MDMxOSAxNy4xNDM2MDY1NiAwLjA0NTA1ODU5IDIwLjI3MTgzNTMzIDAuMDU3NzU0NTIgQzIyLjM4NzA2ODY3IDAuMDYyNzY3MyAyNC41MDIzMDMxMyAwLjA2NzMzMDU5IDI2LjYxNzUzODQ1IDAuMDcxNDI2MzkgQzMxLjgxNDgyODI5IDAuMDgyNDc4MiAzNy4wMTIwNzY3OCAwLjA5OTIzMzA1IDQyLjIwOTMzNTMzIDAuMTIwMjU0NTIgQzQ0Ljk5MTE0MDUxIDYuMjUxMzU5MTEgNDcuNTc5MTE3NDUgMTIuNDM1MDc1MzMgNTAuMDM3NDYwMzMgMTguNzAyMjg1NzcgQzUwLjM5MDE1OTkxIDE5LjU5NjU0NzcgNTAuNzQyODU5NSAyMC40OTA4MDk2MyA1MS4xMDYyNDY5NSAyMS40MTIxNzA0MSBDNTIuMjI1NzczMjEgMjQuMjUxNjQ4MTQgNTMuMzQyNjgwOCAyNy4wOTIxNDYzOCA1NC40NTkzMzUzMyAyOS45MzI3NTQ1MiBDNTUuNTU3NzAyMTUgMzIuNzIyNDMxMiA1Ni42NTY2Mzk1MiAzNS41MTE4ODE3NCA1Ny43NTYwODgyNiAzOC4zMDExMzIyIEM1OC40ODMyNDk1MSA0MC4xNDY2MDUxNSA1OS4yMDk1NzI4OCA0MS45OTI0MDg0OCA1OS45MzUwNDMzMyA0My44Mzg1NDY3NSBDNjEuNzc4MzM5NjQgNDguNTIyNzUzMjQgNjMuNjQxMjU5NzcgNTMuMTk3NzI3NjUgNjUuNTM5NDEzNDUgNTcuODYwMDAwNjEgQzY1LjkxMTc3MTI0IDU4Ljc3Nzg2ODUgNjYuMjg0MTI5MDMgNTkuNjk1NzM2MzkgNjYuNjY3NzcwMzkgNjAuNjQxNDE4NDYgQzY3LjM3NzQxMTc2IDYyLjM4NzQ1NzM3IDY4LjA5MTI4MzIxIDY0LjEzMTc4NDgzIDY4LjgwOTk4MjMgNjUuODc0MTE0OTkgQzY5LjEyNTc4MjQ3IDY2LjY1MjMyMTAxIDY5LjQ0MTU4MjY0IDY3LjQzMDUyNzA0IDY5Ljc2Njk1MjUxIDY4LjIzMjMxNTA2IEM3MC4wNDY0MTcyNCA2OC45MTMyNzc0NCA3MC4zMjU4ODE5NiA2OS41OTQyMzk4MSA3MC42MTM4MTUzMSA3MC4yOTU4Mzc0IEM3MS4yMDkzMzUzMyA3Mi4xMjAyNTQ1MiA3MS4yMDkzMzUzMyA3Mi4xMjAyNTQ1MiA3MS4yMDkzMzUzMyA3NS4xMjAyNTQ1MiBDNzkuNDU5MzM1MzMgNzUuMTIwMjU0NTIgODcuNzA5MzM1MzMgNzUuMTIwMjU0NTIgOTYuMjA5MzM1MzMgNzUuMTIwMjU0NTIgQzk2LjIwOTMzNTMzIDgwLjA3MDI1NDUyIDk2LjIwOTMzNTMzIDg1LjAyMDI1NDUyIDk2LjIwOTMzNTMzIDkwLjEyMDI1NDUyIEM5MC4yNjkzMzUzMyA5MC4xMjAyNTQ1MiA4NC4zMjkzMzUzMyA5MC4xMjAyNTQ1MiA3OC4yMDkzMzUzMyA5MC4xMjAyNTQ1MiBDNzkuMTk5MzM1MzMgOTMuNTg1MjU0NTIgNzkuMTk5MzM1MzMgOTMuNTg1MjU0NTIgODAuMjA5MzM1MzMgOTcuMTIwMjU0NTIgQzg1LjQ4OTMzNTMzIDk3LjEyMDI1NDUyIDkwLjc2OTMzNTMzIDk3LjEyMDI1NDUyIDk2LjIwOTMzNTMzIDk3LjEyMDI1NDUyIEM5Ni4yMDkzMzUzMyAxMDIuMDcwMjU0NTIgOTYuMjA5MzM1MzMgMTA3LjAyMDI1NDUyIDk2LjIwOTMzNTMzIDExMi4xMjAyNTQ1MiBDOTEuNzU0MzM1MzMgMTEyLjYxNTI1NDUyIDkxLjc1NDMzNTMzIDExMi42MTUyNTQ1MiA4Ny4yMDkzMzUzMyAxMTMuMTIwMjU0NTIgQzg3LjcxNDY0NzgzIDExNC4zODQ4MjQ4MyA4OC4yMTk5NjAzMyAxMTUuNjQ5Mzk1MTQgODguNzQwNTg1MzMgMTE2Ljk1MjI4NTc3IEM4OS4zOTcxMDI1MiAxMTguNjEyMzM2MzcgOTAuMDUzMzM3ODkgMTIwLjI3MjQ5ODQ1IDkwLjcwOTMzNTMzIDEyMS45MzI3NTQ1MiBDOTEuMjEwMTM2MTEgMTIzLjE4MjgyMjg4IDkxLjIxMDEzNjExIDEyMy4xODI4MjI4OCA5MS43MjEwNTQwOCAxMjQuNDU4MTQ1MTQgQzkyLjE5NDc4NDU1IDEyNS42NjE4MDcyNSA5Mi4xOTQ3ODQ1NSAxMjUuNjYxODA3MjUgOTIuNjc4MDg1MzMgMTI2Ljg4OTc4NTc3IEM5Mi45NzEzNDcwNSAxMjcuNjI4MTc2ODggOTMuMjY0NjA4NzYgMTI4LjM2NjU2Nzk5IDkzLjU2Njc1NzIgMTI5LjEyNzMzNDU5IEM5NC4yMDkzMzUzMyAxMzEuMTIwMjU0NTIgOTQuMjA5MzM1MzMgMTMxLjEyMDI1NDUyIDk0LjIwOTMzNTMzIDEzNC4xMjAyNTQ1MiBDODEuOTk5MzM1MzMgMTM0LjEyMDI1NDUyIDY5Ljc4OTMzNTMzIDEzNC4xMjAyNTQ1MiA1Ny4yMDkzMzUzMyAxMzQuMTIwMjU0NTIgQzUyLjIwOTMzNTMzIDEyMi4xMjAyNTQ1MiA1Mi4yMDkzMzUzMyAxMjIuMTIwMjU0NTIgNDkuMjA5MzM1MzMgMTEyLjEyMDI1NDUyIEMzMC4wNjkzMzUzMyAxMTIuMTIwMjU0NTIgMTAuOTI5MzM1MzMgMTEyLjEyMDI1NDUyIC04Ljc5MDY2NDY3IDExMi4xMjAyNTQ1MiBDLTkuNzgwNjY0NjcgMTE1LjQyMDI1NDUyIC0xMC43NzA2NjQ2NyAxMTguNzIwMjU0NTIgLTExLjc5MDY2NDY3IDEyMi4xMjAyNTQ1MiBDLTEzLjQ0MDY2NDY3IDEyNi4wODAyNTQ1MiAtMTUuMDkwNjY0NjcgMTMwLjA0MDI1NDUyIC0xNi43OTA2NjQ2NyAxMzQuMTIwMjU0NTIgQy0yOS4wMDA2NjQ2NyAxMzQuMTIwMjU0NTIgLTQxLjIxMDY2NDY3IDEzNC4xMjAyNTQ1MiAtNTMuNzkwNjY0NjcgMTM0LjEyMDI1NDUyIEMtNTMuMTI2NDQxNjkgMTMwLjc5OTEzOTYgLTUyLjU1MzU4NjExIDEyOC4yMDE5NDI1MyAtNTEuMzgwNTA4NDIgMTI1LjEzMTk3MzI3IEMtNTAuOTc5Mjg3NzIgMTI0LjA3MzMzMDY5IC01MC45NzkyODc3MiAxMjQuMDczMzMwNjkgLTUwLjU2OTk2MTU1IDEyMi45OTMzMDEzOSBDLTUwLjI5MjE2ODU4IDEyMi4yNzIwNzA5MiAtNTAuMDE0Mzc1NjEgMTIxLjU1MDg0MDQ1IC00OS43MjgxNjQ2NyAxMjAuODA3NzU0NTIgQy00OS4zMDU2NzQ0NCAxMTkuNjk2OTA0OTEgLTQ5LjMwNTY3NDQ0IDExOS42OTY5MDQ5MSAtNDguODc0NjQ5MDUgMTE4LjU2MzYxMzg5IEMtNDguMTgzNDc4OTIgMTE2Ljc0NzgyNzk2IC00Ny40ODc1NDc3OSAxMTQuOTMzODU1NTIgLTQ2Ljc5MDY2NDY3IDExMy4xMjAyNTQ1MiBDLTQ5Ljc2MDY2NDY3IDExMi43OTAyNTQ1MiAtNTIuNzMwNjY0NjcgMTEyLjQ2MDI1NDUyIC01NS43OTA2NjQ2NyAxMTIuMTIwMjU0NTIgQy01NS43OTA2NjQ2NyAxMDcuMTcwMjU0NTIgLTU1Ljc5MDY2NDY3IDEwMi4yMjAyNTQ1MiAtNTUuNzkwNjY0NjcgOTcuMTIwMjU0NTIgQy01MC41MTA2NjQ2NyA5Ny4xMjAyNTQ1MiAtNDUuMjMwNjY0NjcgOTcuMTIwMjU0NTIgLTM5Ljc5MDY2NDY3IDk3LjEyMDI1NDUyIEMtMzkuMTMwNjY0NjcgOTQuODEwMjU0NTIgLTM4LjQ3MDY2NDY3IDkyLjUwMDI1NDUyIC0zNy43OTA2NjQ2NyA5MC4xMjAyNTQ1MiBDLTQzLjczMDY2NDY3IDkwLjEyMDI1NDUyIC00OS42NzA2NjQ2NyA5MC4xMjAyNTQ1MiAtNTUuNzkwNjY0NjcgOTAuMTIwMjU0NTIgQy01NS43OTA2NjQ2NyA4NS4xNzAyNTQ1MiAtNTUuNzkwNjY0NjcgODAuMjIwMjU0NTIgLTU1Ljc5MDY2NDY3IDc1LjEyMDI1NDUyIEMtNDcuNTQwNjY0NjcgNzUuMTIwMjU0NTIgLTM5LjI5MDY2NDY3IDc1LjEyMDI1NDUyIC0zMC43OTA2NjQ2NyA3NS4xMjAyNTQ1MiBDLTMwLjQ2MDY2NDY3IDczLjQ3MDI1NDUyIC0zMC4xMzA2NjQ2NyA3MS44MjAyNTQ1MiAtMjkuNzkwNjY0NjcgNzAuMTIwMjU0NTIgQy0yOS4zNTY1NzU4MyA2OC44MTI0MDQ1NiAtMjguODg3MjM5MjEgNjcuNTE1NzA5OTggLTI4LjM4Mjk0OTgzIDY2LjIzMzI5MTYzIEMtMjcuOTU1MjcwNjEgNjUuMTM2NzU1MTQgLTI3Ljk1NTI3MDYxIDY1LjEzNjc1NTE0IC0yNy41MTg5NTE0MiA2NC4wMTgwNjY0MSBDLTI3LjIwOTAwNzQyIDYzLjIzNTgxMTkyIC0yNi44OTkwNjM0MiA2Mi40NTM1NTc0MyAtMjYuNTc5NzI3MTcgNjEuNjQ3NTk4MjcgQy0yNi4wOTMyMzk1MiA2MC40MDUyNzE4NCAtMjYuMDkzMjM5NTIgNjAuNDA1MjcxODQgLTI1LjU5NjkyMzgzIDU5LjEzNzg0NzkgQy0yNC41NDA0OTM5NyA1Ni40NDI4OTc0OSAtMjMuNDc4MjE0MDQgNTMuNzUwMjk3MzYgLTIyLjQxNTY2NDY3IDUxLjA1Nzc1NDUyIEMtMjEuNjg4NjgwNTUgNDkuMjA3NjI3NzYgLTIwLjk2MjAzODM5IDQ3LjM1NzM2NjU5IC0yMC4yMzU3MzMwMyA0NS41MDY5NzMyNyBDLTE4Ljc3OTY4MzY3IDQxLjc5ODk3MzEgLTE3LjMyMTM4MjQ0IDM4LjA5MTg3MDIyIC0xNS44NjE0NjU0NSAzNC4zODUzOTEyNCBDLTE0LjAwMzg3MjU1IDI5LjY2NjY4MzE1IC0xMi4xNTg0NzMxNyAyNC45NDMzMjA2NSAtMTAuMzE4MDA4NDIgMjAuMjE3OTEwNzcgQy05LjgwNjIzMTMyIDE4LjkwNjEwMjQ1IC05LjI5NDM1Mzc3IDE3LjU5NDMzMzMyIC04Ljc4MjM2Mzg5IDE2LjI4MjYwODAzIEMtNy44NDYzMDQ5OSAxMy44ODM5MzcxMSAtNi45MTE2ODAwOCAxMS40ODQ3MDU5NyAtNS45Nzg2NTI5NSA5LjA4NDg1NDEzIEMtNS41NjcyODA4OCA4LjAzNDM0ODc1IC01LjE1NTkwODgxIDYuOTgzODQzMzggLTQuNzMyMDcwOTIgNS45MDE1MDQ1MiBDLTQuMzc4MzAzODMgNC45OTQ2NDkwNSAtNC4wMjQ1MzY3NCA0LjA4Nzc5MzU4IC0zLjY2MDA0OTQ0IDMuMTUzNDU3NjQgQy0yLjM3OTk5Mzk4IDAuMTU5ODMxNzMgLTIuMzc5OTkzOTggMC4xNTk4MzE3MyAwIDAgWiBNMjAuMjA5MzM1MzMgMzQuMTIwMjU0NTIgQzE2LjgxMTU1MDQyIDQxLjQ0MTY3MiAxMy45NzAzMDk5MyA0OC45Mjk2MjIxMiAxMS4yMDc4NzA0OCA1Ni41MDY3MjkxMyBDMTAuNDUxMzgyMzUgNTguNTc5NTQ2MDkgOS42ODgwNjYyNSA2MC42NDk3NjM3OSA4LjkyNDE3OTA4IDYyLjcxOTg2Mzg5IEM4LjQ0MDY5OTkyIDY0LjAzOTM3NjU3IDcuOTU3NjEyMjcgNjUuMzU5MDMyNzggNy40NzQ5NjAzMyA2Ni42Nzg4NDgyNyBDNy4wMzk1Nzk0NyA2Ny44Njc5Mjc4NiA2LjYwNDE5ODYxIDY5LjA1NzAwNzQ1IDYuMTU1NjI0MzkgNzAuMjgyMTE5NzUgQzUuMTAzOTAxNTkgNzIuOTM3ODUxOCA1LjEwMzkwMTU5IDcyLjkzNzg1MTggNS4yMDkzMzUzMyA3NS4xMjAyNTQ1MiBDMTUuMTA5MzM1MzMgNzUuMTIwMjU0NTIgMjUuMDA5MzM1MzMgNzUuMTIwMjU0NTIgMzUuMjA5MzM1MzMgNzUuMTIwMjU0NTIgQzMzLjQxMTgzNzk3IDY5LjEyODU5NjY3IDMxLjYyMDI3MzkyIDYzLjIzNDQ4Mzc4IDI5LjUxMDExNjU4IDU3LjM2MjQ0MjAyIEMyOS4yNzAyMDQ5MyA1Ni42ODg1MTQxIDI5LjAzMDI5MzI3IDU2LjAxNDU4NjE4IDI4Ljc4MzExMTU3IDU1LjMyMDIzNjIxIEMyOC4wMzE2Nzg1NiA1My4yMTEwNzA1NyAyNy4yNzY4MzI1IDUxLjEwMzE0NjU4IDI2LjUyMTgzNTMzIDQ4Ljk5NTI1NDUyIEMyNi4wMDUzMzA1NCA0Ny41NDc0MTk0MyAyNS40ODkwNTI4MSA0Ni4wOTk1MDMzMyAyNC45NzMwMDcyIDQ0LjY1MTUwNDUyIEMyMy43MjEwNjM0NyA0MS4xNDAxNTA4OCAyMi40NjYwNjAxOSAzNy42Mjk5MDAyNSAyMS4yMDkzMzUzMyAzNC4xMjAyNTQ1MiBDMjAuODc5MzM1MzMgMzQuMTIwMjU0NTIgMjAuNTQ5MzM1MzMgMzQuMTIwMjU0NTIgMjAuMjA5MzM1MzMgMzQuMTIwMjU0NTIgWiBNLTAuNzkwNjY0NjcgOTAuMTIwMjU0NTIgQy0xLjQ1MDY2NDY3IDkyLjQzMDI1NDUyIC0yLjExMDY2NDY3IDk0Ljc0MDI1NDUyIC0yLjc5MDY2NDY3IDk3LjEyMDI1NDUyIEMxMi4zODkzMzUzMyA5Ny4xMjAyNTQ1MiAyNy41NjkzMzUzMyA5Ny4xMjAyNTQ1MiA0My4yMDkzMzUzMyA5Ny4xMjAyNTQ1MiBDNDIuNTQ5MzM1MzMgOTQuODEwMjU0NTIgNDEuODg5MzM1MzMgOTIuNTAwMjU0NTIgNDEuMjA5MzM1MzMgOTAuMTIwMjU0NTIgQzI3LjM0OTMzNTMzIDkwLjEyMDI1NDUyIDEzLjQ4OTMzNTMzIDkwLjEyMDI1NDUyIC0wLjc5MDY2NDY3IDkwLjEyMDI1NDUyIFogIiBmaWxsPSIjOUU5RTlFIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMDcuNzkwNjY0NjcyODUxNTYsNDUuODc5NzQ1NDgzMzk4NDQpIi8+Cjwvc3ZnPgo=",
+ color1: "#FFAB19",
+ color2: "#FF8C00",
+ color3: "#E76F00",
+ blocks: [
+ {
+ opcode: "login",
+ text: Scratch.translate({
+ id: "oauthExtension.login",
+ default: "Log in with [SERVICE]",
+ }),
+ blockType: Scratch.BlockType.COMMAND,
+ arguments: {
+ SERVICE: { type: Scratch.ArgumentType.STRING, menu: "SERVICE" },
+ },
+ },
+ {
+ opcode: "isLoggedIn",
+ text: Scratch.translate({
+ id: "oauthExtension.isLoggedIn",
+ default: "Is user logged in with [SERVICE]?",
+ }),
+ blockType: Scratch.BlockType.BOOLEAN,
+ arguments: {
+ SERVICE: { type: Scratch.ArgumentType.STRING, menu: "SERVICE" },
+ },
+ },
+ {
+ opcode: "setClientId",
+ text: Scratch.translate({
+ id: "oauthExtension.setClientId",
+ default: "Set client ID for [SERVICE] to [CLIENT_ID]",
+ }),
+ blockType: Scratch.BlockType.COMMAND,
+ arguments: {
+ SERVICE: { type: Scratch.ArgumentType.STRING, menu: "SERVICE" },
+ CLIENT_ID: {
+ type: Scratch.ArgumentType.STRING,
+ defaultValue: "",
+ },
+ },
+ },
+ {
+ opcode: "setClientSecret",
+ text: Scratch.translate({
+ id: "oauthExtension.setClientSecret",
+ default: "Set client secret for [SERVICE] to [CLIENT_SECRET]",
+ }),
+ blockType: Scratch.BlockType.COMMAND,
+ arguments: {
+ SERVICE: { type: Scratch.ArgumentType.STRING, menu: "SERVICE" },
+ CLIENT_SECRET: {
+ type: Scratch.ArgumentType.STRING,
+ defaultValue: "",
+ },
+ },
+ },
+ {
+ opcode: "setRedirectUri",
+ text: Scratch.translate({
+ id: "oauthExtension.setRedirectUri",
+ default: "Set redirect URI for [SERVICE] to [REDIRECT_URI]",
+ }),
+ blockType: Scratch.BlockType.COMMAND,
+ arguments: {
+ SERVICE: { type: Scratch.ArgumentType.STRING, menu: "SERVICE" },
+ REDIRECT_URI: {
+ type: Scratch.ArgumentType.STRING,
+ defaultValue: "",
+ },
+ },
+ },
+ ],
+ menus: {
+ SERVICE: {
+ items: [
+ { text: "Google", value: "google" },
+ { text: "Microsoft", value: "microsoft" },
+ { text: "Discord", value: "discord" },
+ { text: "Twitter", value: "twitter" },
+ { text: "GitHub", value: "github" },
+ { text: "Facebook", value: "facebook" },
+ { text: "LinkedIn", value: "linkedin" },
+ { text: "Spotify", value: "spotify" },
+ ],
+ },
+ },
+ };
+ }
- setClientId(args) {
- const service = args.SERVICE;
- this.clients[service].clientId = args.CLIENT_ID;
- }
+ setClientId(args) {
+ const service = args.SERVICE;
+ this.clients[service].clientId = args.CLIENT_ID;
+ }
- setClientSecret(args) {
- const service = args.SERVICE;
- this.clients[service].clientSecret = args.CLIENT_SECRET;
- }
+ setClientSecret(args) {
+ const service = args.SERVICE;
+ this.clients[service].clientSecret = args.CLIENT_SECRET;
+ }
- setRedirectUri(args) {
- const service = args.SERVICE;
- this.clients[service].redirectUri = args.REDIRECT_URI;
- }
+ setRedirectUri(args) {
+ const service = args.SERVICE;
+ this.clients[service].redirectUri = args.REDIRECT_URI;
+ }
- login(args) {
- const service = args.SERVICE;
- const client = this.clients[service];
- const authUrl = `${client.authUrl}?response_type=code&client_id=${client.clientId}&redirect_uri=${client.redirectUri}&scope=${encodeURIComponent(client.scope)}`;
+ login(args) {
+ const service = args.SERVICE;
+ const client = this.clients[service];
+ const authUrl = `${client.authUrl}?response_type=code&client_id=${client.clientId}&redirect_uri=${client.redirectUri}&scope=${encodeURIComponent(client.scope)}`;
- // Open a new tab for the user to authorize the app
- Scratch.openWindow(authUrl, "_blank");
+ // Open a new tab for the user to authorize the app
+ Scratch.openWindow(authUrl, "_blank");
- // Listen for message with authorization code (assuming your app handles this securely)
- window.addEventListener("message", async (event) => {
- if (event.origin !== window.location.origin) return;
+ // Listen for message with authorization code (assuming your app handles this securely)
+ window.addEventListener(
+ "message",
+ async (event) => {
+ if (event.origin !== window.location.origin) return;
- const authorizationCode = event.data.code;
+ const authorizationCode = event.data.code;
- // Ensure there is an await expression
- const tokenResponse = await Scratch.fetch(client.tokenUrl, {
- method: "POST",
- headers: {
- "Content-Type": "application/x-www-form-urlencoded",
- },
- body: `code=${authorizationCode}&client_id=${client.clientId}&client_secret=${client.clientSecret}&redirect_uri=${client.redirectUri}&grant_type=authorization_code`,
- });
+ // Ensure there is an await expression
+ const tokenResponse = await Scratch.fetch(client.tokenUrl, {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/x-www-form-urlencoded",
+ },
+ body: `code=${authorizationCode}&client_id=${client.clientId}&client_secret=${client.clientSecret}&redirect_uri=${client.redirectUri}&grant_type=authorization_code`,
+ });
- const tokens = await tokenResponse.json();
- this.tokens[service] = tokens;
- }, { once: true });
- }
+ const tokens = await tokenResponse.json();
+ this.tokens[service] = tokens;
+ },
+ { once: true }
+ );
+ }
- isLoggedIn(args) {
- const service = args.SERVICE;
- return !!this.tokens[service];
- }
+ isLoggedIn(args) {
+ const service = args.SERVICE;
+ return !!this.tokens[service];
}
+ }
- Scratch.extensions.register(new OAuthExtension());
+ Scratch.extensions.register(new OAuthExtension());
})(Scratch);