gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-wallet-core] branch master updated (a165afa6 -> 451dd746)


From: gnunet
Subject: [taler-wallet-core] branch master updated (a165afa6 -> 451dd746)
Date: Wed, 27 Apr 2022 19:34:04 +0200

This is an automated email from the git hooks/post-receive script.

sebasjm pushed a change to branch master
in repository wallet-core.

    from a165afa6 wallet-core: implement age restriction support
     new 0b8e0a08 update taler logo
     new 451dd746 toggle permission

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../taler-wallet-webextension/manifest-v2.json     |  21 +-
 .../taler-wallet-webextension/manifest-v3.json     |  21 +-
 .../src/components/DebugCheckbox.tsx               |  63 ---
 .../src/cta/Withdraw.stories.tsx                   |   7 +
 .../taler-wallet-webextension/src/cta/Withdraw.tsx | 113 +++--
 .../src/hooks/useExtendedPermissions.ts            |  37 +-
 .../taler-wallet-webextension/src/mui/handlers.ts  |   5 +
 .../taler-wallet-webextension/src/permissions.ts   |  21 -
 .../taler-wallet-webextension/src/platform/api.ts  |  10 +-
 .../src/platform/chrome.ts                         |  66 ++-
 .../taler-wallet-webextension/src/platform/dev.ts  |   3 +-
 .../src/platform/firefox.ts                        |   8 +-
 .../taler-wallet-webextension/src/stories.test.ts  |  13 +-
 .../src/svg/taler-logo-2021-plain.svg              |  44 ++
 .../src/wallet/Settings.stories.tsx                |   7 +-
 .../src/wallet/Settings.tsx                        |  23 +-
 .../src/wallet/Welcome.stories.tsx                 |   6 +-
 .../src/wallet/Welcome.tsx                         |  16 +-
 packages/taler-wallet-webextension/src/wxApi.ts    |   8 +-
 .../taler-wallet-webextension/src/wxBackend.ts     |   9 +-
 .../static/img/logo-2015-medium.png                | Bin 65674 -> 0 bytes
 .../taler-wallet-webextension/static/img/logo.png  |   1 -
 .../static/img/taler-logo-128.png                  | Bin 0 -> 8941 bytes
 .../static/img/taler-logo-16.png                   | Bin 0 -> 751 bytes
 .../static/img/taler-logo-19.png                   | Bin 0 -> 944 bytes
 .../static/img/taler-logo-2022.svg                 | 468 +++++++++++++++++++++
 .../static/img/taler-logo-256.png                  | Bin 0 -> 18664 bytes
 .../static/img/taler-logo-32.png                   | Bin 0 -> 1755 bytes
 .../static/img/taler-logo-38.png                   | Bin 0 -> 2088 bytes
 .../static/img/taler-logo-48.png                   | Bin 0 -> 2790 bytes
 .../static/img/taler-logo-512.png                  | Bin 0 -> 39994 bytes
 .../static/img/taler-logo-64.png                   | Bin 0 -> 4138 bytes
 32 files changed, 771 insertions(+), 199 deletions(-)
 delete mode 100644 
packages/taler-wallet-webextension/src/components/DebugCheckbox.tsx
 delete mode 100644 packages/taler-wallet-webextension/src/permissions.ts
 create mode 100644 
packages/taler-wallet-webextension/src/svg/taler-logo-2021-plain.svg
 delete mode 100644 
packages/taler-wallet-webextension/static/img/logo-2015-medium.png
 delete mode 120000 packages/taler-wallet-webextension/static/img/logo.png
 create mode 100644 
packages/taler-wallet-webextension/static/img/taler-logo-128.png
 create mode 100644 
packages/taler-wallet-webextension/static/img/taler-logo-16.png
 create mode 100644 
packages/taler-wallet-webextension/static/img/taler-logo-19.png
 create mode 100644 
packages/taler-wallet-webextension/static/img/taler-logo-2022.svg
 create mode 100644 
packages/taler-wallet-webextension/static/img/taler-logo-256.png
 create mode 100644 
packages/taler-wallet-webextension/static/img/taler-logo-32.png
 create mode 100644 
packages/taler-wallet-webextension/static/img/taler-logo-38.png
 create mode 100644 
packages/taler-wallet-webextension/static/img/taler-logo-48.png
 create mode 100644 
packages/taler-wallet-webextension/static/img/taler-logo-512.png
 create mode 100644 
packages/taler-wallet-webextension/static/img/taler-logo-64.png

diff --git a/packages/taler-wallet-webextension/manifest-v2.json 
b/packages/taler-wallet-webextension/manifest-v2.json
index f98f70e6..9ea4ff03 100644
--- a/packages/taler-wallet-webextension/manifest-v2.json
+++ b/packages/taler-wallet-webextension/manifest-v2.json
@@ -14,8 +14,15 @@
     }
   },
   "icons": {
-    "32": "static/img/icon.png",
-    "128": "static/img/logo.png"
+    "16": "static/img/taler-logo-16.png",
+    "19": "static/img/taler-logo-19.png",
+    "32": "static/img/taler-logo-32.png",
+    "38": "static/img/taler-logo-38.png",
+    "48": "static/img/taler-logo-48.png",
+    "64": "static/img/taler-logo-64.png",
+    "128": "static/img/taler-logo-128.png",
+    "256": "static/img/taler-logo-256.png",
+    "512": "static/img/taler-logo-512.png"
   },
   "commands": {
     "_execute_browser_action": {
@@ -33,7 +40,15 @@
   ],
   "browser_action": {
     "default_icon": {
-      "32": "static/img/icon.png"
+      "16": "static/img/taler-logo-16.png",
+      "19": "static/img/taler-logo-19.png",
+      "32": "static/img/taler-logo-32.png",
+      "38": "static/img/taler-logo-38.png",
+      "48": "static/img/taler-logo-48.png",
+      "64": "static/img/taler-logo-64.png",
+      "128": "static/img/taler-logo-128.png",
+      "256": "static/img/taler-logo-256.png",
+      "512": "static/img/taler-logo-512.png"
     },
     "default_title": "GNU Taler Wallet",
     "default_popup": "static/popup.html"
diff --git a/packages/taler-wallet-webextension/manifest-v3.json 
b/packages/taler-wallet-webextension/manifest-v3.json
index a8f043b3..5e94466e 100644
--- a/packages/taler-wallet-webextension/manifest-v3.json
+++ b/packages/taler-wallet-webextension/manifest-v3.json
@@ -7,8 +7,15 @@
   "version_name": "0.9.0-dev.9",
   "minimum_chrome_version": "88",
   "icons": {
-    "32": "static/img/icon.png",
-    "128": "static/img/logo.png"
+    "16": "static/img/taler-logo-16.png",
+    "19": "static/img/taler-logo-19.png",
+    "32": "static/img/taler-logo-32.png",
+    "38": "static/img/taler-logo-38.png",
+    "48": "static/img/taler-logo-48.png",
+    "64": "static/img/taler-logo-64.png",
+    "128": "static/img/taler-logo-128.png",
+    "256": "static/img/taler-logo-256.png",
+    "512": "static/img/taler-logo-512.png"
   },
   "permissions": [
     "unlimitedStorage",
@@ -30,7 +37,15 @@
   ],
   "action": {
     "default_icon": {
-      "32": "static/img/icon.png"
+      "16": "static/img/taler-logo-16.png",
+      "19": "static/img/taler-logo-19.png",
+      "32": "static/img/taler-logo-32.png",
+      "38": "static/img/taler-logo-38.png",
+      "48": "static/img/taler-logo-48.png",
+      "64": "static/img/taler-logo-64.png",
+      "128": "static/img/taler-logo-128.png",
+      "256": "static/img/taler-logo-256.png",
+      "512": "static/img/taler-logo-512.png"
     },
     "default_title": "GNU Taler Wallet",
     "default_popup": "static/popup.html"
diff --git 
a/packages/taler-wallet-webextension/src/components/DebugCheckbox.tsx 
b/packages/taler-wallet-webextension/src/components/DebugCheckbox.tsx
deleted file mode 100644
index 8d431f68..00000000
--- a/packages/taler-wallet-webextension/src/components/DebugCheckbox.tsx
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- This file is part of TALER
- (C) 2016 GNUnet e.V.
-
- TALER is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- TALER; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
- */
-
-import { h, VNode } from "preact";
-import { useTranslationContext } from "../context/translation.js";
-
-export function DebugCheckbox({
-  enabled,
-  onToggle,
-}: {
-  enabled: boolean;
-  onToggle: () => void;
-}): VNode {
-  const { i18n } = useTranslationContext();
-
-  return (
-    <div>
-      <input
-        checked={enabled}
-        onClick={onToggle}
-        type="checkbox"
-        id="checkbox-perm"
-        style={{ width: "1.5em", height: "1.5em", verticalAlign: "middle" }}
-      />
-      <label
-        htmlFor="checkbox-perm"
-        style={{ marginLeft: "0.5em", fontWeight: "bold" }}
-      >
-        <i18n.Translate>
-          Automatically open wallet based on page content
-        </i18n.Translate>
-      </label>
-      <span
-        style={{
-          color: "#383838",
-          fontSize: "smaller",
-          display: "block",
-          marginLeft: "2em",
-        }}
-      >
-        (
-        <i18n.Translate>
-          Enabling this option below will make using the wallet faster, but
-          requires more permissions from your browser.
-        </i18n.Translate>
-        )
-      </span>
-    </div>
-  );
-}
diff --git a/packages/taler-wallet-webextension/src/cta/Withdraw.stories.tsx 
b/packages/taler-wallet-webextension/src/cta/Withdraw.stories.tsx
index f2bc14f7..b77e98a1 100644
--- a/packages/taler-wallet-webextension/src/cta/Withdraw.stories.tsx
+++ b/packages/taler-wallet-webextension/src/cta/Withdraw.stories.tsx
@@ -229,3 +229,10 @@ export const EditExchangeModified = 
createExample(TestedComponent, {
     tosProps: normalTosState,
   },
 });
+
+export const CompletedWithoutBankURL = createExample(TestedComponent, {
+  state: {
+    status: "completed",
+    hook: undefined,
+  },
+});
diff --git a/packages/taler-wallet-webextension/src/cta/Withdraw.tsx 
b/packages/taler-wallet-webextension/src/cta/Withdraw.tsx
index 3346512f..cd0ba2cc 100644
--- a/packages/taler-wallet-webextension/src/cta/Withdraw.tsx
+++ b/packages/taler-wallet-webextension/src/cta/Withdraw.tsx
@@ -37,6 +37,7 @@ import {
   ButtonWarning,
   LinkSuccess,
   SubTitle,
+  SuccessBox,
   WalletAction,
 } from "../components/styled/index.js";
 import { useTranslationContext } from "../context/translation.js";
@@ -53,7 +54,12 @@ interface Props {
   talerWithdrawUri?: string;
 }
 
-type State = LoadingUri | LoadingExchange | LoadingInfoError | Success;
+type State =
+  | LoadingUri
+  | LoadingExchange
+  | LoadingInfoError
+  | Success
+  | Completed;
 
 interface LoadingUri {
   status: "loading-uri";
@@ -68,6 +74,11 @@ interface LoadingInfoError {
   hook: HookError | undefined;
 }
 
+type Completed = {
+  status: "completed";
+  hook: undefined;
+};
+
 type Success = {
   status: "success";
   hook: undefined;
@@ -185,6 +196,7 @@ export function useComponentState(
     undefined,
   );
   const [doingWithdraw, setDoingWithdraw] = useState<boolean>(false);
+  const [withdrawCompleted, setWithdrawCompleted] = useState<boolean>(false);
 
   const [showExchangeSelection, setShowExchangeSelection] = useState(false);
   const [nextExchange, setNextExchange] = useState<string | undefined>();
@@ -220,6 +232,7 @@ export function useComponentState(
       if (res.confirmTransferUrl) {
         document.location.href = res.confirmTransferUrl;
       }
+      setWithdrawCompleted(true);
     } catch (e) {
       if (e instanceof TalerError) {
         setWithdrawError(e);
@@ -245,6 +258,12 @@ export function useComponentState(
       hook: undefined,
     };
   }
+  if (withdrawCompleted) {
+    return {
+      status: "completed",
+      hook: undefined,
+    };
+  }
 
   const exchangeHandler: SelectFieldHandler = {
     onChange: async (e) => setNextExchange(e),
@@ -332,8 +351,64 @@ export function useComponentState(
   };
 }
 
-export function View({ state }: { state: Success }): VNode {
+export function View({ state }: { state: State }): VNode {
   const { i18n } = useTranslationContext();
+  if (state.status === "loading-uri") {
+    if (!state.hook) return <Loading />;
+
+    return (
+      <LoadingError
+        title={
+          <i18n.Translate>Could not get the info from the URI</i18n.Translate>
+        }
+        error={state.hook}
+      />
+    );
+  }
+  if (state.status === "loading-exchange") {
+    if (!state.hook) return <Loading />;
+
+    return (
+      <LoadingError
+        title={<i18n.Translate>Could not get exchange</i18n.Translate>}
+        error={state.hook}
+      />
+    );
+  }
+  if (state.status === "loading-info") {
+    if (!state.hook) return <Loading />;
+    return (
+      <LoadingError
+        title={
+          <i18n.Translate>Could not get info of withdrawal</i18n.Translate>
+        }
+        error={state.hook}
+      />
+    );
+  }
+
+  if (state.status === "completed") {
+    return (
+      <WalletAction>
+        <LogoHeader />
+        <SubTitle>
+          <i18n.Translate>Digital cash withdrawal</i18n.Translate>
+        </SubTitle>
+        <SuccessBox>
+          <h3>
+            <i18n.Translate>Withdrawal in process...</i18n.Translate>
+          </h3>
+          <p>
+            <i18n.Translate>
+              You can close the page now. Check your bank if the transaction
+              need a confirmation step to be completed
+            </i18n.Translate>
+          </p>
+        </SuccessBox>
+      </WalletAction>
+    );
+  }
+
   return (
     <WalletAction>
       <LogoHeader />
@@ -460,39 +535,5 @@ export function WithdrawPage({ talerWithdrawUri }: Props): 
VNode {
     return <Loading />;
   }
 
-  if (state.status === "loading-uri") {
-    if (!state.hook) return <Loading />;
-
-    return (
-      <LoadingError
-        title={
-          <i18n.Translate>Could not get the info from the URI</i18n.Translate>
-        }
-        error={state.hook}
-      />
-    );
-  }
-  if (state.status === "loading-exchange") {
-    if (!state.hook) return <Loading />;
-
-    return (
-      <LoadingError
-        title={<i18n.Translate>Could not get exchange</i18n.Translate>}
-        error={state.hook}
-      />
-    );
-  }
-  if (state.status === "loading-info") {
-    if (!state.hook) return <Loading />;
-    return (
-      <LoadingError
-        title={
-          <i18n.Translate>Could not get info of withdrawal</i18n.Translate>
-        }
-        error={state.hook}
-      />
-    );
-  }
-
   return <View state={state} />;
 }
diff --git 
a/packages/taler-wallet-webextension/src/hooks/useExtendedPermissions.ts 
b/packages/taler-wallet-webextension/src/hooks/useExtendedPermissions.ts
index 18283995..e3ea56d1 100644
--- a/packages/taler-wallet-webextension/src/hooks/useExtendedPermissions.ts
+++ b/packages/taler-wallet-webextension/src/hooks/useExtendedPermissions.ts
@@ -17,23 +17,32 @@
 import { useState, useEffect } from "preact/hooks";
 import * as wxApi from "../wxApi.js";
 import { platform } from "../platform/api.js";
-import { getReadRequestPermissions } from "../permissions.js";
+import { ToggleHandler } from "../mui/handlers.js";
+import { TalerError } from "@gnu-taler/taler-wallet-core";
 
-export function useExtendedPermissions(): [boolean, () => Promise<void>] {
+export function useExtendedPermissions(): ToggleHandler {
   const [enabled, setEnabled] = useState(false);
-
+  const [error, setError] = useState<TalerError | undefined>();
   const toggle = async (): Promise<void> => {
-    return handleExtendedPerm(enabled, setEnabled)
+    return handleExtendedPerm(enabled, setEnabled).catch(e => {
+      setError(TalerError.fromException(e))
+    })
   };
 
   useEffect(() => {
     async function getExtendedPermValue(): Promise<void> {
-      const res = await wxApi.getExtendedPermissions();
+      const res = await wxApi.containsHeaderListener();
       setEnabled(res.newValue);
     }
     getExtendedPermValue();
   }, []);
-  return [enabled, toggle];
+  return {
+    value: enabled,
+    button: {
+      onClick: toggle,
+      error
+    }
+  };
 }
 
 async function handleExtendedPerm(isEnabled: boolean, onChange: (value: 
boolean) => void): Promise<void> {
@@ -42,18 +51,20 @@ async function handleExtendedPerm(isEnabled: boolean, 
onChange: (value: boolean)
     // as the result of an input event ...
     let granted: boolean;
     try {
-      granted = await 
platform.getPermissionsApi().request(getReadRequestPermissions());
+      granted = await platform.getPermissionsApi().requestHostPermissions();
     } catch (lastError) {
-      console.error("error requesting permissions");
-      console.error(lastError);
       onChange(false);
-      return
+      throw lastError;
     }
-    console.log("permissions granted:", granted);
-    const res = await wxApi.setExtendedPermissions(granted);
+    const res = await wxApi.toggleHeaderListener(granted);
     onChange(res.newValue);
   } else {
-    await wxApi.setExtendedPermissions(false).then(r => onChange(r.newValue));
+    try {
+      await wxApi.toggleHeaderListener(false).then(r => onChange(r.newValue));
+    } catch (e) {
+      console.log(e)
+    }
+
   }
   return
 }
diff --git a/packages/taler-wallet-webextension/src/mui/handlers.ts 
b/packages/taler-wallet-webextension/src/mui/handlers.ts
index f75070c9..60cfee42 100644
--- a/packages/taler-wallet-webextension/src/mui/handlers.ts
+++ b/packages/taler-wallet-webextension/src/mui/handlers.ts
@@ -11,6 +11,11 @@ export interface ButtonHandler {
   error?: TalerError;
 }
 
+export interface ToggleHandler {
+  value?: boolean;
+  button: ButtonHandler;
+}
+
 export interface SelectFieldHandler {
   onChange: (value: string) => Promise<void>;
   error?: string;
diff --git a/packages/taler-wallet-webextension/src/permissions.ts 
b/packages/taler-wallet-webextension/src/permissions.ts
deleted file mode 100644
index ea714244..00000000
--- a/packages/taler-wallet-webextension/src/permissions.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- This file is part of GNU Taler
- (C) 2020 Taler Systems S.A.
-
- GNU Taler is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
- */
-
-const perms = {
-  permissions: ["webRequest"],
-  origins: ["http://*/*";, "https://*/*";],
-}
-export const getReadRequestPermissions = (): typeof perms => perms
\ No newline at end of file
diff --git a/packages/taler-wallet-webextension/src/platform/api.ts 
b/packages/taler-wallet-webextension/src/platform/api.ts
index 65bc3654..cee628a6 100644
--- a/packages/taler-wallet-webextension/src/platform/api.ts
+++ b/packages/taler-wallet-webextension/src/platform/api.ts
@@ -34,9 +34,9 @@ export interface Permissions {
  * Compatibility API that works on multiple browsers.
  */
 export interface CrossBrowserPermissionsApi {
-  contains(p: Permissions): Promise<boolean>;
-  request(p: Permissions): Promise<boolean>;
-  remove(p: Permissions): Promise<boolean>;
+  containsHostPermissions(): Promise<boolean>;
+  requestHostPermissions(): Promise<boolean>;
+  removeHostPermissions(): Promise<boolean>;
 
   addPermissionsListener(callback: (p: Permissions, lastError?: string) => 
void): void;
 
@@ -131,6 +131,10 @@ export interface PlatformAPI {
    * Backend API
    */
   registerTalerHeaderListener(onHeader: (tabId: number, url: string) => void): 
void;
+  /**
+   * Frontend API
+   */
+  containsTalerHeaderListener(): boolean;
   /**
    * Backend API
    */
diff --git a/packages/taler-wallet-webextension/src/platform/chrome.ts 
b/packages/taler-wallet-webextension/src/platform/chrome.ts
index d1f4585d..d295168b 100644
--- a/packages/taler-wallet-webextension/src/platform/chrome.ts
+++ b/packages/taler-wallet-webextension/src/platform/chrome.ts
@@ -16,7 +16,6 @@
  */
 
 import { classifyTalerUri, CoreApiResponse, TalerUriType } from 
"@gnu-taler/taler-util";
-import { getReadRequestPermissions } from "../permissions.js";
 import { CrossBrowserPermissionsApi, MessageFromBackend, Permissions, 
PlatformAPI } from "./api.js";
 
 const api: PlatformAPI = {
@@ -37,7 +36,8 @@ const api: PlatformAPI = {
   registerTalerHeaderListener,
   sendMessageToAllChannels,
   sendMessageToWalletBackground,
-  useServiceWorkerAsBackgroundProcess
+  useServiceWorkerAsBackgroundProcess,
+  containsTalerHeaderListener,
 }
 
 export default api;
@@ -46,9 +46,15 @@ function isFirefox(): boolean {
   return false;
 }
 
-export function contains(p: Permissions): Promise<boolean> {
+const hostPermissions = {
+  permissions: ["webRequest"],
+  origins: ["http://*/*";, "https://*/*";],
+}
+
+
+export function containsHostPermissions(): Promise<boolean> {
   return new Promise((res, rej) => {
-    chrome.permissions.contains(p, (resp) => {
+    chrome.permissions.contains(hostPermissions, (resp) => {
       const le = chrome.runtime.lastError?.message
       if (le) {
         rej(le)
@@ -58,9 +64,9 @@ export function contains(p: Permissions): Promise<boolean> {
   })
 }
 
-export async function request(p: Permissions): Promise<boolean> {
+export async function requestHostPermissions(): Promise<boolean> {
   return new Promise((res, rej) => {
-    chrome.permissions.request(p, (resp) => {
+    chrome.permissions.request(hostPermissions, (resp) => {
       const le = chrome.runtime.lastError?.message
       if (le) {
         rej(le)
@@ -70,9 +76,41 @@ export async function request(p: Permissions): 
Promise<boolean> {
   })
 }
 
-export async function remove(p: Permissions): Promise<boolean> {
+type HeaderListenerFunc = (details: 
chrome.webRequest.WebResponseHeadersDetails) => void
+let currentHeaderListener: HeaderListenerFunc | undefined = undefined;
+
+export function containsTalerHeaderListener(): boolean {
+  return currentHeaderListener !== undefined;
+}
+
+export async function removeHostPermissions(): Promise<boolean> {
+  //if there is a handler already, remove it
+  if (
+    "webRequest" in chrome &&
+    "onHeadersReceived" in chrome.webRequest &&
+    currentHeaderListener &&
+    chrome.webRequest.onHeadersReceived.hasListener(currentHeaderListener)
+  ) {
+    chrome.webRequest.onHeadersReceived.removeListener(currentHeaderListener);
+  }
+
+  currentHeaderListener = undefined;
+
+  //notify the browser about this change, this operation is expensive
+  if ("webRequest" in chrome) {
+    chrome.webRequest.handlerBehaviorChanged(() => {
+      if (chrome.runtime.lastError) {
+        console.error(JSON.stringify(chrome.runtime.lastError));
+      }
+    });
+  }
+
+  if (chrome.runtime && chrome.runtime.getManifest().manifest_version === 3) {
+    // Trying to remove host permissions with manifest >= v3 throws an error
+    return true;
+  }
   return new Promise((res, rej) => {
-    chrome.permissions.remove(p, (resp) => {
+    chrome.permissions.remove(hostPermissions, (resp) => {
       const le = chrome.runtime.lastError?.message
       if (le) {
         rej(le)
@@ -92,7 +130,7 @@ function addPermissionsListener(callback: (p: Permissions, 
lastError?: string) =
 
 function getPermissionsApi(): CrossBrowserPermissionsApi {
   return {
-    addPermissionsListener, contains, request, remove
+    addPermissionsListener, containsHostPermissions, requestHostPermissions, 
removeHostPermissions
   }
 }
 
@@ -245,7 +283,6 @@ function getWalletVersion(): WalletVersion {
   return manifestData;
 }
 
-
 function registerTalerHeaderListener(callback: (tabId: number, url: string) => 
void): void {
   console.log("setting up header listener");
 
@@ -271,15 +308,18 @@ function registerTalerHeaderListener(callback: (tabId: 
number, url: string) => v
     }
     return;
   }
+  const prevHeaderListener = currentHeaderListener;
+  currentHeaderListener = headerListener;
 
-  getPermissionsApi().contains(getReadRequestPermissions()).then(result => {
+  getPermissionsApi().containsHostPermissions().then(result => {
     //if there is a handler already, remove it
     if (
       "webRequest" in chrome &&
       "onHeadersReceived" in chrome.webRequest &&
-      chrome.webRequest.onHeadersReceived.hasListener(headerListener)
+      prevHeaderListener &&
+      chrome.webRequest.onHeadersReceived.hasListener(prevHeaderListener)
     ) {
-      chrome.webRequest.onHeadersReceived.removeListener(headerListener);
+      chrome.webRequest.onHeadersReceived.removeListener(prevHeaderListener);
     }
     //if the result was positive, add the headerListener
     if (result) {
diff --git a/packages/taler-wallet-webextension/src/platform/dev.ts 
b/packages/taler-wallet-webextension/src/platform/dev.ts
index 38fcf29f..e05ff29e 100644
--- a/packages/taler-wallet-webextension/src/platform/dev.ts
+++ b/packages/taler-wallet-webextension/src/platform/dev.ts
@@ -22,8 +22,9 @@ const frames = ["popup", "wallet"]
 const api: PlatformAPI = ({
   isFirefox: () => false,
   findTalerUriInActiveTab: async () => undefined,
+  containsTalerHeaderListener: () => { return true },
   getPermissionsApi: () => ({
-    addPermissionsListener: () => undefined, contains: async () => true, 
remove: async () => false, request: async () => false
+    addPermissionsListener: () => undefined, containsHostPermissions: async () 
=> true, removeHostPermissions: async () => false, requestHostPermissions: 
async () => false
   }),
   getWalletVersion: () => ({
     version: 'none'
diff --git a/packages/taler-wallet-webextension/src/platform/firefox.ts 
b/packages/taler-wallet-webextension/src/platform/firefox.ts
index 21d0e187..d5beda32 100644
--- a/packages/taler-wallet-webextension/src/platform/firefox.ts
+++ b/packages/taler-wallet-webextension/src/platform/firefox.ts
@@ -15,7 +15,7 @@
  */
 
 import { CrossBrowserPermissionsApi, Permissions, PlatformAPI } from 
"./api.js";
-import chromePlatform, { contains as chromeContains, remove as chromeRemove, 
request as chromeRequest } from "./chrome.js";
+import chromePlatform, { containsHostPermissions as chromeContains, 
removeHostPermissions as chromeRemove, requestHostPermissions as chromeRequest 
} from "./chrome.js";
 
 const api: PlatformAPI = {
   ...chromePlatform,
@@ -40,9 +40,9 @@ function addPermissionsListener(callback: (p: Permissions) => 
void): void {
 function getPermissionsApi(): CrossBrowserPermissionsApi {
   return {
     addPermissionsListener,
-    contains: chromeContains,
-    request: chromeRequest,
-    remove: chromeRemove
+    containsHostPermissions: chromeContains,
+    requestHostPermissions: chromeRequest,
+    removeHostPermissions: chromeRemove
   }
 }
 
diff --git a/packages/taler-wallet-webextension/src/stories.test.ts 
b/packages/taler-wallet-webextension/src/stories.test.ts
index 7e6be428..ef8b4de5 100644
--- a/packages/taler-wallet-webextension/src/stories.test.ts
+++ b/packages/taler-wallet-webextension/src/stories.test.ts
@@ -18,15 +18,18 @@
  *
  * @author Sebastian Javier Marchano (sebasjm)
  */
+import { setupI18n } from "@gnu-taler/taler-util";
+import * as components from "./components/index.stories.js";
+import * as cta from "./cta/index.stories.js";
+import * as mui from "./mui/index.stories.js";
+import { setupPlatform } from "./platform/api.js";
+import chromeAPI from "./platform/chrome.js";
 import * as popup from "./popup/index.stories.js";
+import { renderNodeOrBrowser } from "./test-utils.js";
 import * as wallet from "./wallet/index.stories.js";
-import * as mui from "./mui/index.stories.js";
-import * as cta from "./cta/index.stories.js";
-import * as components from "./components/index.stories.js";
 
-import { setupI18n } from "@gnu-taler/taler-util";
-import { renderNodeOrBrowser } from "./test-utils.js";
 setupI18n("en", { en: {} });
+setupPlatform(chromeAPI);
 
 function testThisStory(st: any): any {
   describe(`render examples for ${(st as any).default.title}`, () => {
diff --git 
a/packages/taler-wallet-webextension/src/svg/taler-logo-2021-plain.svg 
b/packages/taler-wallet-webextension/src/svg/taler-logo-2021-plain.svg
new file mode 100644
index 00000000..6e3cc254
--- /dev/null
+++ b/packages/taler-wallet-webextension/src/svg/taler-logo-2021-plain.svg
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   width="670"
+   height="300"
+   viewBox="0 0 201 90"
+   version="1.1"
+   id="svg8">
+  <g
+     id="logo">
+    <g
+       id="circles"
+       
style="fill:#0042b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.327943">
+      <path
+         d="m 86.662153,1.1211936 c 15.589697,0 29.129227,9.4011664 
35.961027,23.2018054 h -5.81736 C 110.4866,13.623304 99.349002,6.5180852 
86.662153,6.5180852 c -19.690571,0 -35.652876,17.1120008 -35.652876,38.2205688 
0,10.331797 3.825597,19.704678 10.03957,26.582945 -1.342357,1.120912 
-2.771532,2.127905 -4.275488,3.006754 C 50.071485,66.553412 45.974857,56.15992 
45.974857,44.738654 c 0,-24.089211 18.216325,-43.6174604 40.687296,-43.6174604 
z M 122.51416,65.375898 c -6.86645,13.680134  [...]
+         id="path2350" />
+      <path
+         d="m 64.212372,1.1211936 c 1.052607,0 2.095998,0.042919 
3.128684,0.1270583 C 64.288864,2.8094199 61.427378,4.728606 58.802653,6.9555572 
41.679542,9.7498571 28.559494,25.601563 28.559494,44.738654 c 0,14.264563 
7.29059,26.702023 18.093843,33.268925 -1.593656,0.26719 -3.226966,0.406948 
-4.890748,0.406948 -1.239545,0 -2.46151,-0.07952 -3.663522,-0.229364 C 
29.191129,70.184015 23.525076,58.171633 23.525076,44.738654 23.525076,20.649443 
41.7414,1.1211936 64.212372,1.1211936 Z M 69.62 [...]
+         id="path2352" />
+      <path
+         d="m 41.762589,1.1211936 c 1.064296,0 2.118804,0.044379 
3.162607,0.1302161 -3.046523,1.558961 -5.903162,3.4745139 -8.52358,5.6968133 C 
19.254624,9.7205882 6.1097128,25.583465 6.1097128,44.738654 c 0,21.108568 
15.9624012,38.22057 35.6528762,38.22057 12.599746,0 23.672446,-7.007056 
30.013748,-17.583802 h 5.838515 C 70.748498,79.055727 57.26924,88.356116 
41.762589,88.356116 c -22.470907,0 -40.6871998,-19.52825 -40.6871998,-43.617462 
0,-24.089211 18.2162928,-43.6174604 40.6871998,-4 [...]
+         id="path2354" />
+    </g>
+    <g
+       id="letters">
+      <path
+         d="m 76.135411,34.409066 h 9.161042 V 29.36588 H 61.857537 v 5.043186 
h 9.161137 v 25.92317 h 5.116737 z"
+         id="path2346" />
+      <path
+         d="m 92.647571,52.856334 h 13.659009 l 2.93009,7.476072 h 5.36461 L 
101.89122,29.144903 H 97.187186 L 84.477089,60.332406 h 5.199533 z m 
11.802109,-4.822276 h -9.944771 l 4.951718,-12.386462 z"
+         id="path2362" />
+      <path
+         d="m 123.80641,29.366084 h -4.58038 v 30.966322 h 20.54728 v 
-4.910253 c -5.32227,0 -10.64463,0 -15.9669,0 z"
+         id="path2356" />
+      <path
+         d="m 166.4722,29.366084 h -21.37564 v 30.966322 h 21.58203 v 
-4.910253 h -16.54771 v -8.27275 h 14.48439 V 42.23925 h -14.48439 v -7.962811 
h 16.34132 z"
+         id="path2360" />
+      <path
+         d="m 191.19035,39.474593 c 0,1.59947 -0.53646,2.87535 
-1.61628,3.818883 -1.07281,0.95124 -2.52409,1.422837 -4.34678,1.422837 h 
-7.44851 V 34.276439 h 7.4073 c 1.9051,0 3.38376,0.435027 4.42939,1.312178 
1.05226,0.870258 1.57488,2.167734 1.57488,3.885976 z m 6.06602,20.857813 
-7.79911,-11.723191 c 1.01771,-0.294794 1.94631,-0.714813 2.78553,-1.260566 
0.83885,-0.545619 1.56122,-1.209263 2.16629,-1.990627 0.60541,-0.781738 
1.07981,-1.681096 1.42369,-2.698345 0.34378,-1.017553 0.5156 [...]
+         id="path2358" />
+    </g>
+  </g>
+</svg>
diff --git a/packages/taler-wallet-webextension/src/wallet/Settings.stories.tsx 
b/packages/taler-wallet-webextension/src/wallet/Settings.stories.tsx
index f5077894..936ba511 100644
--- a/packages/taler-wallet-webextension/src/wallet/Settings.stories.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/Settings.stories.tsx
@@ -32,18 +32,19 @@ export default {
 
 export const AllOff = createExample(TestedComponent, {
   deviceName: "this-is-the-device-name",
+  permissionToggle: { value: false, button: {} },
   setDeviceName: () => Promise.resolve(),
 });
 
 export const OneChecked = createExample(TestedComponent, {
   deviceName: "this-is-the-device-name",
-  permissionsEnabled: true,
+  permissionToggle: { value: false, button: {} },
   setDeviceName: () => Promise.resolve(),
 });
 
 export const WithOneExchange = createExample(TestedComponent, {
   deviceName: "this-is-the-device-name",
-  permissionsEnabled: true,
+  permissionToggle: { value: false, button: {} },
   setDeviceName: () => Promise.resolve(),
   knownExchanges: [
     {
@@ -62,7 +63,7 @@ export const WithOneExchange = createExample(TestedComponent, 
{
 
 export const WithExchangeInDifferentState = createExample(TestedComponent, {
   deviceName: "this-is-the-device-name",
-  permissionsEnabled: true,
+  permissionToggle: { value: false, button: {} },
   setDeviceName: () => Promise.resolve(),
   knownExchanges: [
     {
diff --git a/packages/taler-wallet-webextension/src/wallet/Settings.tsx 
b/packages/taler-wallet-webextension/src/wallet/Settings.tsx
index 5a9c776f..83ce76ad 100644
--- a/packages/taler-wallet-webextension/src/wallet/Settings.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/Settings.tsx
@@ -17,6 +17,7 @@
 import { ExchangeListItem } from "@gnu-taler/taler-util";
 import { Fragment, h, VNode } from "preact";
 import { Checkbox } from "../components/Checkbox.js";
+import { ErrorTalerOperation } from "../components/ErrorTalerOperation.js";
 import { JustInDevMode } from "../components/JustInDevMode.js";
 import { SelectList } from "../components/SelectList.js";
 import {
@@ -32,12 +33,13 @@ import { useTranslationContext } from 
"../context/translation.js";
 import { useAsyncAsHook } from "../hooks/useAsyncAsHook.js";
 import { useBackupDeviceName } from "../hooks/useBackupDeviceName.js";
 import { useExtendedPermissions } from "../hooks/useExtendedPermissions.js";
+import { ToggleHandler } from "../mui/handlers.js";
 import { Pages } from "../NavigationBar.js";
 import { buildTermsOfServiceStatus } from "../utils/index.js";
 import * as wxApi from "../wxApi.js";
 
 export function SettingsPage(): VNode {
-  const [permissionsEnabled, togglePermissions] = useExtendedPermissions();
+  const permissionToggle = useExtendedPermissions();
   const { devMode, toggleDevMode } = useDevContext();
   const { name, update } = useBackupDeviceName();
 
@@ -52,8 +54,7 @@ export function SettingsPage(): VNode {
       }
       deviceName={name}
       setDeviceName={update}
-      permissionsEnabled={permissionsEnabled}
-      togglePermissions={togglePermissions}
+      permissionToggle={permissionToggle}
       developerMode={devMode}
       toggleDeveloperMode={toggleDevMode}
     />
@@ -63,8 +64,7 @@ export function SettingsPage(): VNode {
 export interface ViewProps {
   deviceName: string;
   setDeviceName: (s: string) => Promise<void>;
-  permissionsEnabled: boolean;
-  togglePermissions: () => void;
+  permissionToggle: ToggleHandler;
   developerMode: boolean;
   toggleDeveloperMode: () => void;
   knownExchanges: Array<ExchangeListItem>;
@@ -72,8 +72,7 @@ export interface ViewProps {
 
 export function SettingsView({
   knownExchanges,
-  permissionsEnabled,
-  togglePermissions,
+  permissionToggle,
   developerMode,
   toggleDeveloperMode,
 }: ViewProps): VNode {
@@ -82,6 +81,12 @@ export function SettingsView({
   return (
     <Fragment>
       <section>
+        {permissionToggle.button.error && (
+          <ErrorTalerOperation
+            title={<i18n.Translate>Could not toggle auto-open</i18n.Translate>}
+            error={permissionToggle.button.error.errorDetail}
+          />
+        )}
         <SubTitle>
           <i18n.Translate>Navigator</i18n.Translate>
         </SubTitle>
@@ -98,8 +103,8 @@ export function SettingsView({
               requires more permissions from your browser.
             </i18n.Translate>
           }
-          enabled={permissionsEnabled}
-          onToggle={togglePermissions}
+          enabled={permissionToggle.value!}
+          onToggle={permissionToggle.button.onClick!}
         />
 
         <SubTitle>
diff --git a/packages/taler-wallet-webextension/src/wallet/Welcome.stories.tsx 
b/packages/taler-wallet-webextension/src/wallet/Welcome.stories.tsx
index 424eb9d7..10ff78b2 100644
--- a/packages/taler-wallet-webextension/src/wallet/Welcome.stories.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/Welcome.stories.tsx
@@ -28,7 +28,7 @@ export default {
 };
 
 export const Normal = createExample(TestedComponent, {
-  permissionsEnabled: true,
+  permissionToggle: { value: true, button: {} },
   diagnostics: {
     errors: [],
     walletManifestVersion: "1.0",
@@ -40,9 +40,9 @@ export const Normal = createExample(TestedComponent, {
 
 export const TimedoutDiagnostics = createExample(TestedComponent, {
   timedOut: true,
-  permissionsEnabled: false,
+  permissionToggle: { value: true, button: {} },
 });
 
 export const RunningDiagnostics = createExample(TestedComponent, {
-  permissionsEnabled: false,
+  permissionToggle: { value: true, button: {} },
 });
diff --git a/packages/taler-wallet-webextension/src/wallet/Welcome.tsx 
b/packages/taler-wallet-webextension/src/wallet/Welcome.tsx
index 58023a20..38bcf800 100644
--- a/packages/taler-wallet-webextension/src/wallet/Welcome.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/Welcome.tsx
@@ -27,15 +27,15 @@ import { SubTitle, Title } from 
"../components/styled/index.js";
 import { useTranslationContext } from "../context/translation.js";
 import { useDiagnostics } from "../hooks/useDiagnostics.js";
 import { useExtendedPermissions } from "../hooks/useExtendedPermissions.js";
+import { ToggleHandler } from "../mui/handlers.js";
 import { platform } from "../platform/api.js";
 
 export function WelcomePage(): VNode {
-  const [permissionsEnabled, togglePermissions] = useExtendedPermissions();
+  const permissionToggle = useExtendedPermissions();
   const [diagnostics, timedOut] = useDiagnostics();
   return (
     <View
-      permissionsEnabled={permissionsEnabled}
-      togglePermissions={togglePermissions}
+      permissionToggle={permissionToggle}
       diagnostics={diagnostics}
       timedOut={timedOut}
     />
@@ -43,14 +43,12 @@ export function WelcomePage(): VNode {
 }
 
 export interface ViewProps {
-  permissionsEnabled: boolean;
-  togglePermissions: () => void;
+  permissionToggle: ToggleHandler;
   diagnostics: WalletDiagnostics | undefined;
   timedOut: boolean;
 }
 export function View({
-  permissionsEnabled,
-  togglePermissions,
+  permissionToggle,
   diagnostics,
   timedOut,
 }: ViewProps): VNode {
@@ -105,8 +103,8 @@ export function View({
               requires more permissions from your browser.)
             </i18n.Translate>
           }
-          enabled={permissionsEnabled}
-          onToggle={togglePermissions}
+          enabled={permissionToggle.value!}
+          onToggle={permissionToggle.button.onClick!}
         />
         <SubTitle>
           <i18n.Translate>Next Steps</i18n.Translate>
diff --git a/packages/taler-wallet-webextension/src/wxApi.ts 
b/packages/taler-wallet-webextension/src/wxApi.ts
index 128a82fd..da80e9bd 100644
--- a/packages/taler-wallet-webextension/src/wxApi.ts
+++ b/packages/taler-wallet-webextension/src/wxApi.ts
@@ -345,17 +345,17 @@ export function getDiagnostics(): 
Promise<WalletDiagnostics> {
 /**
  * Get diagnostics information
  */
-export function setExtendedPermissions(
+export function toggleHeaderListener(
   value: boolean,
 ): Promise<ExtendedPermissionsResponse> {
-  return callBackend("wxSetExtendedPermissions", { value });
+  return callBackend("toggleHeaderListener", { value });
 }
 
 /**
  * Get diagnostics information
  */
-export function getExtendedPermissions(): Promise<ExtendedPermissionsResponse> 
{
-  return callBackend("wxGetExtendedPermissions", {});
+export function containsHeaderListener(): Promise<ExtendedPermissionsResponse> 
{
+  return callBackend("containsHeaderListener", {});
 }
 
 /**
diff --git a/packages/taler-wallet-webextension/src/wxBackend.ts 
b/packages/taler-wallet-webextension/src/wxBackend.ts
index b0c4102f..b0d690ef 100644
--- a/packages/taler-wallet-webextension/src/wxBackend.ts
+++ b/packages/taler-wallet-webextension/src/wxBackend.ts
@@ -43,7 +43,6 @@ import {
 import { SetTimeoutTimerAPI } from "@gnu-taler/taler-wallet-core";
 import { BrowserCryptoWorkerFactory } from "./browserCryptoWorkerFactory.js";
 import { BrowserHttpLib } from "./browserHttpLib.js";
-import { getReadRequestPermissions } from "./permissions.js";
 import { MessageFromBackend, platform } from "./platform/api.js";
 import { SynchronousCryptoWorkerFactory } from 
"./serviceWorkerCryptoWorkerFactory.js";
 import { ServiceWorkerHttpLib } from "./serviceWorkerHttpLib.js";
@@ -131,19 +130,19 @@ async function dispatch(
       r = wrapResponse(await reinitWallet());
       break;
     }
-    case "wxGetExtendedPermissions": {
-      const res = await 
platform.getPermissionsApi().contains(getReadRequestPermissions());
+    case "containsHeaderListener": {
+      const res = await platform.containsTalerHeaderListener();
       r = wrapResponse({ newValue: res });
       break;
     }
-    case "wxSetExtendedPermissions": {
+    case "toggleHeaderListener": {
       const newVal = req.payload.value;
       logger.trace("new extended permissions value", newVal);
       if (newVal) {
         platform.registerTalerHeaderListener(parseTalerUriAndRedirect);
         r = wrapResponse({ newValue: true });
       } else {
-        const rem = await 
platform.getPermissionsApi().remove(getReadRequestPermissions());
+        const rem = await platform.getPermissionsApi().removeHostPermissions();
         logger.trace("permissions removed:", rem);
         r = wrapResponse({ newVal: false });
       }
diff --git a/packages/taler-wallet-webextension/static/img/logo-2015-medium.png 
b/packages/taler-wallet-webextension/static/img/logo-2015-medium.png
deleted file mode 100644
index acf84baa..00000000
Binary files 
a/packages/taler-wallet-webextension/static/img/logo-2015-medium.png and 
/dev/null differ
diff --git a/packages/taler-wallet-webextension/static/img/logo.png 
b/packages/taler-wallet-webextension/static/img/logo.png
deleted file mode 120000
index 1ddb87d2..00000000
--- a/packages/taler-wallet-webextension/static/img/logo.png
+++ /dev/null
@@ -1 +0,0 @@
-logo-2015-medium.png
\ No newline at end of file
diff --git a/packages/taler-wallet-webextension/static/img/taler-logo-128.png 
b/packages/taler-wallet-webextension/static/img/taler-logo-128.png
new file mode 100644
index 00000000..a2f0c22e
Binary files /dev/null and 
b/packages/taler-wallet-webextension/static/img/taler-logo-128.png differ
diff --git a/packages/taler-wallet-webextension/static/img/taler-logo-16.png 
b/packages/taler-wallet-webextension/static/img/taler-logo-16.png
new file mode 100644
index 00000000..eb42bad1
Binary files /dev/null and 
b/packages/taler-wallet-webextension/static/img/taler-logo-16.png differ
diff --git a/packages/taler-wallet-webextension/static/img/taler-logo-19.png 
b/packages/taler-wallet-webextension/static/img/taler-logo-19.png
new file mode 100644
index 00000000..8c8c6ae8
Binary files /dev/null and 
b/packages/taler-wallet-webextension/static/img/taler-logo-19.png differ
diff --git a/packages/taler-wallet-webextension/static/img/taler-logo-2022.svg 
b/packages/taler-wallet-webextension/static/img/taler-logo-2022.svg
new file mode 100644
index 00000000..2ac2785b
--- /dev/null
+++ b/packages/taler-wallet-webextension/static/img/taler-logo-2022.svg
@@ -0,0 +1,468 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   width="670"
+   height="300"
+   viewBox="0 0 201 90"
+   version="1.1"
+   id="svg8"
+   sodipodi:docname="taler-logo-2023.svg"
+   inkscape:version="0.92.3 (2405546, 2018-03-11)">
+  <metadata
+     id="metadata67">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs854">
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath20663">
+      <rect
+         
style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect20665"
+         width="164.73636"
+         height="53.465477"
+         x="12.38413"
+         y="263.48923" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath20667">
+      <rect
+         
style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect20669"
+         width="164.73636"
+         height="53.465477"
+         x="12.38413"
+         y="263.48923" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath20671">
+      <rect
+         
style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect20673"
+         width="164.73636"
+         height="53.465477"
+         x="12.38413"
+         y="263.48923" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath20675">
+      <rect
+         
style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect20677"
+         width="164.73636"
+         height="53.465477"
+         x="12.38413"
+         y="263.48923" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath20679">
+      <rect
+         
style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect20681"
+         width="164.73636"
+         height="53.465477"
+         x="12.38413"
+         y="263.48923" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath20683">
+      <rect
+         
style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect20685"
+         width="164.73636"
+         height="53.465477"
+         x="12.38413"
+         y="263.48923" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath20687">
+      <rect
+         
style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect20689"
+         width="164.73636"
+         height="53.465477"
+         x="12.38413"
+         y="263.48923" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath20691">
+      <rect
+         
style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect20693"
+         width="164.73636"
+         height="53.465477"
+         x="12.38413"
+         y="263.48923" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath20695">
+      <rect
+         
style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect20697"
+         width="164.73636"
+         height="53.465477"
+         x="12.38413"
+         y="263.48923" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath20699">
+      <rect
+         
style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect20701"
+         width="164.73636"
+         height="53.465477"
+         x="12.38413"
+         y="263.48923" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath20703">
+      <rect
+         
style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect20705"
+         width="164.73636"
+         height="53.465477"
+         x="12.38413"
+         y="263.48923" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath20707">
+      <rect
+         
style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect20709"
+         width="164.73636"
+         height="53.465477"
+         x="-16.523348"
+         y="98.188889" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath20711">
+      <rect
+         
style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect20713"
+         width="164.73636"
+         height="53.465477"
+         x="-16.523348"
+         y="98.188889" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath20715">
+      <rect
+         
style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect20717"
+         width="164.73636"
+         height="53.465477"
+         x="-16.523348"
+         y="98.188889" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath20719">
+      <rect
+         
style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect20721"
+         width="164.73636"
+         height="53.465477"
+         x="-16.523348"
+         y="98.188889" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath20723">
+      <rect
+         
style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect20725"
+         width="164.73636"
+         height="53.465477"
+         x="-16.523348"
+         y="98.188889" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath20727">
+      <rect
+         
style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect20729"
+         width="164.73636"
+         height="53.465477"
+         x="-16.523348"
+         y="98.188889" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath20731">
+      <rect
+         
style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect20733"
+         width="164.73636"
+         height="53.465477"
+         x="-16.523348"
+         y="98.188889" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath20735">
+      <rect
+         
style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect20737"
+         width="164.73636"
+         height="53.465477"
+         x="-16.523348"
+         y="98.188889" />
+    </clipPath>
+  </defs>
+  <sodipodi:namedview
+     id="namedview852"
+     pagecolor="#000000"
+     bordercolor="#cccccc"
+     borderopacity="1"
+     inkscape:pageshadow="0"
+     inkscape:pageopacity="0"
+     inkscape:pagecheckerboard="false"
+     showgrid="false"
+     inkscape:zoom="0.46315494"
+     inkscape:cx="-659.30808"
+     inkscape:cy="83.54417"
+     inkscape:window-width="1920"
+     inkscape:window-height="1025"
+     inkscape:window-x="0"
+     inkscape:window-y="26"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="logo" />
+  <g
+     id="logo">
+    <g
+       id="circles"
+       
style="display:inline;fill:#0042b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.327943"
+       transform="translate(180)">
+      <g
+         id="g4645"
+         inkscape:export-xdpi="98.304001"
+         inkscape:export-ydpi="98.304001">
+        <ellipse
+           transform="matrix(-0.99007841,-0.140516,0.16039263,-0.98705329,0,0)"
+           ry="75.234604"
+           rx="74.764656"
+           cy="-29.611343"
+           cx="101.25517"
+           id="path4580"
+           
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.1471165;stroke-opacity:1"
 />
+        <g
+           transform="rotate(-180,-107.57659,26.234233)"
+           id="g4622">
+          <path
+             id="path1306-7-63-9"
+             
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.0330856;stroke-linejoin:round;stroke-opacity:1"
+             d="M 45.48017,110.87571 A 35.545008,38.588202 0 0 0 
9.9354536,149.46424 35.545008,38.588202 0 0 0 45.48017,188.05226 
35.545008,38.588202 0 0 0 81.025385,149.46424 35.545008,38.588202 0 0 0 
45.48017,110.87571 Z m -0.07061,4.90892 a 31.151221,33.78691 0 0 1 
0.829048,0.0119 31.151221,33.78691 0 0 1 0.82854,0.0362 31.151221,33.78691 0 0 
1 0.827519,0.0595 31.151221,33.78691 0 0 1 0.825964,0.0839 31.151221,33.78691 0 
0 1 0.823425,0.10767 31.151221,33.78691 0 0 1 0.820349,0.13097 3 [...]
+             clip-path="url(#clipPath20735)"
+             transform="translate(-177.74838,-111.36079)"
+             inkscape:export-filename="C:\Users\a116178\Downloads\Taler\taler 
512.png"
+             inkscape:export-xdpi="96.231026"
+             inkscape:export-ydpi="96.231026"
+             inkscape:connector-curvature="0" />
+          <path
+             id="path1306-0"
+             
style="opacity:1;fill:#0042b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.0376767;stroke-linejoin:round"
+             d="m 68.010803,105.31927 a 40.722405,43.678338 0 0 0 
-40.72207,43.67871 40.722405,43.678338 0 0 0 40.72207,43.67812 
40.722405,43.678338 0 0 0 40.722647,-43.67812 40.722405,43.678338 0 0 0 
-40.722647,-43.67871 z m -0.0809,5.55644 a 35.68863,38.243712 0 0 1 
0.94981,0.0135 35.68863,38.243712 0 0 1 0.94922,0.041 35.68863,38.243712 0 0 1 
0.94805,0.0674 35.68863,38.243712 0 0 1 0.94628,0.0949 35.68863,38.243712 0 0 1 
0.94336,0.12188 35.68863,38.243712 0 0 1 0.93984,0.14824 35.6886 [...]
+             clip-path="url(#clipPath20731)"
+             transform="translate(-177.74838,-111.36079)"
+             inkscape:export-filename="C:\Users\a116178\Downloads\Taler\taler 
512.png"
+             inkscape:export-xdpi="96.231026"
+             inkscape:export-ydpi="96.231026"
+             inkscape:connector-curvature="0" />
+          <path
+             id="path1306-5"
+             
style="opacity:1;fill:#0042b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.0376767;stroke-linejoin:round"
+             d="M 45.56102,105.31927 A 40.722405,43.678338 0 0 0 
4.8389507,148.99798 40.722405,43.678338 0 0 0 45.56102,192.6761 
40.722405,43.678338 0 0 0 86.283657,148.99798 40.722405,43.678338 0 0 0 
45.56102,105.31927 Z m -0.0809,5.55644 a 35.68863,38.243712 0 0 1 
0.94981,0.0135 35.68863,38.243712 0 0 1 0.94922,0.041 35.68863,38.243712 0 0 1 
0.94805,0.0674 35.68863,38.243712 0 0 1 0.94628,0.0949 35.68863,38.243712 0 0 1 
0.94336,0.12188 35.68863,38.243712 0 0 1 0.93984,0.14824 35.68863, [...]
+             clip-path="url(#clipPath20727)"
+             transform="translate(-177.74838,-111.36079)"
+             inkscape:export-filename="C:\Users\a116178\Downloads\Taler\taler 
512.png"
+             inkscape:export-xdpi="96.231026"
+             inkscape:export-ydpi="96.231026"
+             inkscape:connector-curvature="0" />
+          <path
+             id="path1306-7-6"
+             
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.0427732;stroke-linejoin:round;stroke-opacity:1"
+             d="M 68.102923,99.029256 A 46.363577,49.444797 0 0 0 
21.739728,148.47447 46.363577,49.444797 0 0 0 68.102923,197.91903 
46.363577,49.444797 0 0 0 114.46677,148.47447 46.363577,49.444797 0 0 0 
68.102923,99.029256 Z m -0.09212,6.290014 a 40.632485,43.292687 0 0 1 
1.081384,0.0153 40.632485,43.292687 0 0 1 1.080714,0.0464 40.632485,43.292687 0 
0 1 1.079381,0.0763 40.632485,43.292687 0 0 1 1.077365,0.10745 
40.632485,43.292687 0 0 1 1.074041,0.13797 40.632485,43.292687 0 0 1 1.0700 
[...]
+             clip-path="url(#clipPath20723)"
+             transform="translate(-177.74838,-111.36079)"
+             inkscape:connector-curvature="0" />
+          <path
+             id="path1306-7-63-6"
+             
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.0330856;stroke-linejoin:round;stroke-opacity:1"
+             d="m 67.929953,110.87572 a 35.545008,38.588202 0 0 0 
-35.544717,38.58853 35.545008,38.588202 0 0 0 35.544717,38.58801 
35.545008,38.588202 0 0 0 35.545217,-38.58801 35.545008,38.588202 0 0 0 
-35.545217,-38.58853 z m -0.07061,4.90891 a 31.151221,33.78691 0 0 1 
0.829048,0.0119 31.151221,33.78691 0 0 1 0.82854,0.0362 31.151221,33.78691 0 0 
1 0.827519,0.0595 31.151221,33.78691 0 0 1 0.825964,0.0839 31.151221,33.78691 0 
0 1 0.823425,0.10768 31.151221,33.78691 0 0 1 0.820349,0.1309 [...]
+             clip-path="url(#clipPath20719)"
+             transform="translate(-177.74838,-111.36079)"
+             inkscape:export-filename="C:\Users\a116178\Downloads\Taler\taler 
512.png"
+             inkscape:export-xdpi="96.231026"
+             inkscape:export-ydpi="96.231026"
+             inkscape:connector-curvature="0" />
+          <path
+             id="path1306"
+             
style="opacity:1;fill:#0042b3;fill-opacity:1;fill-rule:evenodd;stroke:#df373a;stroke-width:0.0376767;stroke-linejoin:round;stroke-opacity:1"
+             d="m 90.379694,105.31927 a 40.722405,43.678338 0 0 0 
-40.72207,43.67871 40.722405,43.678338 0 0 0 40.72207,43.67812 
40.722405,43.678338 0 0 0 40.722646,-43.67812 40.722405,43.678338 0 0 0 
-40.722646,-43.67871 z m -0.0809,5.55644 a 35.68863,38.243712 0 0 1 
0.94981,0.0135 35.68863,38.243712 0 0 1 0.94922,0.041 35.68863,38.243712 0 0 1 
0.94805,0.0674 35.68863,38.243712 0 0 1 0.94628,0.0949 35.68863,38.243712 0 0 1 
0.94336,0.12188 35.68863,38.243712 0 0 1 0.93984,0.14824 35.6886 [...]
+             clip-path="url(#clipPath20715)"
+             transform="translate(-177.74838,-111.36079)"
+             inkscape:export-filename="C:\Users\a116178\Downloads\Taler\taler 
512.png"
+             inkscape:export-xdpi="96.231026"
+             inkscape:export-ydpi="96.231026"
+             inkscape:connector-curvature="0" />
+          <path
+             id="path1306-7"
+             
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.0427732;stroke-linejoin:round;stroke-opacity:1"
+             d="M 90.531339,99.785944 A 46.363577,49.444797 0 0 0 
44.168144,149.23116 46.363577,49.444797 0 0 0 90.531339,198.67572 
46.363577,49.444797 0 0 0 136.89519,149.23116 46.363577,49.444797 0 0 0 
90.531339,99.785944 Z m -0.09212,6.290016 a 40.632485,43.292687 0 0 1 
1.081384,0.0153 40.632485,43.292687 0 0 1 1.080714,0.0464 40.632485,43.292687 0 
0 1 1.079381,0.0763 40.632485,43.292687 0 0 1 1.077365,0.10745 
40.632485,43.292687 0 0 1 1.074041,0.13797 40.632485,43.292687 0 0 1 1.0700 
[...]
+             clip-path="url(#clipPath20711)"
+             transform="translate(-177.74838,-111.36079)"
+             inkscape:connector-curvature="0" />
+          <path
+             id="path1306-7-63"
+             
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.0330856;stroke-linejoin:round;stroke-opacity:1"
+             d="m 90.144156,110.56416 a 35.545008,38.588202 0 0 0 
-35.544717,38.58853 35.545008,38.588202 0 0 0 35.544717,38.58802 
35.545008,38.588202 0 0 0 35.545224,-38.58802 35.545008,38.588202 0 0 0 
-35.545224,-38.58853 z m -0.07061,4.90892 a 31.151221,33.78691 0 0 1 
0.829048,0.0119 31.151221,33.78691 0 0 1 0.82854,0.0362 31.151221,33.78691 0 0 
1 0.827519,0.0595 31.151221,33.78691 0 0 1 0.825964,0.0839 31.151221,33.78691 0 
0 1 0.823425,0.10767 31.151221,33.78691 0 0 1 0.820349,0.1309 [...]
+             clip-path="url(#clipPath20707)"
+             transform="translate(-177.74838,-111.36079)"
+             inkscape:export-filename="C:\Users\a116178\Downloads\Taler\taler 
512.png"
+             inkscape:export-xdpi="96.231026"
+             inkscape:export-ydpi="96.231026"
+             inkscape:connector-curvature="0" />
+          <path
+             d="m 119.20127,221.87113 c 15.58969,0 29.12922,9.40117 
35.96102,23.20181 h -5.81736 c -6.31922,-10.6997 -17.45681,-17.80491 
-30.14366,-17.80491 -19.690574,0 -35.652879,17.112 -35.652879,38.22056 
0,10.3318 3.825597,19.70468 10.03957,26.58295 -1.342357,1.12091 
-2.771532,2.1279 -4.275488,3.00675 -6.701874,-7.77494 -10.798502,-18.16843 
-10.798502,-29.5897 0,-24.08921 18.216325,-43.61746 40.687299,-43.61746 z m 
35.852,64.25471 c -6.86645,13.68013 -20.34561,22.98022 -35.852,22.980 [...]
+             id="path2350-0"
+             
style="fill:#0042b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.327943"
+             clip-path="url(#clipPath20703)"
+             transform="translate(-206.48906,-227.91266)"
+             inkscape:export-filename="C:\Users\a116178\Downloads\Taler\taler 
512.png"
+             inkscape:export-xdpi="96.231026"
+             inkscape:export-ydpi="96.231026"
+             inkscape:connector-curvature="0" />
+          <path
+             d="m 96.751486,221.87113 c 1.052607,0 2.095998,0.0429 
3.128684,0.12706 -3.052192,1.56117 -5.913678,3.48036 -8.538403,5.70731 
-17.123111,2.7943 -30.243159,18.646 -30.243159,37.78309 0,14.26457 
7.29059,26.70203 18.093843,33.26893 -1.593656,0.26719 -3.226966,0.40695 
-4.890748,0.40695 -1.239545,0 -2.46151,-0.0795 -3.663522,-0.22937 
-8.907938,-8.00114 -14.573991,-20.01353 -14.573991,-33.44651 0,-24.08921 
18.216324,-43.61746 40.687296,-43.61746 z m 5.409714,81.40059 c 10.32112,-1. 
[...]
+             id="path2352-7"
+             
style="fill:#0042b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.327943"
+             clip-path="url(#clipPath20699)"
+             transform="translate(-206.48906,-227.91266)"
+             inkscape:export-filename="C:\Users\a116178\Downloads\Taler\taler 
512.png"
+             inkscape:export-xdpi="96.231026"
+             inkscape:export-ydpi="96.231026"
+             inkscape:connector-curvature="0" />
+          <path
+             d="m 74.301703,221.87113 c 1.064296,0 2.118804,0.0444 
3.162607,0.13022 -3.046523,1.55896 -5.903162,3.47451 -8.52358,5.69681 
-17.146992,2.77237 -30.291903,18.63524 -30.291903,37.79043 0,21.10857 
15.962401,38.22057 35.652876,38.22057 12.599746,0 23.672446,-7.00705 
30.013747,-17.5838 h 5.83852 c -6.86636,13.68031 -20.345616,22.9807 
-35.852267,22.9807 -22.470907,0 -40.6872,-19.52825 -40.6872,-43.61747 
0,-24.08921 18.216293,-43.61746 40.6872,-43.61746 z m 30.142787,23.20181 c -1. 
[...]
+             id="path2354-0"
+             
style="fill:#0042b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.327943"
+             clip-path="url(#clipPath20695)"
+             transform="translate(-206.48906,-227.91266)"
+             inkscape:export-filename="C:\Users\a116178\Downloads\Taler\taler 
512.png"
+             inkscape:export-xdpi="96.231026"
+             inkscape:export-ydpi="96.231026"
+             inkscape:connector-curvature="0" />
+          <path
+             id="path1306-9"
+             
style="fill:#0042b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.0376767;stroke-linejoin:round;stroke-opacity:1"
+             d="m 119.12038,221.87113 a 40.722405,43.678338 0 0 0 
-40.722073,43.67871 40.722405,43.678338 0 0 0 40.722073,43.67813 
40.722405,43.678338 0 0 0 40.72263,-43.67813 40.722405,43.678338 0 0 0 
-40.72263,-43.67871 z m -0.0809,5.55645 a 35.68863,38.243712 0 0 1 
0.94981,0.0135 35.68863,38.243712 0 0 1 0.94922,0.041 35.68863,38.243712 0 0 1 
0.94805,0.0674 35.68863,38.243712 0 0 1 0.94628,0.0949 35.68863,38.243712 0 0 1 
0.94336,0.12187 35.68863,38.243712 0 0 1 0.93984,0.14824 35.6886 [...]
+             clip-path="url(#clipPath20671)"
+             transform="translate(-206.48906,-227.91266)"
+             inkscape:export-filename="C:\Users\a116178\Downloads\Taler\taler 
512.png"
+             inkscape:export-xdpi="96.231026"
+             inkscape:export-ydpi="96.231026"
+             inkscape:connector-curvature="0" />
+          <path
+             id="path1306-7-63-4"
+             
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.0330856;stroke-linejoin:round;stroke-opacity:1"
+             d="m 118.88484,227.11603 a 35.545008,38.588202 0 0 0 
-35.544718,38.58853 35.545008,38.588202 0 0 0 35.544718,38.58802 
35.545008,38.588202 0 0 0 35.54521,-38.58802 35.545008,38.588202 0 0 0 
-35.54521,-38.58853 z m -0.0706,4.90891 a 31.151221,33.78691 0 0 1 
0.82905,0.0119 31.151221,33.78691 0 0 1 0.82854,0.0362 31.151221,33.78691 0 0 1 
0.82752,0.0595 31.151221,33.78691 0 0 1 0.82596,0.0839 31.151221,33.78691 0 0 1 
0.82342,0.10768 31.151221,33.78691 0 0 1 0.82035,0.13096 31.151 [...]
+             clip-path="url(#clipPath20663)"
+             transform="translate(-206.48906,-227.91266)"
+             inkscape:export-filename="C:\Users\a116178\Downloads\Taler\taler 
512.png"
+             inkscape:export-xdpi="96.231026"
+             inkscape:export-ydpi="96.231026"
+             inkscape:connector-curvature="0" />
+          <path
+             id="path1306-0-7"
+             
style="fill:#0042b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.0376767;stroke-linejoin:round"
+             d="m 96.751486,221.87113 a 40.722405,43.678338 0 0 0 
-40.72207,43.67871 40.722405,43.678338 0 0 0 40.72207,43.67813 
40.722405,43.678338 0 0 0 40.722634,-43.67813 40.722405,43.678338 0 0 0 
-40.722634,-43.67871 z m -0.0809,5.55645 a 35.68863,38.243712 0 0 1 
0.94981,0.0135 35.68863,38.243712 0 0 1 0.94922,0.041 35.68863,38.243712 0 0 1 
0.94805,0.0674 35.68863,38.243712 0 0 1 0.946284,0.0949 35.68863,38.243712 0 0 
1 0.94336,0.12187 35.68863,38.243712 0 0 1 0.93984,0.14825 35.688 [...]
+             clip-path="url(#clipPath20687)"
+             transform="translate(-206.48906,-227.91266)"
+             inkscape:export-filename="C:\Users\a116178\Downloads\Taler\taler 
512.png"
+             inkscape:export-xdpi="96.231026"
+             inkscape:export-ydpi="96.231026"
+             inkscape:connector-curvature="0" />
+          <path
+             id="path1306-7-63-9-8"
+             
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.0330856;stroke-linejoin:round;stroke-opacity:1"
+             d="m 74.220853,227.42758 a 35.545008,38.588202 0 0 0 
-35.544717,38.58853 35.545008,38.588202 0 0 0 35.544717,38.58802 
35.545008,38.588202 0 0 0 35.545217,-38.58802 35.545008,38.588202 0 0 0 
-35.545217,-38.58853 z m -0.07061,4.90891 a 31.151221,33.78691 0 0 1 
0.829048,0.0119 31.151221,33.78691 0 0 1 0.82854,0.0362 31.151221,33.78691 0 0 
1 0.827519,0.0595 31.151221,33.78691 0 0 1 0.825964,0.0839 31.151221,33.78691 0 
0 1 0.823425,0.10768 31.151221,33.78691 0 0 1 0.820349,0.1309 [...]
+             clip-path="url(#clipPath20691)"
+             transform="translate(-206.48906,-227.91266)"
+             inkscape:export-filename="C:\Users\a116178\Downloads\Taler\taler 
512.png"
+             inkscape:export-xdpi="96.231026"
+             inkscape:export-ydpi="96.231026"
+             inkscape:connector-curvature="0" />
+          <path
+             id="path1306-7-63-6-2"
+             
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.0330856;stroke-linejoin:round;stroke-opacity:1"
+             d="m 96.670636,227.42758 a 35.545008,38.588202 0 0 0 
-35.544717,38.58854 35.545008,38.588202 0 0 0 35.544717,38.58801 
35.545008,38.588202 0 0 0 35.545214,-38.58801 35.545008,38.588202 0 0 0 
-35.545214,-38.58854 z m -0.07061,4.90892 a 31.151221,33.78691 0 0 1 
0.829048,0.0119 31.151221,33.78691 0 0 1 0.82854,0.0362 31.151221,33.78691 0 0 
1 0.827519,0.0595 31.151221,33.78691 0 0 1 0.825964,0.0839 31.151221,33.78691 0 
0 1 0.823423,0.10767 31.151221,33.78691 0 0 1 0.82035,0.13097 [...]
+             clip-path="url(#clipPath20675)"
+             transform="translate(-206.48906,-227.91266)"
+             inkscape:export-filename="C:\Users\a116178\Downloads\Taler\taler 
512.png"
+             inkscape:export-xdpi="96.231026"
+             inkscape:export-ydpi="96.231026"
+             inkscape:connector-curvature="0" />
+          <path
+             id="path1306-7-6-6"
+             
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.0427732;stroke-linejoin:round;stroke-opacity:1"
+             d="M 96.843606,215.58112 A 46.363577,49.444797 0 0 0 
50.480411,265.02634 46.363577,49.444797 0 0 0 96.843606,314.4709 
46.363577,49.444797 0 0 0 143.20744,265.02634 46.363577,49.444797 0 0 0 
96.843606,215.58112 Z m -0.09212,6.29001 a 40.632485,43.292687 0 0 1 
1.081384,0.0153 40.632485,43.292687 0 0 1 1.080714,0.0464 40.632485,43.292687 0 
0 1 1.079381,0.0763 40.632485,43.292687 0 0 1 1.077365,0.10746 
40.632485,43.292687 0 0 1 1.07404,0.13796 40.632485,43.292687 0 0 1 1.07004,0 
[...]
+             clip-path="url(#clipPath20679)"
+             transform="translate(-206.48906,-227.91266)"
+             inkscape:export-filename="C:\Users\a116178\Downloads\Taler\taler 
512.png"
+             inkscape:export-xdpi="96.231026"
+             inkscape:export-ydpi="96.231026"
+             inkscape:connector-curvature="0" />
+          <path
+             id="path1306-5-7"
+             
style="fill:#0042b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.0376767;stroke-linejoin:round"
+             d="m 74.301703,221.87113 a 40.722405,43.678338 0 0 0 
-40.72207,43.67871 40.722405,43.678338 0 0 0 40.72207,43.67813 
40.722405,43.678338 0 0 0 40.722637,-43.67813 40.722405,43.678338 0 0 0 
-40.722637,-43.67871 z m -0.0809,5.55645 a 35.68863,38.243712 0 0 1 
0.94981,0.0135 35.68863,38.243712 0 0 1 0.94922,0.041 35.68863,38.243712 0 0 1 
0.94805,0.0674 35.68863,38.243712 0 0 1 0.94628,0.0949 35.68863,38.243712 0 0 1 
0.94336,0.12187 35.68863,38.243712 0 0 1 0.93984,0.14824 35.6886 [...]
+             clip-path="url(#clipPath20683)"
+             transform="translate(-206.48906,-227.91266)"
+             inkscape:export-filename="C:\Users\a116178\Downloads\Taler\taler 
512.png"
+             inkscape:export-xdpi="96.231026"
+             inkscape:export-ydpi="96.231026"
+             inkscape:connector-curvature="0" />
+          <path
+             id="path1306-7-8"
+             
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.0427732;stroke-linejoin:round;stroke-opacity:1"
+             d="m 119.27202,216.33781 a 46.363577,49.444797 0 0 0 
-46.363193,49.44522 46.363577,49.444797 0 0 0 46.363193,49.44456 
46.363577,49.444797 0 0 0 46.36384,-49.44456 46.363577,49.444797 0 0 0 
-46.36384,-49.44522 z m -0.0921,6.29001 a 40.632485,43.292687 0 0 1 
1.08139,0.0153 40.632485,43.292687 0 0 1 1.08071,0.0464 40.632485,43.292687 0 0 
1 1.07938,0.0763 40.632485,43.292687 0 0 1 1.07737,0.10745 40.632485,43.292687 
0 0 1 1.07404,0.13797 40.632485,43.292687 0 0 1 1.07003,0.16781 [...]
+             clip-path="url(#clipPath20667)"
+             transform="translate(-251.48906,-227.91266)"
+             inkscape:export-filename="C:\Users\a116178\Downloads\Taler\taler 
512.png"
+             inkscape:export-xdpi="96.231026"
+             inkscape:export-ydpi="96.231026"
+             inkscape:connector-curvature="0" />
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/packages/taler-wallet-webextension/static/img/taler-logo-256.png 
b/packages/taler-wallet-webextension/static/img/taler-logo-256.png
new file mode 100644
index 00000000..7aa6c7bd
Binary files /dev/null and 
b/packages/taler-wallet-webextension/static/img/taler-logo-256.png differ
diff --git a/packages/taler-wallet-webextension/static/img/taler-logo-32.png 
b/packages/taler-wallet-webextension/static/img/taler-logo-32.png
new file mode 100644
index 00000000..c5dbf317
Binary files /dev/null and 
b/packages/taler-wallet-webextension/static/img/taler-logo-32.png differ
diff --git a/packages/taler-wallet-webextension/static/img/taler-logo-38.png 
b/packages/taler-wallet-webextension/static/img/taler-logo-38.png
new file mode 100644
index 00000000..13ee0104
Binary files /dev/null and 
b/packages/taler-wallet-webextension/static/img/taler-logo-38.png differ
diff --git a/packages/taler-wallet-webextension/static/img/taler-logo-48.png 
b/packages/taler-wallet-webextension/static/img/taler-logo-48.png
new file mode 100644
index 00000000..f13a23c8
Binary files /dev/null and 
b/packages/taler-wallet-webextension/static/img/taler-logo-48.png differ
diff --git a/packages/taler-wallet-webextension/static/img/taler-logo-512.png 
b/packages/taler-wallet-webextension/static/img/taler-logo-512.png
new file mode 100644
index 00000000..be312ef5
Binary files /dev/null and 
b/packages/taler-wallet-webextension/static/img/taler-logo-512.png differ
diff --git a/packages/taler-wallet-webextension/static/img/taler-logo-64.png 
b/packages/taler-wallet-webextension/static/img/taler-logo-64.png
new file mode 100644
index 00000000..b8a685ae
Binary files /dev/null and 
b/packages/taler-wallet-webextension/static/img/taler-logo-64.png differ

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]