From 90d537281333ddd0f6384ca832ab6ed3d3b7b158 Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Fri, 29 May 2020 10:00:07 -0400 Subject: [PATCH] Replace database icons with SVG's MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Original source of icons is the icon8 library (http://icons8.com/c/flat-color-icons) and Paomedia (https://github.com/paomedia/small-n-flat). All icons used are licensed MIT or CC0; annotated in COPYING. * Closes #4071 * Increase default size of database icons to 24px and entry preview panel to 48px * Add shell script to assemble the database icons * Use QIcon to seamlessly support High DPI displays and pixmap caching * Add badge support for KeeShare groups and expired entries. * Guard against use of QPixmap::fromImage without a GUI * Add SVG minify and improve `make icons` Co-authored-by: Wolfram Rösler --- COPYING | 180 ++++++++--------- share/CMakeLists.txt | 100 ++-------- share/crushpng.sh | 8 - share/icons/badges/0_ShareActive.svg | 1 + share/icons/badges/1_ShareInactive.svg | 1 + share/icons/badges/2_Expired.svg | 1 + share/icons/database/C00_Password.png | Bin 808 -> 0 bytes share/icons/database/C00_Password.svg | 1 + share/icons/database/C01_Package_Network.png | Bin 985 -> 0 bytes share/icons/database/C01_Package_Network.svg | 1 + .../icons/database/C02_MessageBox_Warning.png | Bin 805 -> 0 bytes .../icons/database/C02_MessageBox_Warning.svg | 1 + share/icons/database/C03_Server.png | Bin 810 -> 0 bytes share/icons/database/C03_Server.svg | 1 + share/icons/database/C04_Klipper.png | Bin 823 -> 0 bytes share/icons/database/C04_Klipper.svg | 1 + share/icons/database/C05_Edu_Languages.png | Bin 919 -> 0 bytes share/icons/database/C05_Edu_Languages.svg | 1 + share/icons/database/C06_KCMDF.png | Bin 801 -> 0 bytes share/icons/database/C06_KCMDF.svg | 1 + share/icons/database/C07_Kate.png | Bin 926 -> 0 bytes share/icons/database/C07_Kate.svg | 1 + share/icons/database/C08_Socket.png | Bin 992 -> 0 bytes share/icons/database/C08_Socket.svg | 1 + share/icons/database/C09_Identity.png | Bin 688 -> 0 bytes share/icons/database/C09_Identity.svg | 1 + share/icons/database/C10_Kontact.png | Bin 902 -> 0 bytes share/icons/database/C10_Kontact.svg | 1 + share/icons/database/C11_Camera.png | Bin 754 -> 0 bytes share/icons/database/C11_Camera.svg | 1 + share/icons/database/C12_IRKickFlash.png | Bin 950 -> 0 bytes share/icons/database/C12_IRKickFlash.svg | 1 + share/icons/database/C13_KGPG_Key3.png | Bin 821 -> 0 bytes share/icons/database/C13_KGPG_Key3.svg | 1 + share/icons/database/C14_Laptop_Power.png | Bin 816 -> 0 bytes share/icons/database/C14_Laptop_Power.svg | 1 + share/icons/database/C15_Scanner.png | Bin 955 -> 0 bytes share/icons/database/C15_Scanner.svg | 1 + share/icons/database/C16_Mozilla_Firebird.png | Bin 891 -> 0 bytes share/icons/database/C16_Mozilla_Firebird.svg | 1 + share/icons/database/C17_CDROM_Unmount.png | Bin 920 -> 0 bytes share/icons/database/C17_CDROM_Unmount.svg | 1 + share/icons/database/C18_Display.png | Bin 743 -> 0 bytes share/icons/database/C18_Display.svg | 1 + share/icons/database/C19_Mail_Generic.png | Bin 971 -> 0 bytes share/icons/database/C19_Mail_Generic.svg | 1 + share/icons/database/C20_Misc.png | Bin 914 -> 0 bytes share/icons/database/C20_Misc.svg | 1 + share/icons/database/C21_KOrganizer.png | Bin 930 -> 0 bytes share/icons/database/C21_KOrganizer.svg | 1 + share/icons/database/C22_ASCII.png | Bin 358 -> 0 bytes share/icons/database/C22_ASCII.svg | 1 + share/icons/database/C23_Icons.png | Bin 623 -> 0 bytes share/icons/database/C23_Icons.svg | 1 + .../database/C24_Connect_Established.png | Bin 1012 -> 0 bytes .../database/C24_Connect_Established.svg | 1 + share/icons/database/C25_Folder_Mail.png | Bin 709 -> 0 bytes share/icons/database/C25_Folder_Mail.svg | 1 + share/icons/database/C26_FileSave.png | Bin 691 -> 0 bytes share/icons/database/C26_FileSave.svg | 1 + share/icons/database/C27_NFS_Unmount.png | Bin 887 -> 0 bytes share/icons/database/C27_NFS_Unmount.svg | 1 + share/icons/database/C28_QuickTime.png | Bin 764 -> 0 bytes share/icons/database/C28_QuickTime.svg | 1 + share/icons/database/C29_KGPG_Term.png | Bin 751 -> 0 bytes share/icons/database/C29_KGPG_Term.svg | 1 + share/icons/database/C30_Konsole.png | Bin 826 -> 0 bytes share/icons/database/C30_Konsole.svg | 1 + share/icons/database/C31_FilePrint.png | Bin 875 -> 0 bytes share/icons/database/C31_FilePrint.svg | 1 + share/icons/database/C32_FSView.png | Bin 721 -> 0 bytes share/icons/database/C32_FSView.svg | 1 + share/icons/database/C33_Run.png | Bin 836 -> 0 bytes share/icons/database/C33_Run.svg | 1 + share/icons/database/C34_Configure.png | Bin 828 -> 0 bytes share/icons/database/C34_Configure.svg | 1 + share/icons/database/C35_KRFB.png | Bin 1021 -> 0 bytes share/icons/database/C35_KRFB.svg | 1 + share/icons/database/C36_Ark.png | Bin 929 -> 0 bytes share/icons/database/C36_Ark.svg | 1 + share/icons/database/C37_KPercentage.png | Bin 980 -> 0 bytes share/icons/database/C37_KPercentage.svg | 1 + share/icons/database/C38_Samba_Unmount.png | Bin 999 -> 0 bytes share/icons/database/C38_Samba_Unmount.svg | 1 + share/icons/database/C39_History.png | Bin 963 -> 0 bytes share/icons/database/C39_History.svg | 1 + share/icons/database/C40_Mail_Find.png | Bin 1018 -> 0 bytes share/icons/database/C40_Mail_Find.svg | 1 + share/icons/database/C41_VectorGfx.png | Bin 743 -> 0 bytes share/icons/database/C41_VectorGfx.svg | 1 + share/icons/database/C42_KCMMemory.png | Bin 752 -> 0 bytes share/icons/database/C42_KCMMemory.svg | 1 + share/icons/database/C43_EditTrash.png | Bin 880 -> 0 bytes share/icons/database/C43_EditTrash.svg | 1 + share/icons/database/C44_KNotes.png | Bin 786 -> 0 bytes share/icons/database/C44_KNotes.svg | 1 + share/icons/database/C45_Cancel.png | Bin 998 -> 0 bytes share/icons/database/C45_Cancel.svg | 1 + share/icons/database/C46_Help.png | Bin 963 -> 0 bytes share/icons/database/C46_Help.svg | 1 + share/icons/database/C47_KPackage.png | Bin 858 -> 0 bytes share/icons/database/C47_KPackage.svg | 1 + share/icons/database/C48_Folder.png | Bin 484 -> 0 bytes share/icons/database/C48_Folder.svg | 1 + share/icons/database/C49_Folder_Blue_Open.png | Bin 496 -> 0 bytes share/icons/database/C49_Folder_Blue_Open.svg | 1 + share/icons/database/C50_Folder_Tar.png | Bin 719 -> 0 bytes share/icons/database/C50_Folder_Tar.svg | 1 + share/icons/database/C51_Decrypted.png | Bin 826 -> 0 bytes share/icons/database/C51_Decrypted.svg | 1 + share/icons/database/C52_Encrypted.png | Bin 730 -> 0 bytes share/icons/database/C52_Encrypted.svg | 1 + share/icons/database/C53_Apply.png | Bin 759 -> 0 bytes share/icons/database/C53_Apply.svg | 1 + share/icons/database/C54_Signature.png | Bin 673 -> 0 bytes share/icons/database/C54_Signature.svg | 1 + share/icons/database/C55_Thumbnail.png | Bin 740 -> 0 bytes share/icons/database/C55_Thumbnail.svg | 1 + share/icons/database/C56_KAddressBook.png | Bin 834 -> 0 bytes share/icons/database/C56_KAddressBook.svg | 1 + share/icons/database/C57_View_Text.png | Bin 735 -> 0 bytes share/icons/database/C57_View_Text.svg | 1 + share/icons/database/C58_KGPG.png | Bin 939 -> 0 bytes share/icons/database/C58_KGPG.svg | 1 + share/icons/database/C58_KPGP.svg | 1 + .../database/C59_Package_Development.png | Bin 847 -> 0 bytes .../database/C59_Package_Development.svg | 1 + share/icons/database/C60_KFM_Home.png | Bin 869 -> 0 bytes share/icons/database/C60_KFM_Home.svg | 1 + share/icons/database/C61_Services.png | Bin 862 -> 0 bytes share/icons/database/C61_Services.svg | 1 + share/icons/database/C62_Tux.png | Bin 530 -> 0 bytes share/icons/database/C62_Tux.svg | 1 + share/icons/database/C63_Feather.png | Bin 406 -> 0 bytes share/icons/database/C63_Feather.svg | 1 + share/icons/database/C64_Apple.png | Bin 478 -> 0 bytes share/icons/database/C64_Apple.svg | 1 + share/icons/database/C65_W.png | Bin 452 -> 0 bytes share/icons/database/C65_W.svg | 1 + share/icons/database/C66_Money.png | Bin 285 -> 0 bytes share/icons/database/C66_Money.svg | 1 + share/icons/database/C67_Certificate.png | Bin 512 -> 0 bytes share/icons/database/C67_Certificate.svg | 1 + share/icons/database/C68_BlackBerry.png | Bin 516 -> 0 bytes share/icons/database/C68_BlackBerry.svg | 1 + share/icons/icons.qrc | 142 +++++++------- share/icons/minify.sh | 21 ++ share/windows/create-ico.sh | 11 +- share/wizard/background-pixmap.png | Bin 45338 -> 41772 bytes src/core/DatabaseIcons.cpp | 181 +++++++----------- src/core/DatabaseIcons.h | 30 +-- src/core/Entry.cpp | 33 ++-- src/core/Entry.h | 4 +- src/core/Global.h | 7 + src/core/Group.cpp | 45 ++--- src/core/Group.h | 5 +- src/core/Merger.cpp | 11 +- src/core/Metadata.cpp | 110 ++++------- src/core/Metadata.h | 18 +- src/fdosecrets/widgets/SettingsModels.cpp | 3 +- src/format/HtmlExporter.cpp | 5 +- src/format/KdbxXmlReader.cpp | 6 +- src/gui/EditWidgetIcons.cpp | 6 +- src/gui/EntryPreviewWidget.cpp | 12 +- src/gui/EntryPreviewWidget.h | 1 - src/gui/IconModels.cpp | 6 +- src/gui/entry/AutoTypeMatchModel.cpp | 8 +- src/gui/entry/EditEntryWidget.cpp | 2 +- src/gui/entry/EntryModel.cpp | 7 +- src/gui/group/EditGroupWidget.cpp | 2 +- src/gui/group/GroupModel.cpp | 9 +- src/keeshare/KeeShare.cpp | 14 +- src/keeshare/ShareExport.cpp | 2 +- tests/TestEntryModel.cpp | 2 +- tests/TestGroup.cpp | 14 +- tests/TestKeePass1Reader.cpp | 2 +- tests/TestKeePass2Format.cpp | 4 +- tests/TestMerge.cpp | 12 +- tests/gui/TestGuiPixmaps.cpp | 98 ++-------- tests/gui/TestGuiPixmaps.h | 3 - utils/{makeicons.sh => makeappicons.sh} | 0 utils/makedbicons.sh | 123 ++++++++++++ 182 files changed, 640 insertions(+), 680 deletions(-) delete mode 100644 share/crushpng.sh create mode 100644 share/icons/badges/0_ShareActive.svg create mode 100644 share/icons/badges/1_ShareInactive.svg create mode 100644 share/icons/badges/2_Expired.svg delete mode 100644 share/icons/database/C00_Password.png create mode 100644 share/icons/database/C00_Password.svg delete mode 100644 share/icons/database/C01_Package_Network.png create mode 100644 share/icons/database/C01_Package_Network.svg delete mode 100644 share/icons/database/C02_MessageBox_Warning.png create mode 100644 share/icons/database/C02_MessageBox_Warning.svg delete mode 100644 share/icons/database/C03_Server.png create mode 100644 share/icons/database/C03_Server.svg delete mode 100644 share/icons/database/C04_Klipper.png create mode 100644 share/icons/database/C04_Klipper.svg delete mode 100644 share/icons/database/C05_Edu_Languages.png create mode 100644 share/icons/database/C05_Edu_Languages.svg delete mode 100644 share/icons/database/C06_KCMDF.png create mode 100644 share/icons/database/C06_KCMDF.svg delete mode 100644 share/icons/database/C07_Kate.png create mode 100644 share/icons/database/C07_Kate.svg delete mode 100644 share/icons/database/C08_Socket.png create mode 100644 share/icons/database/C08_Socket.svg delete mode 100644 share/icons/database/C09_Identity.png create mode 100644 share/icons/database/C09_Identity.svg delete mode 100644 share/icons/database/C10_Kontact.png create mode 100644 share/icons/database/C10_Kontact.svg delete mode 100644 share/icons/database/C11_Camera.png create mode 100644 share/icons/database/C11_Camera.svg delete mode 100644 share/icons/database/C12_IRKickFlash.png create mode 100644 share/icons/database/C12_IRKickFlash.svg delete mode 100644 share/icons/database/C13_KGPG_Key3.png create mode 100644 share/icons/database/C13_KGPG_Key3.svg delete mode 100644 share/icons/database/C14_Laptop_Power.png create mode 100644 share/icons/database/C14_Laptop_Power.svg delete mode 100644 share/icons/database/C15_Scanner.png create mode 100644 share/icons/database/C15_Scanner.svg delete mode 100644 share/icons/database/C16_Mozilla_Firebird.png create mode 100644 share/icons/database/C16_Mozilla_Firebird.svg delete mode 100644 share/icons/database/C17_CDROM_Unmount.png create mode 100644 share/icons/database/C17_CDROM_Unmount.svg delete mode 100644 share/icons/database/C18_Display.png create mode 100644 share/icons/database/C18_Display.svg delete mode 100644 share/icons/database/C19_Mail_Generic.png create mode 100644 share/icons/database/C19_Mail_Generic.svg delete mode 100644 share/icons/database/C20_Misc.png create mode 100644 share/icons/database/C20_Misc.svg delete mode 100644 share/icons/database/C21_KOrganizer.png create mode 100644 share/icons/database/C21_KOrganizer.svg delete mode 100644 share/icons/database/C22_ASCII.png create mode 100644 share/icons/database/C22_ASCII.svg delete mode 100644 share/icons/database/C23_Icons.png create mode 100644 share/icons/database/C23_Icons.svg delete mode 100644 share/icons/database/C24_Connect_Established.png create mode 100644 share/icons/database/C24_Connect_Established.svg delete mode 100644 share/icons/database/C25_Folder_Mail.png create mode 100644 share/icons/database/C25_Folder_Mail.svg delete mode 100644 share/icons/database/C26_FileSave.png create mode 100644 share/icons/database/C26_FileSave.svg delete mode 100644 share/icons/database/C27_NFS_Unmount.png create mode 100644 share/icons/database/C27_NFS_Unmount.svg delete mode 100644 share/icons/database/C28_QuickTime.png create mode 100644 share/icons/database/C28_QuickTime.svg delete mode 100644 share/icons/database/C29_KGPG_Term.png create mode 100644 share/icons/database/C29_KGPG_Term.svg delete mode 100644 share/icons/database/C30_Konsole.png create mode 100644 share/icons/database/C30_Konsole.svg delete mode 100644 share/icons/database/C31_FilePrint.png create mode 100644 share/icons/database/C31_FilePrint.svg delete mode 100644 share/icons/database/C32_FSView.png create mode 100644 share/icons/database/C32_FSView.svg delete mode 100644 share/icons/database/C33_Run.png create mode 100644 share/icons/database/C33_Run.svg delete mode 100644 share/icons/database/C34_Configure.png create mode 100644 share/icons/database/C34_Configure.svg delete mode 100644 share/icons/database/C35_KRFB.png create mode 100644 share/icons/database/C35_KRFB.svg delete mode 100644 share/icons/database/C36_Ark.png create mode 100644 share/icons/database/C36_Ark.svg delete mode 100644 share/icons/database/C37_KPercentage.png create mode 100644 share/icons/database/C37_KPercentage.svg delete mode 100644 share/icons/database/C38_Samba_Unmount.png create mode 100644 share/icons/database/C38_Samba_Unmount.svg delete mode 100644 share/icons/database/C39_History.png create mode 100644 share/icons/database/C39_History.svg delete mode 100644 share/icons/database/C40_Mail_Find.png create mode 100644 share/icons/database/C40_Mail_Find.svg delete mode 100644 share/icons/database/C41_VectorGfx.png create mode 100644 share/icons/database/C41_VectorGfx.svg delete mode 100644 share/icons/database/C42_KCMMemory.png create mode 100644 share/icons/database/C42_KCMMemory.svg delete mode 100644 share/icons/database/C43_EditTrash.png create mode 100644 share/icons/database/C43_EditTrash.svg delete mode 100644 share/icons/database/C44_KNotes.png create mode 100644 share/icons/database/C44_KNotes.svg delete mode 100644 share/icons/database/C45_Cancel.png create mode 100644 share/icons/database/C45_Cancel.svg delete mode 100644 share/icons/database/C46_Help.png create mode 100644 share/icons/database/C46_Help.svg delete mode 100644 share/icons/database/C47_KPackage.png create mode 100644 share/icons/database/C47_KPackage.svg delete mode 100644 share/icons/database/C48_Folder.png create mode 100644 share/icons/database/C48_Folder.svg delete mode 100644 share/icons/database/C49_Folder_Blue_Open.png create mode 100644 share/icons/database/C49_Folder_Blue_Open.svg delete mode 100644 share/icons/database/C50_Folder_Tar.png create mode 100644 share/icons/database/C50_Folder_Tar.svg delete mode 100644 share/icons/database/C51_Decrypted.png create mode 100644 share/icons/database/C51_Decrypted.svg delete mode 100644 share/icons/database/C52_Encrypted.png create mode 100644 share/icons/database/C52_Encrypted.svg delete mode 100644 share/icons/database/C53_Apply.png create mode 100644 share/icons/database/C53_Apply.svg delete mode 100644 share/icons/database/C54_Signature.png create mode 100644 share/icons/database/C54_Signature.svg delete mode 100644 share/icons/database/C55_Thumbnail.png create mode 100644 share/icons/database/C55_Thumbnail.svg delete mode 100644 share/icons/database/C56_KAddressBook.png create mode 100644 share/icons/database/C56_KAddressBook.svg delete mode 100644 share/icons/database/C57_View_Text.png create mode 100644 share/icons/database/C57_View_Text.svg delete mode 100644 share/icons/database/C58_KGPG.png create mode 100644 share/icons/database/C58_KGPG.svg create mode 100644 share/icons/database/C58_KPGP.svg delete mode 100644 share/icons/database/C59_Package_Development.png create mode 100644 share/icons/database/C59_Package_Development.svg delete mode 100644 share/icons/database/C60_KFM_Home.png create mode 100644 share/icons/database/C60_KFM_Home.svg delete mode 100644 share/icons/database/C61_Services.png create mode 100644 share/icons/database/C61_Services.svg delete mode 100644 share/icons/database/C62_Tux.png create mode 100644 share/icons/database/C62_Tux.svg delete mode 100644 share/icons/database/C63_Feather.png create mode 100644 share/icons/database/C63_Feather.svg delete mode 100644 share/icons/database/C64_Apple.png create mode 100644 share/icons/database/C64_Apple.svg delete mode 100644 share/icons/database/C65_W.png create mode 100644 share/icons/database/C65_W.svg delete mode 100644 share/icons/database/C66_Money.png create mode 100644 share/icons/database/C66_Money.svg delete mode 100644 share/icons/database/C67_Certificate.png create mode 100644 share/icons/database/C67_Certificate.svg delete mode 100644 share/icons/database/C68_BlackBerry.png create mode 100644 share/icons/database/C68_BlackBerry.svg create mode 100644 share/icons/minify.sh rename utils/{makeicons.sh => makeappicons.sh} (100%) create mode 100644 utils/makedbicons.sh diff --git a/COPYING b/COPYING index fbca3c12c..11f5ee0b7 100644 --- a/COPYING +++ b/COPYING @@ -58,82 +58,89 @@ Files: share/icons/application/scalable/apps/keepassxc.svg Copyright: 2016, Lorenzo Stella License: LGPL-2 -Files: share/icons/database/C00_Password.png - share/icons/database/C01_Package_Network.png - share/icons/database/C02_MessageBox_Warning.png - share/icons/database/C03_Server.png - share/icons/database/C04_Klipper.png - share/icons/database/C05_Edu_Languages.png - share/icons/database/C06_KCMDF.png - share/icons/database/C07_Kate.png - share/icons/database/C08_Socket.png - share/icons/database/C09_Identity.png - share/icons/database/C10_Kontact.png - share/icons/database/C11_Camera.png - share/icons/database/C12_IRKickFlash.png - share/icons/database/C13_KGPG_Key3.png - share/icons/database/C14_Laptop_Power.png - share/icons/database/C15_Scanner.png - share/icons/database/C16_Mozilla_Firebird.png - share/icons/database/C17_CDROM_Unmount.png - share/icons/database/C18_Display.png - share/icons/database/C19_Mail_Generic.png - share/icons/database/C20_Misc.png - share/icons/database/C21_KOrganizer.png - share/icons/database/C22_ASCII.png - share/icons/database/C23_Icons.png - share/icons/database/C24_Connect_Established.png - share/icons/database/C25_Folder_Mail.png - share/icons/database/C26_FileSave.png - share/icons/database/C27_NFS_Unmount.png - share/icons/database/C28_QuickTime.png - share/icons/database/C29_KGPG_Term.png - share/icons/database/C30_Konsole.png - share/icons/database/C31_FilePrint.png - share/icons/database/C32_FSView.png - share/icons/database/C33_Run.png - share/icons/database/C34_Configure.png - share/icons/database/C35_KRFB.png - share/icons/database/C36_Ark.png - share/icons/database/C37_KPercentage.png - share/icons/database/C38_Samba_Unmount.png - share/icons/database/C39_History.png - share/icons/database/C40_Mail_Find.png - share/icons/database/C41_VectorGfx.png - share/icons/database/C42_KCMMemory.png - share/icons/database/C43_EditTrash.png - share/icons/database/C44_KNotes.png - share/icons/database/C45_Cancel.png - share/icons/database/C46_Help.png - share/icons/database/C47_KPackage.png - share/icons/database/C48_Folder.png - share/icons/database/C49_Folder_Blue_Open.png - share/icons/database/C50_Folder_Tar.png - share/icons/database/C51_Decrypted.png - share/icons/database/C52_Encrypted.png - share/icons/database/C53_Apply.png - share/icons/database/C54_Signature.png - share/icons/database/C55_Thumbnail.png - share/icons/database/C56_KAddressBook.png - share/icons/database/C57_View_Text.png - share/icons/database/C58_KGPG.png - share/icons/database/C59_Package_Development.png - share/icons/database/C60_KFM_Home.png - share/icons/database/C61_Services.png -Copyright: 2003-2004, David Vignoni -License: LGPL-2.1 -Comment: from Nuvola icon theme +Files: share/icons/database/C00_Password.svg + share/icons/database/C01_Package_Network.svg + share/icons/database/C02_MessageBox_Warning.svg + share/icons/database/C03_Server.svg + share/icons/database/C04_Klipper.svg + share/icons/database/C05_Edu_Languages.svg + share/icons/database/C06_KCMDF.svg + share/icons/database/C08_Socket.svg + share/icons/database/C09_Identity.svg + share/icons/database/C10_Kontact.svg + share/icons/database/C11_Camera.svg + share/icons/database/C12_IRKickFlash.svg + share/icons/database/C13_KGPG_Key3.svg + share/icons/database/C14_Laptop_Power.svg + share/icons/database/C15_Scanner.svg + share/icons/database/C16_Mozilla_Firebird.svg + share/icons/database/C19_Mail_Generic.svg + share/icons/database/C20_Misc.svg + share/icons/database/C21_KOrganizer.svg + share/icons/database/C22_ASCII.svg + share/icons/database/C23_Icons.svg + share/icons/database/C24_Connect_Established.svg + share/icons/database/C25_Folder_Mail.svg + share/icons/database/C28_QuickTime.svg + share/icons/database/C29_KGPG_Term.svg + share/icons/database/C30_Konsole.svg + share/icons/database/C31_FilePrint.svg + share/icons/database/C32_FSView.svg + share/icons/database/C33_Run.svg + share/icons/database/C34_Configure.svg + share/icons/database/C36_Ark.svg + share/icons/database/C39_History.svg + share/icons/database/C40_Mail_Find.svg + share/icons/database/C41_VectorGfx.svg + share/icons/database/C42_KCMMemory.svg + share/icons/database/C43_EditTrash.svg + share/icons/database/C47_KPackage.svg + share/icons/database/C48_Folder.svg + share/icons/database/C49_Folder_Blue_Open.svg + share/icons/database/C50_Folder_Tar.svg + share/icons/database/C55_Thumbnail.svg + share/icons/database/C56_KAddressBook.svg + share/icons/database/C57_View_Text.svg + share/icons/database/C58_KGPG.svg + share/icons/database/C59_Package_Development.svg + share/icons/database/C60_KFM_Home.svg + share/icons/database/C62_Tux.svg + share/icons/database/C63_Feather.svg + share/icons/database/C65_W.svg + share/icons/database/C67_Certificate.svg + share/icons/database/C68_BlackBerry.svg +Copyright: none +License: MIT +Comment: Taken from https://github.com/icons8/flat-color-icons -Files: share/icons/application/scalable/actions/application-exit.svg - share/icons/application/scalable/actions/auto-type.svg - share/icons/application/scalable/actions/chronometer.svg - share/icons/application/scalable/actions/clipboard-text.svg - share/icons/application/scalable/actions/configure.svg - share/icons/application/scalable/actions/database-change-key.svg - share/icons/application/scalable/actions/database-lock.svg - share/icons/application/scalable/actions/dialog-close.svg - share/icons/application/scalable/actions/dialog-ok.svg - share/icons/application/scalable/actions/document-close.svg +Files: share/icons/badges/0_ShareActive.svg + share/icons/badges/1_ShareInactive.svg + share/icons/database/C07_Kate.svg + share/icons/database/C17_CDROM_Unmount.svg + share/icons/database/C18_Display.svg + share/icons/database/C26_FileSave.svg + share/icons/database/C27_NFS_Unmount.svg + share/icons/database/C35_KRFB.svg + share/icons/database/C38_Samba_Unmount.svg + share/icons/database/C44_KNotes.svg + share/icons/database/C51_Decrypted.svg + share/icons/database/C52_Encrypted.svg + share/icons/database/C54_Signature.svg + share/icons/database/C66_Money.svg +Copyright: none +License: CC0 +Comment: Taken from https://github.com/paomedia/small-n-flat + +Files: share/icons/badges/2_Expired.svg + share/icons/database/C37_KPercentage.svg + share/icons/database/C45_Cancel.svg + share/icons/database/C46_Help.svg + share/icons/database/C53_Apply.svg + share/icons/database/C61_Services.svg +Copyright: 2020 KeePassXC Team +License: MIT + +Files: share/icons/application/scalable/actions/document-close.svg share/icons/application/scalable/actions/document-edit.svg share/icons/application/scalable/actions/document-new.svg share/icons/application/scalable/actions/document-open.svg @@ -172,7 +179,6 @@ Files: share/icons/application/scalable/actions/application-exit.svg share/icons/application/scalable/actions/url-copy.svg share/icons/application/scalable/actions/username-copy.svg share/icons/application/scalable/actions/view-history.svg - share/icons/application/scalable/apps/freedesktop.svg share/icons/application/scalable/apps/internet-web-browser.svg share/icons/application/scalable/apps/keepassxc.svg share/icons/application/scalable/apps/keepassxc-dark.svg @@ -191,27 +197,6 @@ Copyright: 2019 Austin Andrews License: SIL OPEN FONT LICENSE Version 1.1 Comment: Taken from Material Design icon set (https://github.com/templarian/MaterialDesign/) -Files: share/icons/database/C62_Tux.png - share/icons/database/C63_Feather.png - share/icons/database/C64_Apple.png - share/icons/database/C67_Certificate.png - share/icons/database/C68_BlackBerry.png -Copyright: Mairin Duffy - Sarah Owens - James Birkett - Dominik Reichl -License: CC0 -Comment: C62_Tux.png from https://openclipart.org/detail/103855 - C63_Feather.png from http://openclipart.org/detail/122017 - C64_Apple.png based on http://openclipart.org/detail/24319 - C67_Certificate.png based on https://openclipart.org/detail/16729 - C68_BlackBerry.png from https://openclipart.org/detail/4465 - -Files: share/icons/database/C65_W.png - share/icons/database/C66_Money.png -Copyright: none -License: public-domain - Files: src/streams/qtiocompressor.* src/streams/QtIOCompressor tests/modeltest.* @@ -237,5 +222,6 @@ Copyright: GPL-2+ Comment: from Freedesktop.org website Files: share/icons/application/scalable/actions/hibp.svg + share/icons/database/C64_Apple.svg Copyright: GPL-2+ Comment: from the Simple Icons repo (https://github.com/simple-icons/simple-icons/) diff --git a/share/CMakeLists.txt b/share/CMakeLists.txt index e07e6f082..0dde0fecf 100644 --- a/share/CMakeLists.txt +++ b/share/CMakeLists.txt @@ -39,97 +39,19 @@ install(FILES icons/application/256x256/apps/keepassxc.png DESTINATION ${DATA_IN install(DIRECTORY docs/ DESTINATION ${DATA_INSTALL_DIR}/docs FILES_MATCHING PATTERN "*.pdf") -add_custom_target(icons - # SVG to PNGs for KeePassXC - COMMAND inkscape -z -w 16 -h 16 - icons/application/scalable/apps/keepassxc.svg -e icons/application/16x16/apps/keepassxc.png - COMMAND inkscape -z -w 24 -h 24 - icons/application/scalable/apps/keepassxc.svg -e icons/application/24x24/apps/keepassxc.png - COMMAND inkscape -z -w 32 -h 32 - icons/application/scalable/apps/keepassxc.svg -e icons/application/32x32/apps/keepassxc.png - COMMAND inkscape -z -w 48 -h 48 - icons/application/scalable/apps/keepassxc.svg -e icons/application/48x48/apps/keepassxc.png - COMMAND inkscape -z -w 64 -h 64 - icons/application/scalable/apps/keepassxc.svg -e icons/application/64x64/apps/keepassxc.png - COMMAND inkscape -z -w 128 -h 128 - icons/application/scalable/apps/keepassxc.svg -e icons/application/128x128/apps/keepassxc.png - COMMAND inkscape -z -w 256 -h 256 - icons/application/scalable/apps/keepassxc.svg -e icons/application/256x256/apps/keepassxc.png - # SVG to PNGs for KeePassXC - COMMAND inkscape -z -w 16 -h 16 - icons/application/scalable/apps/keepassxc-dark.svg -e icons/application/16x16/apps/keepassxc-dark.png - COMMAND inkscape -z -w 24 -h 24 - icons/application/scalable/apps/keepassxc-dark.svg -e icons/application/24x24/apps/keepassxc-dark.png - COMMAND inkscape -z -w 32 -h 32 - icons/application/scalable/apps/keepassxc-dark.svg -e icons/application/32x32/apps/keepassxc-dark.png - COMMAND inkscape -z -w 48 -h 48 - icons/application/scalable/apps/keepassxc-dark.svg -e icons/application/48x48/apps/keepassxc-dark.png - COMMAND inkscape -z -w 64 -h 64 - icons/application/scalable/apps/keepassxc-dark.svg -e icons/application/64x64/apps/keepassxc-dark.png - COMMAND inkscape -z -w 128 -h 128 - icons/application/scalable/apps/keepassxc-dark.svg -e icons/application/128x128/apps/keepassxc-dark.png - COMMAND inkscape -z -w 256 -h 256 - icons/application/scalable/apps/keepassxc-dark.svg -e icons/application/256x256/apps/keepassxc-dark.png +add_custom_target(icons) +add_custom_command(TARGET icons + COMMAND bash ./icons/minify.sh + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) +if(APPLE) + add_custom_command(TARGET icons + COMMAND png2icns macosx/keepassxc.icns icons/application/256x256/apps/keepassxc.png + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) +endif() - # SVG to PNGs for KeePassXC - COMMAND inkscape -z -w 16 -h 16 - icons/application/scalable/apps/keepassxc-locked.svg -e icons/application/16x16/apps/keepassxc-locked.png - COMMAND inkscape -z -w 24 -h 24 - icons/application/scalable/apps/keepassxc-locked.svg -e icons/application/24x24/apps/keepassxc-locked.png - COMMAND inkscape -z -w 32 -h 32 - icons/application/scalable/apps/keepassxc-locked.svg -e icons/application/32x32/apps/keepassxc-locked.png - COMMAND inkscape -z -w 48 -h 48 - icons/application/scalable/apps/keepassxc-locked.svg -e icons/application/48x48/apps/keepassxc-locked.png - COMMAND inkscape -z -w 64 -h 64 - icons/application/scalable/apps/keepassxc-locked.svg -e icons/application/64x64/apps/keepassxc-locked.png - COMMAND inkscape -z -w 128 -h 128 - icons/application/scalable/apps/keepassxc-locked.svg -e icons/application/128x128/apps/keepassxc-locked.png - COMMAND inkscape -z -w 256 -h 256 - icons/application/scalable/apps/keepassxc-locked.svg -e icons/application/256x256/apps/keepassxc-locked.png - - # SVG to PNGs for KeePassXC - COMMAND inkscape -z -w 16 -h 16 - icons/application/scalable/apps/keepassxc-unlocked.svg -e icons/application/16x16/apps/keepassxc-unlocked.png - COMMAND inkscape -z -w 24 -h 24 - icons/application/scalable/apps/keepassxc-unlocked.svg -e icons/application/24x24/apps/keepassxc-unlocked.png - COMMAND inkscape -z -w 32 -h 32 - icons/application/scalable/apps/keepassxc-unlocked.svg -e icons/application/32x32/apps/keepassxc-unlocked.png - COMMAND inkscape -z -w 48 -h 48 - icons/application/scalable/apps/keepassxc-unlocked.svg -e icons/application/48x48/apps/keepassxc-unlocked.png - COMMAND inkscape -z -w 64 -h 64 - icons/application/scalable/apps/keepassxc-unlocked.svg -e icons/application/64x64/apps/keepassxc-unlocked.png - COMMAND inkscape -z -w 128 -h 128 - icons/application/scalable/apps/keepassxc-unlocked.svg -e icons/application/128x128/apps/keepassxc-unlocked.png - COMMAND inkscape -z -w 256 -h 256 - icons/application/scalable/apps/keepassxc-unlocked.svg -e icons/application/256x256/apps/keepassxc-unlocked.png - - # SVG to PNGs for KeePassXC MIME-Type - COMMAND inkscape -z -w 16 -h 16 - icons/application/scalable/mimetypes/application-x-keepassxc.svg -e icons/application/16x16/mimetypes/application-x-keepassxc.png - COMMAND inkscape -z -w 22 -h 22 - icons/application/scalable/mimetypes/application-x-keepassxc.svg -e icons/application/22x22/mimetypes/application-x-keepassxc.png - COMMAND inkscape -z -w 32 -h 32 - icons/application/scalable/mimetypes/application-x-keepassxc.svg -e icons/application/32x32/mimetypes/application-x-keepassxc.png - COMMAND inkscape -z -w 64 -h 64 - icons/application/scalable/mimetypes/application-x-keepassxc.svg -e icons/application/64x64/mimetypes/application-x-keepassxc.png - COMMAND inkscape -z -w 128 -h 128 - icons/application/scalable/mimetypes/application-x-keepassxc.svg -e icons/application/128x128/mimetypes/application-x-keepassxc.png - - # Shrink PNGs using pngcrush - COMMAND bash ./crushpng.sh icons - - # ICNS for MacOS - COMMAND png2icns macosx/keepassxc.icns - icons/application/16x16/apps/keepassxc.png - icons/application/32x32/apps/keepassxc.png - icons/application/48x48/apps/keepassxc.png - icons/application/128x128/apps/keepassxc.png - icons/application/256x256/apps/keepassxc.png - - # ICO for Windows +# ICO for Windows +add_custom_command(TARGET icons COMMAND bash ./windows/create-ico.sh icons/application/scalable/apps/keepassxc.svg windows/keepassxc.ico COMMAND bash ./windows/create-ico.sh icons/application/scalable/mimetypes/application-x-keepassxc.svg windows/keepassxc-kdbx.ico - - VERBATIM WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) diff --git a/share/crushpng.sh b/share/crushpng.sh deleted file mode 100644 index f36176d3c..000000000 --- a/share/crushpng.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash - -if [[ -z $1 ]]; then - echo "You must supply a root folder!" - exit 1 -fi - -find "$1" -iname '*png' -exec pngcrush -ow -brute {} \; \ No newline at end of file diff --git a/share/icons/badges/0_ShareActive.svg b/share/icons/badges/0_ShareActive.svg new file mode 100644 index 000000000..c9232eb62 --- /dev/null +++ b/share/icons/badges/0_ShareActive.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/share/icons/badges/1_ShareInactive.svg b/share/icons/badges/1_ShareInactive.svg new file mode 100644 index 000000000..c458b211a --- /dev/null +++ b/share/icons/badges/1_ShareInactive.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/share/icons/badges/2_Expired.svg b/share/icons/badges/2_Expired.svg new file mode 100644 index 000000000..7adda1bf9 --- /dev/null +++ b/share/icons/badges/2_Expired.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/share/icons/database/C00_Password.png b/share/icons/database/C00_Password.png deleted file mode 100644 index 86fa47f04cca136d546fc32256cdc29299331a1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 808 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfoYegi(`nz>DHcVpEHaM z$M^4VuU@14F7M>k((t>U;ZxSFG2LP?`^=?h{cba69=AzamsGY{L``%3jT80%63%3o zNeiwv%QZ|jeY~ejVEOmZcQ5w+J81Lyrd@sQ_rD4GJ)HHQ6V?c}pJkh4;CCf%&cd}h zcUQjC^$j+=weZ3+CpRmV7H5Wkq8eLW9z^sgZm)9vaQb`r@d@${?`h_TnA zvx?^2TjaJi2OJe%rfV1=Eh&Ers#6kJ;@e1X*R)D zVSk58?~;1CleH1CyjCxtq{F7vFu^L&cT$A)`+ z1_B)lGhIJvoYdN8eb^$_!I;5z+xe{rC(89V%`Ci;IKS!cYZTh~E|#lxMjtZdP!MLAFki5H?dC@l%n!F6Ix^#nwCgXq|JjXy`CaPXb*NZQ z|FfavO~m1HcBK~_$2Ul694h~0oV3wWS1vjzXXW)Sr(HGcS@^bi$W#hD?dwhW|1{uU z?CM8vQ;o!Xj$1oK^v%CHE${HND?g@qA6+OHzx%+!G=mGP(&FE;%sUg*_hiP=b)5p| zUNsmoX#S8ro)dlQXKb6_``}LJyoqn*PG1XlJhM^j_tgLyHWzER$0hSN9(_H{;t$K0 z`_o_UwCn4$l#*9?#-tQ7!R_zkbA@xK&sEqRS~4{wWB!6VGrwu47)~%KI7rw&(7MRG zefO~owT_3+ten-)ut?Rh;m6zW_YZ_L?@}@hiIiU+epS \ No newline at end of file diff --git a/share/icons/database/C01_Package_Network.png b/share/icons/database/C01_Package_Network.png deleted file mode 100644 index dceb0a528f3bd9fd717e2ef0dfb0a69d2c5690ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 985 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfjQgL#WBRfKXr1fPjo7S z!};>++xNC@X}xr-OuC-A@t}n8vHnfHJ7-Ev|2bJlZIx8!LvW+-&J`L-Dv+v$6M z$?WXpzkDR~OQOZ5L=je_!^@li^uf7T421`8CJyU%Otgn`7KxYvuXUd!}vvb>AZYQq{Ipp9}p5u3Y|JbNs{2;@pG# zYFWE}n(Rsx@ID@SGeUKGckt8G7jA|x&YO0<^nCpP&xy6!-!3&D5cCg@KYZeK`kh9x z{f>t34=(&!cx#SJP~xGJra?D#Hiodd_CHvEQ)Sh=%;;Tqu?AhQlf7EiKWuw{F(y|< z?pRvh;k3Jr0c%<&YfihSB=T8m>7>a%VFJD4Kb}7mnfQ9Ct|8gU!wN`Rt_MlsM4@5(--!J_y?6| z!vg=!NV=|7x>w \ No newline at end of file diff --git a/share/icons/database/C02_MessageBox_Warning.png b/share/icons/database/C02_MessageBox_Warning.png deleted file mode 100644 index 0b8a56f4705234a112ae700359593dcb73d4f598..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 805 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfoZ#^i(`mIZ|k= zN9#*huUfrp^&3BRL)+Za=Qq`o56s+VnkmBaxLYz_A*pPUUYY}&Yv9bg3k(btI<)_@ zh3B;xDC`i3>3Vm^bAsFL@jmv%Fv4>z?yhNaDQMw)3jf zrvCf2uad1|>r_9L*pF-`GukxQz1{seJoVT6-HnO2&7C(SB^XEZO)%KF*sgS=L2*mt z{45^7_qNv?R|<5PDVAI>lx1C#^Exc`+aCYbyl4G;VmzUyqquiR)~Lp zYZ<=g+JVmt_Rn8X-|$dgy>4QG&drn^ij6F%H=Vg(KF?~dX-xmon7;STsRc1*;aZvM zssF_qwRcCUDDWJJD4ial?SD0`+dh1u!GXE#{69Y5v%T^}#qrqUAicSH2mkR2tW&yn zZsEZa&vyjr*c{^Qro?d3&{w_N;i7Uw2e0f3XPpTF-rWDuj2bNpJo0h?gZVI3_=JYi4D&&+wg} z8*lzh&F$82_w7q>%iAj*o}ppbxm2x7wC}Z|s*aAHqNvB(iHR;Pj&3vdT-%jwDt%V` z{L)#0N{drO7Cw?#$vZ{p#Q$j>p-q>hmI_Y^(@30@pfJ_Q{>Z1N|MgQ;E`3quEnr|^ OVDNPHb6Mw<&;$T;b!(~s diff --git a/share/icons/database/C02_MessageBox_Warning.svg b/share/icons/database/C02_MessageBox_Warning.svg new file mode 100644 index 000000000..f982f76ee --- /dev/null +++ b/share/icons/database/C02_MessageBox_Warning.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/share/icons/database/C03_Server.png b/share/icons/database/C03_Server.png deleted file mode 100644 index 00ed933167fc0ca708d00d7ce76c445d38dc9db3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfoYGYi(`mIZ|>yN{=$JG z$IkDWS#~QZD8tlso>Pa$g(EDJq9(W`Us_^k<|h8CkJa%%gLp>Fj}Bh$*a;IlIFkg# zTQ(Foe!RHh-~y9_E=#XCG`!rxtXr~du3!2dsqo=g!Y_@8^8JYrSOM>jDF( zg#uNt7HFs@%;<{Rf4_eJ{{8<~9X>cwTl;=+bo3uLrH$Jpx@&8+Jb&JIH@GciE6a_yGI|`lHJI6Yd)*T=U#hQJ&wZd!=hv}W`LomyK) z)r13d#JHz1l<*n^-f^E`6SCl6=#xDUn@>M=JHCVQ;tS>6v@|WX)4!FcHIzhYOcUw+ z7_!^(po+q`!U-;t&z|2u_~XY5H>01A6({vB>N4?mF!}Z4*y>Jk=DCgQ9MV68gr450 zm-W+I=GZZ}X~vQd=Ny0Rx%2MS1D`dsg{!Ol&cA#6H0|eG-x(Eh`-`eiSYN#p;Xbh^ z*Hq$_uj!Smi>67;m_2(l+k*KoRi77F8Qj|V`gY`(x%q!xS6DC}YTacVa{TLcou!5+ zx0;F`|CsLa@29|mzb@C$K32>|oDz8sA`wIj \ No newline at end of file diff --git a/share/icons/database/C04_Klipper.png b/share/icons/database/C04_Klipper.png deleted file mode 100644 index a451fe1d25a02a1cd0b98f8ec08958a35aa2464d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 823 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zz?S6g?!xdN1Q+aGKAC}mfwRCPvY3H^!2^ulPG;LNFfc9hba4!^=v_M5H$%9R;b^__ z%%A5~dOgFp?^>!FrW;YXG%SWy+=ioxomKG56JLQlM<-Vaf7{00G|wf{<<8-C;rxjt&m%cdlKK5*dG+nr16`FhvL`$Re2n5MXCn`Ta8$CA{JyxRg!5>64E zhfPe^&Hw-V(?s#2{DlEOZai3D8gr|x=DwAg3`^{VEbV2_lnzA*Z58qJ7Tl(i{W~~i zw@^-<>8`2b=NT?AUf?La?;O!~Kw<=#=_uyh%a?iJ%q{lN4=h*+`HlJ#9o3kQ5+|PQA(;G+Yl%tcx z&M&X=V%(#1_=t%LdsuPyan>sLYY8{lx;H<&bdH@{NWDP(#1Xw&T^=*J%GdQse^X+S zxxsi=jAQ2GQ#XXmmiyL4DgCnIttqhC&)F+ELDxshWUl*>jZ4HF1sdg@@(j+(ri&J8 zL~gtB=D*E?7gtSJ>}_o={BlfX|Ff<;yMK3O39s^7sh>EFv6E~#%mX6LUdF_w$k|M^1x)k`4x?EopGi7KTaG{pP{oM zsYA8KbsAfZ=h}akKKB>%hs8S`e)fC8dIkmt$r9IylHmNblJdl&R0hYC{G?O`&)mfH a)S%SFl*+=BsWuD@3=E#GelF{r5}E)7=WtX2 diff --git a/share/icons/database/C04_Klipper.svg b/share/icons/database/C04_Klipper.svg new file mode 100644 index 000000000..88ac1c50c --- /dev/null +++ b/share/icons/database/C04_Klipper.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/share/icons/database/C05_Edu_Languages.png b/share/icons/database/C05_Edu_Languages.png deleted file mode 100644 index d36534f597dba99e04b6431f39727d18a8724ae9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 919 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfmzej#WBP}F!x}t&y`Y! z10Uc2fB9~Qb<1VtmTg>4EY-UNt%`CYlBY~Nyyz_3Y16q^XPd=ub#>jh;cC?D(EO^! ztDi}&-WbK}dU~d?>Qr~njm^F@G-b*Q?)-iK?*E@`qw2#yYL?8qt9s|TzLx6x+iR9= zme_W@M(_C6qvnwY@#<0Uz|G7V3tK<6%&VN~H^T3Kv;akYn z{M-5p6ZV*0j9*#%f9;B@=a1JZM_2Rh6PxPPpuX_x`<2y?Zm6rOt5>z(3$Q(ZxLCGH z+Q~iM=1<-CX>D_7J-YYwr#7?faXZ_4tFGvohnl-CJs7>f>p`VL>w>M>URvp4ES2e`D|8sm@YQ6tgc~xVET7dgVI)-)$wTm)(xK$=69vaNs_8cA~0`^23wS z$^L=&1zxY|&b@4~OwpG27t@kSCU()vuG9W+IQRYNSzg6}7y+|CmIlu6pUbP9{qi9^ z%kxIR_LQWXeo6Xwj%?&5IdfH0yZEp7 zgGIkypRjn>Rl083s$Iq*o5T6+@ANGDwL@G!x$=kkvSn&%)0Z8$n(ku9dQoJC!?j0@ zUtiyejd*a#`SIarjf;9+r-iX}9lLaY@1L6LNvApgDm8hAu{J17V77S|ToKc^ZU3#p zXFK<@Yw=Et{P&JKh*^E-y%!7LW~CQb*1kRR;DxG;A$O$%qtAiltI7G->x%z<(_F|M zd#7Ns(!ZPTO8@TdPP!l`?72}v&G>MV`|-YLhY6uV3Lov4eqB55v97Owd&}cZo}2<5 zrjKr4^=Y;5N?bSL`Xm*u?uo1aE;esbSBrGk)&1@&cGhxJT;Bx4_GkRc+D2u&91fmN z{%ypfJ>lwxZI``f+iz%_b!z#NO8ve`@hS^gE^^hWsKh)>*ugrXSZCJf9ev?vtgcMF zyt#bUcJ2OYQ^girDw;fGR(yDhuW!AB+xg \ No newline at end of file diff --git a/share/icons/database/C06_KCMDF.png b/share/icons/database/C06_KCMDF.png deleted file mode 100644 index 331895758306b94d8f05a577f6643e3547f07c7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 801 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfoZd+i(`nz>7|onGkObU zj@$oFKVNw}?TqENWW8;PyxpRoKD-4nRY9x{0bP1&HbXv^gt z2|Utkk0s4HKBH{g=FN|16wmwo=lthCv1hywO^yHiu5Q2o{a@b%y)^%&AK{$d-Sc?C zlvOJ=^zARnbbmE*Q_AMPc<5;I=9P1Uo$3zpvYwp0FLUE8Y2B0T`iGyjJ>TeKlh>T) z*{N^+`_87TtIw~wv%_%zx>c)+sxvcpw{AWc#PvKotTDgn)4uxK?RWou{kw0i>9bF& z#ub7kn-x-BpHCjGZ6etBAn!c{cGU3CDx>a?W^Nv3#RbboEpmBlkrN4r#$wk((pB&PmF<#kQ z`j45mMttSw{NX!q>sNzqZ*_m$7;0^5*fvq+B~MPqlZ|3*KNn9j-z^I?yy+1-N~rk1OC9S_Gv>=N$TzRfLZ!Q>0CPuILLzR>D+z2Q-rIuDxcTQUY-knXs*##mE@@?dqR-;Z|Bru!85Z1O zvb(LD+g`k$6*}B<^3=9km Mp00i_>zopr0GRoAKL7v# diff --git a/share/icons/database/C06_KCMDF.svg b/share/icons/database/C06_KCMDF.svg new file mode 100644 index 000000000..0077b792e --- /dev/null +++ b/share/icons/database/C06_KCMDF.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/share/icons/database/C07_Kate.png b/share/icons/database/C07_Kate.png deleted file mode 100644 index 8427b9054472c3ceded439f1ac77c9aca4c6f42e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 926 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGf!V;*#WBP}aOuH(k2$3b z2R^=k|NYOr=ktDlUa|7?ALGb>E1znK&#*kSXp?y}$3pSq3o8Qm-hAP^+PqmI5z%aJ+rJV5N)J&OOBsS5Mr2dg&_T>Nm4x^!z5X)Uk)e zZn<;oj;zq%zqyajP19&ph)`>B64-Q*?~rWboJM~>p8fxh{hW97$d`!>b2y~mXop%X z?XoPtZTe=`(z&Wak2P;aTXVSOw6rbYb(GF}{a~dyU)QT+mzx)>*Uzs1RS~~<@|-F4 zbNZ7dOl*bUR;*e2e4_1*t9mb|^6H#F#uxEJu0mC#vdKQ(D`Z{miQ@C(bG{`zFFLg* zv9RV*-czyib?Mi)S51ty@N0Ca?tF4b$$8qKiGMAQZwaNG+musQ~Whf zZ#|oN=*{!~BG<&@gdTYcZpz_W=^Mq@V#v#^Eu&be%xC;u!se>mU&jZ}SoQWsKm6i; z@@8d!a!~L;)6LtqP4<1-xow*em%B!u_=^0DW2cs6#{8eL@cOP5`SC}j|IhgzFZ%1K z;K$Q@jx!i6bU0Qtv-QZWOJVJq@0V^{$f#QLX{E_b?R3eSZGzUttzY_sdHSvXo%ni3 zT=Yxff)jeIhV|<5J-KUg%61&x>vG8Pg5K%NhH~|f1j^pXnAb%mU#g#3apiQFL@ldE z(d>|8b$2Go=;y5oE>o0Ro0e#H?&x~^RJEDuIX;HdEKdCsKFlNYj=#B3{=ZUf{KJ=5 zzTe#1^8DGsO$l{n)12apa}PSo{_RoD-{+p6&dYCG(Erkc_wS$Uiw`K?yj@)O_0jox zeb2Y{<%@hxTDN3+QR>`}TgqzJcF((3%$<4n?%xloWt \ No newline at end of file diff --git a/share/icons/database/C08_Socket.png b/share/icons/database/C08_Socket.png deleted file mode 100644 index 6baa733350595d2676ee8ddcfb5eeccaedbbd4d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 992 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfw{=j#WBRl*H}+^cl4mrna)Llkw)f=JKrsFyqhRxns++M;>E${?wdzj zbkrURU0GQiEaYl@^uVE}yd9j)ACwF-7Pd0wW@dW7y!_8rK=`|N-SPMCi*|CiFqpO{ zU65b3;q`gbA33FQG%Z7&Ier@?JPm|<1UYnq0^TH?_v@GV_3O^foJ;>V=3ELksrk%yKX#YP`?Z>G zN=>}krk;<>eyLyku`GSkzJm&lOPo?;xsTV1PKgxZTzr;Y;dyB2lh$b$Vmju%i#zuB zwZz=1HvbM8u9BXAL@~9}iSJTC%CnHzo^$Tj6(@w$cP~s)bqFgix|Fqk!HF=()U$b; zqHK#-8wfGp{v;#bo&KY&f8x1Uc5&r<&wf>v4!&3vHFu%&?k{hqhO7PC@x0*elASvn z)1%~$C59QycGxZV@aDSDGRmz>w@mo7`0<+lSu_8YNV{*VJ=(sud$*3;OW(@G2d^q! zmu&LwwOgelb*eWYkn8Hg{e}I!2b?%cm7PDd7j4>KRr&a*=e%#RPn+e7C+=VL$lP*r z#M^y;FN@E8_&~{2?}Np{Wg=Rg3MEq4gaf&jF^90-6^TsTYIo>@sJiXnQxmjy=rp%& zop^8Z+uZkYJIitn=KDD3@S1IZuNoZYdMYC&Ig>NjuFFqT>F&D&)%ShZo_)jUrBbrn z@kydFSJms4tD1F}d)xHy;OX;v`)|JeqpiQMt4`m|wl}Q%UL>EIcI`jSsQkZ` \ No newline at end of file diff --git a/share/icons/database/C09_Identity.png b/share/icons/database/C09_Identity.png deleted file mode 100644 index 0bf21df9173fa4c259112f662f6b6f21040c9629..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 688 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfyv3!#WBR<^wG(uy{06} z9IOBT{li&{#pg1drYu`Db){&C*dkU(58XwFcUf*D!SJV>&9R$S-d*b8k)Rg8RoMnAJXqtEqbG9Fv%GNrcO?t-Y$iE=fvHpoVK^+P*h@LBD=}xD6**^%vPa*!%oSJV%#~~*q5a<<*ht2^YJ_l$w@~ROj#6h=JK4) z?P4_?S621y^gSEJ=q7HSF>mJMuah1}TONM*3A#lJO6pxBuDA)t!&x6N1eE1)wzE-v(A|NNp8EJ=?Qrg zji=F^wQqT@Op~yA|03h1+SdhB6d06JjM|#-$~F~8xv9-NJO7>KwbibR!X7LZuy|wB wp?37qVg`Z#zEUhnQ`T#Lo&V|n{U72kPg(Y`g?`?_z`(%Z>FVdQ&MBb@0J{S)ivR!s diff --git a/share/icons/database/C09_Identity.svg b/share/icons/database/C09_Identity.svg new file mode 100644 index 000000000..d2154bce8 --- /dev/null +++ b/share/icons/database/C09_Identity.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/share/icons/database/C10_Kontact.png b/share/icons/database/C10_Kontact.png deleted file mode 100644 index 08d441315af9a8247cc482584c8ad2ab86326439..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 902 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfmy=S#WBP}aOuIf`NE|P z2R^?4TXj8qciG#nyU(mP?XcwFn5l8PCwWsMkA{l!F4x**nTg`Z*m-J~UKE%3%G*{h z70<&gCCrl|^qBdi!I=Zc%yt>BaTb^Hk-5FAvpVDYz1a8f)K&km*VuJUne=<%525KF zB*bPt-DEP?Q9qFRUeCoa@!+`pI+JU^E}O^yse1hBLtfT>hMhdd^P4SsIl4stK2TlL z(|G2lFMsQm@a=2)?QU-}+*Rfr8}cI2{_gQ}r!Twj|F^K{^Sn6|e!jXg^Ey#@VU*P`iS^{2SHUAP zeNo@yaO2A8d!>0vfpT&`T+gMYr!G`jnkyM(HEqhJX+c(-G(Mg@$&}$=(Eq}==*jMX zugzQ+o?v-6%djf1_Vj-5)f(&i-ex@E5x%^^VOPnv_W|BXyzD#NkIX)|uWZNj(>t}b zAD>x$J!ADPzs#KvTz1V4o@{SCZ{DG)b~^4!kzZkd(qlGO#C@_oFb`2U=(zQ3F8 zE??gz^VnA;1Xmc(t7v?^)c(`Gn=G4OhRTGhXE(7|ygd4iqpC)}ykqwBPog({qPnY? zUnm_CaE_U9_=xwZ88iNHzx~$y;Pa*|$8(}Ov-xh%dNuXe+VgvuI0}Dny7@Qo`p4wj z&-WKUKJKsCt#o>eVe3zSQ}*)uj>nfH&0=`mH%uw+oLYHf>-J*i7q?xnUKZT;X1!JX z!?hC=og|(y@oJZvw3rF5=1b)0?P078SIy=&V&z}PI`{ncRZm|>-xqQE9uOzJQab$C zRQ_N09vwIyU#Kr|(7yqYs{rvwaLQg?KK!ByGX{OE@DXEL?($P~Qk{MW+y0zVz z%)PkM`|>;)51IF#9{*=VEU&EmGttb4eVO \ No newline at end of file diff --git a/share/icons/database/C11_Camera.png b/share/icons/database/C11_Camera.png deleted file mode 100644 index e502227d009920950d735858bfdd9747ec76c9fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 754 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfvLsQ#WBR<^wMBoe_=<7 zy0o%wyKm>&KRLWDV98O5{TG@$muQ;z&e`!(`NiIzKF>z}{RWM$f{8~94<220b*cKYmDknOKNq() zRc?*D|6WeU#QfNCuh>QpmKfG#uA2MJ0TvQUFJ>((shYdE_w01-oYJpf6ABCC^3D1$ zwg?Mvh>K6D;z~T zRV>0+u$W9uy#A}xJYM$8uiTva%Kn?ymnG)PIG=w0!i8<4m(oOob=?my^s+ItZ#n$g zrbW^D^Yq@YmXhrqc)*=^Ye9!dQ<@Yy0c#UWV`P7yJLUdGzVw%*7?&{wgv`d^oYC?dqXp&#ZOy*C%AZ zHtw_DztXdHnf8%w^;(g3f6Tdx)GVF{h=@8qa9*Kx?fU(s++GH|x{m6m1I??7k{$%w zPiA-P`-SICM(-vWGkP8b9w~4@i3XXik%{{GAmo#b%ofiA{t?c6a@>nygs;8M|vuk~h zwQNyZ87QTF`NN)uEC+sxo%~78$+{vlrR*&?I-kB(c~I}y-2V*gqGiN2e(Nt{U|?YI MboFyt=akR{05YIdivR!s diff --git a/share/icons/database/C11_Camera.svg b/share/icons/database/C11_Camera.svg new file mode 100644 index 000000000..0fc7637cd --- /dev/null +++ b/share/icons/database/C11_Camera.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/share/icons/database/C12_IRKickFlash.png b/share/icons/database/C12_IRKickFlash.png deleted file mode 100644 index 4041042d3f81b8e07f5f1e5427b253998d03931b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 950 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGf!V{;#WBRf-!=GrzO<`I z-RI==>#x7A+q}DT_sU#LwNTMc5e`qSuK@v+OgMHJbk>kSzGTZ6)9cfZ~gh+_q{)#o#o4|kXy6t z#Ph_f+x}Kh`+9HHQ8Sa*UO$WZ7rTyH25KFRs{h}jF}*lSfT1bl z>87PW|5?-}$7%hYQWR)h7SM3XX5p9GXS+7raQJ;tc9)Qsin_+e&b&CJDpX%AUeHk> zW9q4*S(mw51E0jH_MBx<{JG`8?mYn+5Bd(zc<~{r@bZSYw%VbK7&aksdt(>-K?)4S9>w`~!y72FQTk716#XI@e-QQ_k|Mc|wucxQ$z1)8# z>$Ajc!=jzW6=&4WK8<;@esNjPq?|Hoal1uFc^>oLHQE37-}UJJeEsX^=IK~vC;u$_vegdoMT70XobY%8CUDRrLl+P_s-_iSgewtpIV zEweY0@xagMue-#P`#2W{dzEWEZ@3j!#p2Y$aDd^W2}7*<|3E3*3NiEd|M&6Py9xbc z%-~w8bmpQQ`%c?{Tf5z)C6Ya5thpXYo=@}l^Yedumu<#RE`=Beo1;HxU%p&@XOo&} z@^6>xvR9UDe-YfFr2n$S>FQfPm&6@QI0I){m2zFU?9869pMT0xhp6gex?YZj)zrWYao!7G(6MUB4alZI}TCR!CDdnrv85kHC NJYD@<);T3K0RXOmylMad diff --git a/share/icons/database/C12_IRKickFlash.svg b/share/icons/database/C12_IRKickFlash.svg new file mode 100644 index 000000000..5a55e2f9c --- /dev/null +++ b/share/icons/database/C12_IRKickFlash.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/share/icons/database/C13_KGPG_Key3.png b/share/icons/database/C13_KGPG_Key3.png deleted file mode 100644 index db6aa8ec7a14dab7d92842e94711f44d40c77e97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 821 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGf$6xXi(`nz>7|omJthZA z9Pf8#_H4Ba&~%PT@eE>9a)~f^lZv}xS97)ZYRS9PzH^LMZx=D0HhJOJP~}+ZnO4&0 z7T!K{Gv-;^vp0*9bY44giI*-+NnoA&q2ylUwX)ZZ{~He%&%6Kg|9MLeh6`aL^Sr!U zJ36|pHO~9&UHAOy+3J!vSJ^-P`FYD()4WU2>5j(74SEV9oG(t?z501af6K%~<{x{k zICQrj+P&}aYtw3B(XZ8$Sh}XPoZ9uoWuKB|r+!zz{zDh$SDRiQ%S)EObLngIyKRy> z&VCEZ7QY-{!|JbeB^-H(*}?5mV-ubs_cw%aOJFQ=k(=9PwqCoTTDLdTlFa8j9joKnAfvP5s1g#7o!26?7N29{>-1=qhH zx^Y9rr~0o!#>W4vax*T^Q$DiNC#+PZ;iSkBO_A$snwymkEG?P!t{cBO#;O#!c>U6) zk4x+Kv+lWPsbgPKc8`1GjYC^97?L)wD%Y5L)^6`VyRt`(D_2HlOP+@%r$k^ zvSr_%FJAmu!j3gG^lMR`pdhb+0-LkI;iuO)uDn{e-fy||?Rut~x>(ibK-agOQ$6(V zO*wtiTgK1#S!Zzie?|@`A+`-Sow%A#ojS5SRO{^fmoLQ^TrI0V)-abvk?Z=$$-$*9 z|N19Pb8~vpYCGb! z^wf91=PV}XtD7r)Z)dDqF+oYHSB!IkTi7+jkO+?!#woFU?pm2SIk6K?o`^ej)vegk g(Q`@j+86qV8bz*oW$<5RU|?YIboFyt=akR{08c-3@c;k- diff --git a/share/icons/database/C13_KGPG_Key3.svg b/share/icons/database/C13_KGPG_Key3.svg new file mode 100644 index 000000000..b7b9da69a --- /dev/null +++ b/share/icons/database/C13_KGPG_Key3.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/share/icons/database/C14_Laptop_Power.png b/share/icons/database/C14_Laptop_Power.png deleted file mode 100644 index 8cd59f809cfbeac06760111b658cfca3fd468eb1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 816 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGf$5N^i(`nz>7$d+drvN8 zI5z+Nz4F_;-_FhZnYVIE@N~bzOjm(fM^!YG&NeCda$31K&O2oAB1tN--O9zWQsiWC zz=9?1OZW_fls9(@nVmVi^77u<@2>vbSAD58YMg5O_$wu=im!nt7glcOHX`!vP`6V-MY4V7o~}XzQM;`49&DpN6&Oo>T`JT zny*2C$*E&%;@5p!woN*B;KVK6vgM~kr)WP3nR;W>8uidz;YJ4qD-)AHWm#F9+66W- zFth}9{rZ*0Fy*0z-uz2j`kwoS1e)mSscl*lb}u&K#kZ+dG5d}kW9wfPbm{KjBlbq0 z7Ai{2>3hkbuvJ%as#n%EonVcvuFhSjgnOeZWRo8T8ExL6v+Q?O_3vo;va)l}pIcwJ zRJ3*0;~krKO9sqhJiEeWS}3VeD%!(XO3F-Nc zF)^*HPPNrH_#8`kH0SPC)3fEZrOR*Lu@T<1nbD11LrTFj;i${ohf7mA?bDw<{BOj0 z@Zps*##Lv;tF_MGv95n9bJHW}%$ZXQGL?JS4x}*Z*d$zG=4(7YD}rJ6gJ$Q5YL*4_ zSsNZa+ViC3r$+8?TW9BVFN-(%$NiW^ z)cGXr?`f!VZa#O7^~2QiECo;71^Kfa_U^0{cJI3%mzP=Vd;1pK%Inps&gUQPa^BD! zw2PTxM{UExCIMz|4$Ta$U5MGgT>Nx&N+UJQ!dR_{de8` aAFFx0iTGzO*>?;K3=E#GelF{r5}E+6;&S2u diff --git a/share/icons/database/C14_Laptop_Power.svg b/share/icons/database/C14_Laptop_Power.svg new file mode 100644 index 000000000..a10c99ff3 --- /dev/null +++ b/share/icons/database/C14_Laptop_Power.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/share/icons/database/C15_Scanner.png b/share/icons/database/C15_Scanner.png deleted file mode 100644 index 43f52ae8b8260211e8d65af61ceda4f210116465..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 955 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGf!Wv7#WBP}u=HT8Pjspb z`-A({Rp(x6<|f9^^2~8_S|#lqZu-DXRwa1VZULi{JYGDKg@z{GGsT4tRwN!-!6VDZ z8`&gY$7*(Gn&h@Ohq{+;^0_{<*F>0IEXq6kdeU~Lw?AK0o{yiMaOh}_+_jrGn}yC< zYH8icH#4{YE%@BkcBapI9i1cZ^>jszmSz5x?L6ZXyXVJW_O^wyBAT~uD_iIyz>;EA z|MSm3Tl;TcWNxl_ZPn!}ylT}!6U$}G>YT%`zm9iXY`i{^x6zR8m_&}5U|ZrHi>i_b zM<-4UOipz@{OFPFidB7+e*IDx;MjBVVZn~LV^U1d)mRR)MQ(Er6p?6?vnk8@aQEcN zc+XJZC6~)5c%*FDFu^H!a(qr^WhO@gf5Oxasoml$LwF88;GZ#XAKU3mg|Dym{@b_j zyPvyKVaBY^7`=WUweFg@qm9hD(%D%x_mf0lzm;{<+upG#&|&9po{uh4lkI&S%uP(p zOkyjy?yX&}(`n$tcR5KzyI5J|*UYvyyE^OHd+(m#wY$IBuqjsTVc9Li&+amO?HryO zRc{x44NZN!FV<@M#&gq}l_V#q9(Z!#VWPIw+`TQ0jrqr%!w zqx6JSxy53mG%h_boouDn@vVOCr5{gC1Pg!tedc>>_xGPN4Ss)~AL-m!V`1a(ZQ1O# zrOB;zkJrU3MsvBIzW9{W=hbvjJ0$q=Z{Y^{Y)!Ao=JVTM`zU+}t15XTGk;#+gk`T> zQUoK}ruOvCU3zx5?RCbG$8oDxZF8EG67G7mcKwyBZzb(ZUKIQ~bCcUf%=^NF2OFN2 zOq>W8y7d46 diff --git a/share/icons/database/C15_Scanner.svg b/share/icons/database/C15_Scanner.svg new file mode 100644 index 000000000..8d0f7c2f6 --- /dev/null +++ b/share/icons/database/C15_Scanner.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/share/icons/database/C16_Mozilla_Firebird.png b/share/icons/database/C16_Mozilla_Firebird.png deleted file mode 100644 index 7f592c673f0e0a9ee55115226fb7a1eb58eaba02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 891 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGftlCS#WBP}aOuHlpXgGV z10Ub-w_Uqs%NB>oc8$9{$wsP8okGf)CRTSlChg4-6W+G+_Pm0%o-8ZSt6eKGmQ35n0&z} z>e!*onSGLYa5*K*6wMH+8YYvs*DUg#=SJ zR4$s~H{Di_X4{*RoMX?9}p zd-2YD&+lEGXO$cKYwHZl?kU%uQdMuPnX!%QQ<6aSqFI}(fA1)H{kudqCw+ST;fPs( zpJ}TqX)ImSaC%+jtF+%)cB|#Tn=gFlyva%@E_H8lWAXPnjcfUf+WG6|`CQn${%f%F z|Kfnh@vaW_j}s=B%~pPSHl8OqY%c?E*tPW{8_ZHaZc9BGz3~5$%DwNe9(Io4mibIfnIF zqlVHU-k&RDnLFcV@A z+HI+yU(IlX{|#Fi)9rV+9@-d{T(W;&6tTOJ?ZCPEe{8o{vr?MG;&>St7#KWV{an^L HB{Ts5@64 \ No newline at end of file diff --git a/share/icons/database/C17_CDROM_Unmount.png b/share/icons/database/C17_CDROM_Unmount.png deleted file mode 100644 index 9471903746faf5e752e8a61614409b8fcb4705bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 920 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfmzGb#WBP}ko91+&+Jf! z10Vle-v9npdqbQ=>V~oy8J=eh?oNj|R_s>MtG+2T|4K#g$H4d*o&ITtQng0+7TIMy zTGsvX+l#|OJyvd)&+;sej+wK}LC}eP%BG-SvA2r*_Rp7)-p%2#m+z`qa=iDQnQ}IF z%GT}Qztvi-Ja+xE(!`Y!|7!pJ>UB!|S$lr=-=i~hx2$7il4g`}ez0<~ySufX?e9Mm z*PT3Raxz53yGh>R#pQ|r(?8vLdV1$&as9RRQ9JFed8IZyc;OsxQ1D{&WBq+5oA>V6 zliXu?jJroOyjL@{XJ@$4vLMrA63I39XY||eT>AZ;?N3#Ph=`LvZeDq~uuoh3Ud@ul z%d7cktFEZL5U{}Xin9S%lR%ENnwpi%$~(qIw<OY0BEOqm`b|uSr{BU7WywROyGE z25Td~wCjquO#%XK8)Dm@hFX+83bZt;`W8At($Zi?RZWtT^VQ~n<_Q~$<@4^hTxI?7 zTTDm4DJWo-Lmh9_AgdcC4+YwtM%@L=milEcZ%Qpx_RfCcW+w03T1G!ED&{x zj+xVOTkG}0Yfeq6jfM#gS-dgUC$;tGclPk`cdXSdnC&3J;NY-$;RP?n|JowkU)!}X zPI=d;yx_aSn=oUWvR9lpQ~J5$IUc=TAi}}ubii$6OZe?O6K?LDc}Lz{`$}zxspB%) zwzh{41U)SUcFdi`%+JM=z+)l!A-8%p2{+~bW_BH0xWy>Bk#!V1nk}puW z%buIb5WuCwscSf6{^`lH|5gbedat`y%bWYBlh$3!vYeWl`2{g6-W<54<{`a>ZSBD_ z1+n(s_3u7CyuF@%^=f-RW=n4`>GSbBC!PIw_5IJ^?d%1z zcD_14mgC)>pMPWxz`%3KOH;sMw6H1r5e0ybD z`gM8!v~Ak^_cGS7GAJzRVK!6f*!B0yp4+h(K7}Yvtg{g6R10;UnN^x>yJr0#u2<0s e!VC-#>i@UoHFU1*wr5~qVDNPHb6Mw<&;$VFB%FQ# diff --git a/share/icons/database/C17_CDROM_Unmount.svg b/share/icons/database/C17_CDROM_Unmount.svg new file mode 100644 index 000000000..6ccadf9e9 --- /dev/null +++ b/share/icons/database/C17_CDROM_Unmount.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/share/icons/database/C18_Display.png b/share/icons/database/C18_Display.png deleted file mode 100644 index 5348b7db2539220fd763c9a79510042e7c0ee770..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 743 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfvM8d#WBRf-*?j9tU2x? zZS#%qzfn*0eBC>-?7C-%q0ylk96II4Sb}y5H^n$;#diGq!FFY(m-_P1$!eKQhDH)S z%Cpz-hABUct&htruk-JU%rrJQGc)Pl=XvRImKGL2eq>~?_AcV;()w(=d&QsiZidU0 zR+;X%ss6UTcFWfd`BB}^zE6L@@hekPlar+gJEb=}d%M`<>5f@>J&A7FPB2ubI2X_@lu z!k;s(-&4P7D?S&sZ_e`hsT%!@+fdX)QR8D(kBxYtYsDjl9hDI}8j=ULEMPJQ5#E}TB2txHI3Ly}h1q{`2)^w0V2Zqa1nw@Yi<-xNJ(3CHA>L9zQ5ZtD+Z znZ5GNxy$l9>c7jbnkkh2^wXoJ^Jmk=Ub9-o-#rr5J?Y{ao%=r~_V)57{n@(e*yE4i ze*Ua1-{L}3;kQp!tL~cqx*K{eEdOF$WZKhXLgLeT4?k45Qr1 z+3r|#-_J|dy?)>LzO1aQ?%v(Iv8Kl+1Ub0~2(}$otgfzJuAc8-R~&5ap}ChW?!xP@ z4WFjYo;~~PzkmN`evflsJh9JBS(dN;mPxOf@8a9HZ~qtj_PKQKk-Gi<%P+r_k(J$R zZD+U6nM1N`!>UVJTUQ-SFkss!II%yR@elvWn5~A^5yCtS3=9mOu6{1-oD!M<+1N+S diff --git a/share/icons/database/C18_Display.svg b/share/icons/database/C18_Display.svg new file mode 100644 index 000000000..5feb6a179 --- /dev/null +++ b/share/icons/database/C18_Display.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/share/icons/database/C19_Mail_Generic.png b/share/icons/database/C19_Mail_Generic.png deleted file mode 100644 index ca7812aebd6408a2cb901da6ea926337100f7a5d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 971 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfjQRG#WBRfKesQ|N0f!3 zl|M#LZ%>9vPGUb?mpM))h7_W zsL#`My1;~44;VNDo;+s?e-OvQ@<_ez$-VXLML#dxJa?|r;&+*dc)3%*jBxQCW9`?E zp6;#oc0coMiO=G~#nVr2akaBsuVG*i`Hyj;(c0dL7bSF>A7)DOocDP6Fs!vbdTZ`& z!K25gKZ)CW>pjzo_3z7;FOz%m>2tUL|M)SfXO_0v^()LT-ZMw@f4SSbd;7w* zta&lD9(SjDdinDTN!M3-Zc6cTtE{k5blsCxdoF9QS>b)g*tr*qF1yygwRv7A@$h#3 zt(*Jz_w|&o_VCeI{NlBl*Xj40@98g!?4L5V^xyUQtKWu9xv6P&$LpT^)+Nj16->7_ zO_^f6Wba?){AKf$_b=$&$SGc1cH_$-_Il4-I+Y&n`}XWBc(tY1_T_YsTY-L`&TW2E zxxDMmoYQYkuU1yyKChoU`lVb1LqeHcP}%g|OSayew4~>|R-4Q@Q8%~gD>DlU)-0KO zp3f}k!%N>!_B)R@>RY|oc$Q(q4vsu?8O=QRTOq2Rw|1GX-n21u*3;C2wFf?Jl0JSy zX6t^-4RYHrUbAC8@JGhScYT`gSrf6-(q*2~DTe#!#TG5PYHP>1*l)(1mR8n?m=a^_ z-G~0{nSD}ILcV#T;Ev}F)5{oRcPzvXVsxnR#V zm-)hlJ!fumJHNRV+jr3T#iW|rgj85P*gWGVsm%1zKXqI^WZ}ZhtAP`Lr#Uq(X1`v+{#U6|+@mV; lQt)bTeb0NVzi#};FS^H8<=L*9I0gm=22WQ%mvv4FO#mm)(U<@L diff --git a/share/icons/database/C19_Mail_Generic.svg b/share/icons/database/C19_Mail_Generic.svg new file mode 100644 index 000000000..e0f27b12c --- /dev/null +++ b/share/icons/database/C19_Mail_Generic.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/share/icons/database/C20_Misc.png b/share/icons/database/C20_Misc.png deleted file mode 100644 index f428e4f0d0af95444864d412827f75a8deb7633f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 914 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfmy}V#WBR<^wP=E9+L|t zj{Pqce0soWgU3fDq0Kyt-|gbaKV-e~2y=$_rIxVD6PZFsW<4u$$_kE_y1Z%1qM4?h zeusUmd2U|GZJRmUGX2#N-^-P=^6d8BKXWRt`oZ2GKPu|pf3}mCXFl*RJ)*2kaChC_ zS)$_ilY=zPzx#VEEoDFQNGmMt+lC(}C!4KyS{NiMa;GzW$(=h%)25eq$L`Zf71xhT zOxgFARYdge-O$jlUmVkyb81~>*Jivld)BREVPOo@PxsD|@nmNg;8OL`S@(r$)21V5 zydN`cc{?*KyX`phnX@|$O-vep{#0GFa$}%v@vAGX+E1T;^=)mvYF<>-b&a7&O(^t3 z%BJ?Ttx^2DYx%mn<<@sL7jj;EQg9}z@@DhAd5j${n@ScM^iSMr6QUO`HRaTHzvhEY zD_64m`0u`OKi}ECUGnbTW(m1%>zR9d{v4QT{4)3U_TTv_KYxDO_3hjFEtPU+w|Ugm z#ZTO5@8K!bpI`rPs*BS0l~-d+CjB*Eu;@|aqA_}8udYqchv7dOc^sTHX=J+|Ec*V89Ywp2Sk+`9ORFeZE*UQl-k2d__jsF%%AC8a0!*x?|10rgt)4Jx(!x|byFCj|oOsOY_0+oNrx928 zQ9pD4hZh%551y{qxrvqO;l?v(R!_PXc6ZWkUN1(AxqA8hPpZ!>S}eTdeBtM_(y~6w z3Z zmRpP&CVwBiGo5{$)99`4^@kC%dfVdc9WGuzo0#}e=~cS0x2I>aqT=sI*;(@z?fWNc zdZ*#}dDAVm9ka?43NHAu@-JR}x}~!-Qmaa8%C5O`(XDw9E929JP<9=6X=VE!a|JlW#-B(<_+tJlk zyFK;vvyLT8ild|!uV4TEV`zopr0JrtC5&!@I diff --git a/share/icons/database/C20_Misc.svg b/share/icons/database/C20_Misc.svg new file mode 100644 index 000000000..bf4a4219a --- /dev/null +++ b/share/icons/database/C20_Misc.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/share/icons/database/C21_KOrganizer.png b/share/icons/database/C21_KOrganizer.png deleted file mode 100644 index e66e4aca8687ed122dfe56cc4ffb7c910919af53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 930 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGf!V~<#WBP}aOuHJpV_Gl z2R{D)JZ;w{BXf>o|g@x6l7@JSE-}{$F9!(HnYd5dlc=52#1XdOEj)g_e*$?0C3V%9n(j_@> z$ER2BZHdee<48?%Ij{dA?x(iM)M(8&zm+~*o4KBUE~g6br?=FE?uT043AlTTGHYDqzCp_=DQOP{~XykGNi z!}p0_YS)LxxNh*5oPDuMba!vi-hO*!Ll>pyty_3bn{hv1KlkyLzZ$3iz3w^l|6s`F zITa5dZwtG9()IZX&Fh>hfvGlL{pATJm$zI!du3~=iGo;wXO`6O?XpKA7JNE*sL*YT z{|YVc#Mh<71vbJo~=l^|t?aRzZiRN~5o$l}l>N@)tGF#R2?taDclU4f9 zpWeP?{=MG6A6{O|F_EE(Yl39#qtkcR%-!ANr`A-sWsOsf^MaS9SH#~wU(INJxVEz7 z&PS_kPUU|4-$_&do!hq8VIR|pmpu1x))(b$iI{Un_snG78!kDv?iy>__QZvhS-YxZ&H>g zw*I+N%5h}oKhradZ4b&F++Q-+ddlYG`dekBb`@!_=HtKmQ}N5i88M}+SKXc1=c|*+ z*gn5BpJ{%4vL&l>)9jFgcXhY!+RV0CXU>-=*J2d+H0taV`N3c>z!;*yxx&HaLwr?& tbpV@0qsRg#tp!Y)3cM)|IurhJUs=#zUl@1Si-CcG!PC{xWt~$(699PXw-5jT diff --git a/share/icons/database/C21_KOrganizer.svg b/share/icons/database/C21_KOrganizer.svg new file mode 100644 index 000000000..a090bb540 --- /dev/null +++ b/share/icons/database/C21_KOrganizer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/share/icons/database/C22_ASCII.png b/share/icons/database/C22_ASCII.png deleted file mode 100644 index dcdfbed307a0aff753a55470211ddf6f276b95b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 358 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4i*LmhONKMUokK+u%tWsIx;Ys zL9)a(q9iy!t)x7$D3!r6B|j-u!8128JvAsbF{QHbWU37V1H%tb7sn6{QPzWoSs{T8 ztQS5%+kdjYvuIcZ7u2c&N3=O@~+Ad~V&Y`txQQMEF`*_m=T|+|-tYp`_x`s<@)gmpi?gY2c z(2&qIN6gRrn07B%rIodu@6FDj&8t?dTBXz{`>R=Ut8qw(EAPjzM0TD;rO<%9xzy0&!-R0)jcnw50T>JU^*Q-DFJEIo9iPD*z!N9=4 N;OXk;vd$@?2>`Z9m>B>7 diff --git a/share/icons/database/C22_ASCII.svg b/share/icons/database/C22_ASCII.svg new file mode 100644 index 000000000..2c4e5a49b --- /dev/null +++ b/share/icons/database/C22_ASCII.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/share/icons/database/C23_Icons.png b/share/icons/database/C23_Icons.png deleted file mode 100644 index 0fcc98bd68349b6aaab69e694c4633bb1e26db50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 623 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfr-)6#WBR9cj@H4dBKhX zt^4op4!?1bbK)BgPDWlE6oQ%G3$?-gQfTCl+MkOOxhGxc(iHkfs13jkP zxW2EvK24)c);eI*rHeU+>EF)Wlw7>(&w0b>?d5*?cXr**zTM#HD730eC4ePRAXFg0 zL8QmgHD~Mhr+>@8Ke%}A!O!mF%WQdkf_m30a+EM8G0j(S>j;|Az~$5s?*Dz=jy$vQ zKL0a+ANHKzExZ5u^#(3^W6LQ_3q?3M*EEJX1gYz-d|F|Yyx;oCizSQRHglC23fC$g zZBl4pm3MU6cur;6RaLv1%`z>D$3iS4i;6U~&WTKYA-tmL?W9d{(sFtHJNK+RV{Pjm zbF}G&@(%{3gk+P5`vt`_UYwp{w(RL^ZLK{iN#PTs1?H?yu<70N`^V%$sYG+xg)vWuHCrRUvQxpQBc*JEYR@PD!A z#G@so#JCO^3kBydmO5AVWxnY3Jzd?^ ecBVh>+Lz2 \ No newline at end of file diff --git a/share/icons/database/C24_Connect_Established.png b/share/icons/database/C24_Connect_Established.png deleted file mode 100644 index b691fb3fec08cd2fc151540f3ad2be6a3f77e053..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1012 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfw|4o#WBP}ko91#&y-Sz z10UaizVlh;{NB%MCm1KKkaG$$%KSXt`fs+}Tfsb|;xSp0IDW%l34ANucY`0BpP z@Osw1En6*T_NGkWUN-5#Nr@(X0WS7(asBcGvft~z-&ud&T}WKCZl`A9j~Xt9%{QG) zq!S?7#J9eOr&n68_k?2q$J$m zdi}X^N1b`w1?ltA-}n4UZg1Ks79h}B-E%)%Z}iEIp^f%~k#{G0fA>(<*hw`4MZ zS66$n<3qLo`@K`aC+$e7I^%t=C`s@G zTY}=zoIeVS&n*rK&r>_Ud~XDby{zPPl_&_Cr+{9ae}o#)-? zfByHgecVp4D5o@Weqz>3O7%T5+3I0{Kx%F0fj#r@eB{}-_NT-dDel<*NB@4W&Mhj@ z`DLOJH;y}Wb9oAROw>f{+6AcNy_WHD; z+rA>+)-d6>QVUdCk8H|1l(_xQn|(!3VdMupA6stb<8T0C^-{zc6^FGyOB)H{yyxo=S z(O>;m?~PxpefH-5{pl;Lr`Rx@Vbm~U@?9dhi?8A0iho+33$%Q+|*SN`ahLJ%7l%N?VsR#!5)Y#nd|GH@U6SwZ \ No newline at end of file diff --git a/share/icons/database/C25_Folder_Mail.png b/share/icons/database/C25_Folder_Mail.png deleted file mode 100644 index 3ef9fcb60255f8989aab079d4e5f905551cf652e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 709 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfhpY6#WBRfzjbo7$K*tb z{Q|C5=%*mdsTbAe?^m7vDUbZ&M)LJ0A zD|vN*{-T=_na0yLx@}$Q8}lyZ?U(mI`Le~OUpLC%|GxMB??3yV*Y5kC+OyGh%`SOX zgKe!5PE$5ca-7`VsxeXcbmvi}IX*!O6|dbH|Ev68+r#$T_Ce*zSapWg?h9N}f4g=n zyr^Z*&^=%ktGP+(P;s17)9SLs4G}C%f-`)QS6F{xc(yN4MTm2ukZaTAkWWp<=UETF z)@N$Ir^B;t{)N(A3(S3za%?!)-eO!@#W2IenrRvsEvz-mBhZji$4^Z!LT|`y^-Hho)Dz4}4qZ8S_f&=+zqr>?;Uh^7 zHhd|YSVBt|-JJG&?)Hj_ zbpx}Q--VMu<{rH%m9)Ylr~UO`oA|6GM~|M%*Jal)3y7{4&oQ1cBf36svm~R)3>`Vxzro~a_{5~0_7d2U351#bsm(Rkb0-V zr_Aea-9^E5tAZ*|pVr>d!uN<{V`GG?N94Z-(cYy;{2pm+Y>znUCG&EBMVjJn8J-I* Q3=9kmp00i_>zopr0L4i;B>(^b diff --git a/share/icons/database/C25_Folder_Mail.svg b/share/icons/database/C25_Folder_Mail.svg new file mode 100644 index 000000000..f8e28f7fb --- /dev/null +++ b/share/icons/database/C25_Folder_Mail.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/share/icons/database/C26_FileSave.png b/share/icons/database/C26_FileSave.png deleted file mode 100644 index 0d87f2531a3e6d1c3abf2940e0d87e396a131f8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 691 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfyvd=#WBP}koBNpcTA`R z!-dax%hSusCg=3bU}5fZX~{@dbiACIn4g=zbivg92TsW+B&ttqN=i*!%Fz@N(c+B7oM(K#>e-B$y2i%F{pRXFU-I*R{>5IO zmbPj`#I=3abG@wR?AT${f2KDx?Yg8^_o1x*N@L6D_dKO90u-xHUuzZ;l5|M$S~hW| z!i;4l4?j$54rLc@5Kwj5Ak)#uc+lkXHz}SmBtpb2_{ZCS3FmHJ33?x!?fZV^*^*exe_171to_;RNo0Im9X@$WR z1HUb?+wE@d`WUoXV%Bl@t1r!R#4|rH+4(2OLh5kY>7_yooLqQLJ8wIkq_O$D{kxQk zO{z1vZynY4cXz(tJl!>oi2)26{xdq8*ah#`v%3r8d%F6$taD0e0suDBJM{nn diff --git a/share/icons/database/C26_FileSave.svg b/share/icons/database/C26_FileSave.svg new file mode 100644 index 000000000..404c75b80 --- /dev/null +++ b/share/icons/database/C26_FileSave.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/share/icons/database/C27_NFS_Unmount.png b/share/icons/database/C27_NFS_Unmount.png deleted file mode 100644 index 4c52384617f376fded8d48d0784dd0d6e2db41f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 887 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGftl0O#WBRf-#5tDUpP=? z@B6c}XO_*_raU<)%7H6rMW|g%8?WA-Ndl^y3YKy|ax&jh`0&(HYi0Wb68{;jg?ZV; zTUH!tQQ&r6>^ea}V@uGB<0W=`^VKBci=OSRto(kb`260Kv^230({Fp$um9h->?lX_ z5oMN!AV$XqLq?WHB^DdwqLLD?Y18k&)zjHCW1CL#+`v<}Zru{PUcB>klF6z^&P**V zjf@fuF`8w|d3%x^*6$!WXgl??pb26IQ;-WP5*l{WD z_UNLnMM9@HeVq98^z#Q_=da}GV5xu3axsI&%KEaD(2@ux!Sl~PNA3^1obzkuPND0i z0_*De4xHD!XR07HQE{@TcF#%6YnLxiJ^6Hp6hq0?={dJ$#F|!for_uc_`_XCV^s-> z9S4*qX3SHa{IOzlro-mUf73bt%+>eW*(jtXVz~RwYOZ$Y31|5l)@_eXS+%NVgKoh3 z>l@>qu@~}xcrAU(v-y9*Lg$9sgAc+wjxJj3Gf8EUM&g_NllhYIa{@v`Uz|=kaCFi? z*2RsytNBDV7)4bCRvdV7(D5W&N{@@l6e%Ym$?P1*mpp!2%QMzAYjIrj53plAylFv( z%%O*gl37=0c^^Bz{_OJ0ceh`#VSJsvDCJJh^P2o^rA0+n-=2Nde*XK}t$jLPW}+HX zT_Slr6Sw{SJ^f>0=}*mxOT^C22@r{tl9hckH6?PrdCw!4sLG1>@7_xH&$n5vS9`D4 zpeQxx`;Q%G!ouxqmp0{CZ@XC#`N^sl44T%SD|4nUtaevR=x%01VTEl3UVl%_M{ejQp2(>~7ofToLom-s}d3epO yRA0Qm{_xc~O$qx|8(PX;TRI|KbLN#k)1UV-+n{Vt*n9>C1_n=8KbLh*2~7aXT$B?4 diff --git a/share/icons/database/C27_NFS_Unmount.svg b/share/icons/database/C27_NFS_Unmount.svg new file mode 100644 index 000000000..0bb535f18 --- /dev/null +++ b/share/icons/database/C27_NFS_Unmount.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/share/icons/database/C28_QuickTime.png b/share/icons/database/C28_QuickTime.png deleted file mode 100644 index 59a1694912ed8c30c4abef28bf0d311b6b0c2a73..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 764 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfvL~a#WBRfzjl&$zKFX( z!~S`}pot#RyKFg&seI_#9oHO_KS@_)(srv-q6dZ}BJbE~hMu{5DRC7MONH zNaUn|$RqX*503Kup7HYCDw(vsDl#jAOT9z?)`sSqnVHG0S-(D>IVAL_Nsr-w>*(xE z6REW7>gruPcm9-(j*d3|>(kNECUB*CeQ0QAcGV|;8aIZg9=mqA6Q1yeMi{~F|&c1qi zgT0n#wB&JlnH8G?>|buV(-pC)PvvxFk;aXpV|QO`+Agz^KiIAG@I$Gix_O7zB2(8j zQMFVdQ&MBb@0O_ewWB>pF diff --git a/share/icons/database/C28_QuickTime.svg b/share/icons/database/C28_QuickTime.svg new file mode 100644 index 000000000..bf2ad5acf --- /dev/null +++ b/share/icons/database/C28_QuickTime.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/share/icons/database/C29_KGPG_Term.png b/share/icons/database/C29_KGPG_Term.png deleted file mode 100644 index 010d33570b059482f74861ff5e2e148d602854ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 751 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfvM5c#WBR9cj@G_-XV!1 z$Lil7pS!bo?nO0IAGYAbUffT?>jjX%(xOMHmzIgW6-K#GD zK5u@NQ}MO)`NN-UYU=kLGMF=a!M16-9vbVqBG0Bz%PG>DmZYww86RGp_mf3BsINDO zYpF<-=8~WtKliZ5Twv&PR%FzPGF`gOv?t{Nqxs2e&z8N_-5tF>JJ%qv#ZXYfd6&V_ z!{^-3FtxS4a1U_jP!r;iJnZB9DOih5vaP1UL7_!K=}GAQXs(>SXSpvUjR)J%e50t8={9l=es`t|lT|U03b%4K(Wg>3hM)-#6pOr_zRt zQv(Agm0j9mCbwu!k)cvg$DxiBEi*Kfx|}9$^9|ot&8NV4-ayE~!|CBp`@gHx&&ADJ zan2`8Gkv~?W@nJpN|oSsv+WCZq~@`*9-Zhur|{tJqT&Z(00Ur@rIImdB3^S&t+cuKC~Mk=;Ax^1trZV?V`DANp;VdgP8Z0|Nttr>mdK II;Vst006>BLjV8( diff --git a/share/icons/database/C29_KGPG_Term.svg b/share/icons/database/C29_KGPG_Term.svg new file mode 100644 index 000000000..ddbf38493 --- /dev/null +++ b/share/icons/database/C29_KGPG_Term.svg @@ -0,0 +1 @@ +>_ \ No newline at end of file diff --git a/share/icons/database/C30_Konsole.png b/share/icons/database/C30_Konsole.png deleted file mode 100644 index 292df84ced954de1d0d7d1ca88e871a6b0c5f082..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 826 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGf$5B=i(`m|zwhLO*)gFa z$LgQo`+aY=`FYMxljfkuEICIP1!ZWmmMSM5Jlc>EJHxl|;WE{wCF)ydbMZ+DY??gn z5A!Aa1*$t%hKg|Nxd<-eXbe-IdD6!yUu}K$I=edW?^K1TGY~OD- z`~BW!T~+T5k0~g1_-LQ_!t2;GL1p95zy0>^YxVcq#ckktw1q!og{|{K{vO+7^ z*P1cFk*DJQ%43Gl&(B?FD%My3%B837|6%=4KkoB6W_)Z_U*+=DOw*jJDcnC$#OD}m z<-eB6`np0ci4TrQtTBD_{(EFh&V#+nFTb3i!dW?Q@-oer2?q*HlujG*@fp4Pn#_{O z(N*5aedG4+#}^;F-`P{y?6&ye)u*XuW@ZvgG#BeMFM6qydwPBvw5jDa+kBV{`h#1`I)%bkF3QbBetoSGFng|R=uK(9i!Vh3J8m!}>oA;S z?Xx*;`TZTM-kz^&$0WAh&P{t&8fRZUZK`$ok9QB9YeX8iF6e4uJQo#EaLvL;WJ2k0 z9bMgxTelwdT7A@@Z)fRmv&lNmH*XsKJGq3%l%wEWV}tRvghLbV*ZrEwKW+NPK$rN$ zb#cc#0z_DwFLr!P2$1qo>-lV$#Ix$bn$3HD-1&TFf6b(O@AOWd;d$=A*U6M;<1vGo zB1_nve>F2!&YHAb+3$?Ja$oWu{er+LAC5lXzN2hwv$apyl06X?S_fA@+8eammbuPn z-t$Lh|NnI_33HxMM@4si{|3B_Hjdjz9Lm%^9Dndh#%P_V0d473u oCBQN8O7>6oL+|q5-~0dagqCRcpOteM7#J8lUHx3vIVCg!0DR_%>_ \ No newline at end of file diff --git a/share/icons/database/C31_FilePrint.png b/share/icons/database/C31_FilePrint.png deleted file mode 100644 index 4ff0f127c1204fc1fe90c0531d50f1d322b8bb32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 875 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGf$6WOi(`mIZ|>yN*>h4w zj@7>}KW%<_X5p(NGoRh^*^=NbowJ}b)a1b`g++}GH@FzZl}a84h5ut*7aOrb^x|4B zsTYeb_$mYjY8_<>nykp{B6TRn=z9LX?|<(-RuXpk(sQ|*S1Snh|1Ym*(s23m;^4t&75nQw zCdoXv$1Vw&7((`qL$zNS6u%6 zBY$t&+im5~&b&}J&#(LO@u;`)mtDEnvNh;5%HxQ53hN%W`6;i;!>^+Z4KNbFmg zep+*V-1}93|4Q9dJUx-~XPvFG!f#wJWa9s_;_X88yFLT>hTQxy9$_rl-4SufLvcCn>4f;}SSGY2}I4-0LTt zP3e3r!FVKU4M$(m1*^2u(y2j)=YLd8%-bIMxvacAFF)7z&z1mgclJ z+P~8dA8MyZZ+~}ZZ~gy!?sNVAX8UXMw3OG{fBkeZaPi%|?UN?Q3or_{cDS;Y{Mz^2 ls_*~xhlyX3C6@h=&U(?lV5?XE2L=WP22WQ%mvv4FO#sO$nc4sV diff --git a/share/icons/database/C31_FilePrint.svg b/share/icons/database/C31_FilePrint.svg new file mode 100644 index 000000000..53234c85c --- /dev/null +++ b/share/icons/database/C31_FilePrint.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/share/icons/database/C32_FSView.png b/share/icons/database/C32_FSView.png deleted file mode 100644 index 53dda269ab87b7a5f0628290fcad2cd83e9c5090..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 721 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfhpP3#WBP}koDl%{@7$0 zh6m4WpWm_e={7TVb_-4QQ1j*J4E4ORKqcvVL`P|P?1pU{Hf)^GwP9)mhtS2T_6LqR zsZ1)n+Vv~LJM;PHGkc5ASKj~ryfVmz0RkHM?%Dl6`tH}{e)*gCWmdu$1$0~CV*Enijo&ETZ%J(I1?2)UFUi~}&PsF}WxB1uI`E^#f zf8M5zRmXbwAHJAbl&yXy?P2faNE6PI3E7JeDur+V{;ce~*uUGcCt9Os@Fq%3e%rjH z?@7!Qre3}x-rU2@Z&!UiJUOi8>Eh#aW8yv^u)X@q%T5-R=-pf-MduiNRy>lVN4n=^cmXPp z4o~+)k0)mWG+0fS+`6oDOGI$lasU1IP2LuV@-Q;8urxL}D4BRp>HPO=yQUH(4KN(| XUzM5=yL3frI!M6N)z4*}Q$iB}lw4Q< diff --git a/share/icons/database/C32_FSView.svg b/share/icons/database/C32_FSView.svg new file mode 100644 index 000000000..c0d42f28a --- /dev/null +++ b/share/icons/database/C32_FSView.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/share/icons/database/C33_Run.png b/share/icons/database/C33_Run.png deleted file mode 100644 index 522b0a3f9314bba6865e42852dc009e67d7e7c9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 836 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGf$5s3i(`m||I*9e*)gdy z$3MO=K6i4a_cM#$t?DU72a}>_Z#fv|D!kEYZ9>2q?G3BMXRe{~pKQ-!0^|dlKeq24TJh3L}QL}Sj@w0n(cgt^GvL}Zje5)M?gN7!j z;@X=3UoWP7YE545r~9O6=l0^AcP_@5ofg#OJe|t5?XTbF`}=cjb~>;fY|p$NYxVis zPGRBh?#++8^Hc6z40Kx`?;ftj^3!H+6z|=a2D!J7m;d^!%=GH;fh(6TP32y_`kaSa zbK-3mhd1Rf{%`jV(GhYHTsS2n$~bkFda#qul9nBu2@GGpefzgXmOc08m)(qx=?*ha z3i$adH#2%^K1p!6kn^aDx7g+N;(0+l%wPBa+ZTBE)*%Cj%+|i7DQy*b^KN|Z&=w6@ z>y;AOqr2y1@w*?Dyep4$NByfR&F1FKxa_htNQ3*)&&o$Lp9j9zRSvUj*Uz8u^Of4< z_xtMo8m&z_w(3na&!3*AA3N(JFF%*-k@e*dj=#S+zlKeJKi6A6B@V%~Nh`zStaIX{ zZTa3rFi5@ndiLzsiqxk`pByJH2ypl%msKxc`CR?W%jq4p@=Hx78Wi}Sn`miLCimkU zgMfh9Hu=1F_jj>gja70MSbph#e_+*HvHRaCVVc zG-c7({LXu~wqGf}9Ab8D<-fA`^W8QU> \ No newline at end of file diff --git a/share/icons/database/C34_Configure.png b/share/icons/database/C34_Configure.png deleted file mode 100644 index 5314140ec6650abf49b8fc7109f22f7b4f06b004..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 828 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGf$5y5i(`nz>8X=qJ%S4* zj@`c*kpA#b!mTT3TTDcAUY0DAzAX9VQ}VN0S4>Wr@IGsGUc?{Z=y*tP4@VD=;)_js zB8F-~3lpcTP+YReXm01b!?Ne^#LQ0n@XdZPH+$BXLx(Nr9RB^={(Lc?#?TYRz6**Q5PB;=ExrRB<<>))H+dYe~b^?k$g=R3Vsyn;PcA{`ti%$&)XRLHhu zdHg5N5-VF<%giG)XNt;5{Ak#_cYQ(LxfZ_TdQ~>;H}3vDqbqVOlcmYx!RN(_N=iIC zV)P6Sr?E4fcv`8?&USC|8MB}TyxX_k@wmMEMOn26ij`ou(D{{Fk~4*dF6EwWLckDvcD`;ukLoND$6 zBqjgsJhDj1#j4-bpy!puoUZ7l^VQodWS z=4|^t&32ycqWC2-;@7U4MtQVfTA=XlV#A9Jxt7*ergq^uORruFkd`jHbl5*8{{Er8 zdzs@8UcI_~va{Pe!_Y=}?@Txl}pV#a4jG4c8bmoBkY?cKj|( \ No newline at end of file diff --git a/share/icons/database/C35_KRFB.png b/share/icons/database/C35_KRFB.png deleted file mode 100644 index b518beebd6a71fe8c7372b9c3cac0ae33db18f46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1021 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfw|w)#WBP}koBOyPjo56 zfsgOs@4bHg`abvDj7$IIa!+k~aH6ewqOY>f&1aK*j~+SF{BgsK85N)JC(8BAmJ;We zi?Mm>%73gP!sbk_TJeH3Ml*ABi4*dUY|IO_wHMdEz4iV4dG{rkGh?p1PI|Jpolo}P z!u{*bUtJdoiJU4LIk9Gw7N?^3qzNi1u9v=SD0w#da=6>Ne>EZwnqu7+ea$LAXZ6cg zFSNaPNzKmsw{)4q@ky*^W@cvFo+hRG#z}v>d~x0#o${~TyhGmVRZ2lYmy%1!-m6YYcT~=AKeQLG0F~f|sgX`AbG)-@5dU;N)xAmrM z2b;sz1K$#=**971+!mXdF*zhS_;PW5?$c_|b?@9(zEcx=zdV5RPw1)VH||HXKjnJj z-SM_vW2bIQaHCXnsQcrMt1n)d2P7p``>u(+P#{8e>gO)+*tVT z-rS?#Y?g^#i@d2-ToP~Y`Fh>VH!lp8uWtNc|JnH2{N%;Y)0e5=KP$ei{K>1k>gRg? z87aN}Akg_)>3Si_qRLynL4=`#*k~`20%kd7c-$lQ>l;zT&jmTkfB~#;oYm zv$LJjUH&VzRB!L*@w}?}YgNXZSIcwv9%)?ocgk6#wmFA2^McN0uITHL6HuA|cEQ51 z?%LmXuP=A`^Yij^|9$0IJ4_!Y>oTujldjI~9=VoVmUKNnL(w3N \ No newline at end of file diff --git a/share/icons/database/C36_Ark.png b/share/icons/database/C36_Ark.png deleted file mode 100644 index e30bb09b90484146a364dc83cabcdd0787cf5fbe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 929 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGf!Wy8#WBRfzxMLk?3hpn zhmXbgcN>3x_Ij_6(My$$nZg;?$r^@NkEkRyUwO3Xl9#fOfab2k&?CLxt}&WP8)vji zi@Sw{2y}UwC@|(~x!$^va>B)f+1JD8lFz<0wV5-&zuT+l75nWw`<%Oi$0Xd`+$uCg zxNMDWY;5c-Eq9t(Syict6^F;wKMsDzU49}ZNJZ+9$ftTk>(A;>Kkm2gfa_vn{_|03Z3Ip2itJ~e1^W*E}%R&oOqaK-l z=RYPMv`M7CDdLXmv#o;N$7byL)~czqMs7{+z5Cj4@7@2JJ^R^C z6LQ;)g%E>6nLfpF>ph7bEdcbGEhNg!AWLM_&$JwfL4sc;1?sv(1;kyBSvD+_q&)3!88PXYzFI=&etu z?wmjMQn<>2Lr#kCDt&eC?#}N0|LN>>X6C=k!^5v9b$1s(Z?x%8>N)s%*1S_s{r*n# q+x|zP \ No newline at end of file diff --git a/share/icons/database/C37_KPercentage.png b/share/icons/database/C37_KPercentage.png deleted file mode 100644 index 64995d2de0ecf293254162c74fb743f87391374f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 980 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfjQ07#WBP}aOuJK{#QyF z4t)In{P*8`2miA0@!9CrO>0-w3arY_I6X}}_C=UZ*vn~~POa^o+P_IxKD^j2`xW!` z6Jq=(v(k=ElF?LBc64aDt<>=*=I2N;IiLAwedoSl404dOc`mhAp3nZ3 zJohOF1r6qZ3*Ja`o|2u*oY)n$cgOBm@&8hC-pNBfboJVDp$vvIITz04eP7vs zD?3J4?_{j~3Z^|*KYWaio^$-&o}!qIyDqzb-??VqC7W7dtA#ITPi_$AVB}o8Yulez zHuWQuCY`UEw)E(d4`K=g#$Y%##|s5O%uNsXiW2XrSM5|m5u-OJ->ryt_(%tZjb>eInyDt%duK*q#lL{(tM$ubt>0(K@9?_((wt%P zHle*q4-uQ5*mS^b3gbVpk`0MAHolj0vQuSE4q587YzK*FskF#Eh zo>sZ)*1|tu999QM?h=gYx|P1(M>J>W&+P|mGA-u)OpGzyv)^4<&wEz)WWH_FT{VrL z|M(N${6^OE#PwOdhgQA3!xxduH6iWWm;R6Yn%^pmTlMw)EBbio-deR;bF+PPA|-do zA5Ob+GKE!pV}zDiY~S+DT2G8bZk}~xo!}r7pr^k@`tjpOTBzvLH07E?-L3Z%*5|GadA3u2ZF=6a z`c-Zp*_VaQvwcxw^JGT2_%0KUnGuRB%pQFHYq$REw{KC4FJ^Sk>*_ZAdg7mO``k6N zL#x=9u8H{j&wutbuA1xn%fEK^J)30pndyXyV5#==y1o~E53V0(y1+2`Zl3XTt?#8G z)wgzutX*L6Y`4jI`|InaOb#emT}(yv3Ba$i^k5!o*bIMz_Ngm xD}hOiQ9OY~>44G#X1@hY8yJ{8m>$+M{#a9aeyN|u8wLgj22WQ%mvv4FO#pO#*Q@{l diff --git a/share/icons/database/C37_KPercentage.svg b/share/icons/database/C37_KPercentage.svg new file mode 100644 index 000000000..3db85351e --- /dev/null +++ b/share/icons/database/C37_KPercentage.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/share/icons/database/C38_Samba_Unmount.png b/share/icons/database/C38_Samba_Unmount.png deleted file mode 100644 index 4112a4f631c0f5b04d5438b4eed42827c5a00418..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 999 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfw|Jt#WBRf-*uvA&XiOJ zhx_0Ep8oS+C-v4$zv(ZnE+?`@-{#<5v`{CAH!8@miM=bIqSh{;puwA$IvvcYEhY1zoW_p(O~ z&nO>L<}W{8vib;@w7E&>3BINFH|%$Pc3QPB*Cs;Xe(<9i59V1pED$N(dh6cn)_>2{ z^8ftvnJ*$SIXPr~?8BOB9f>=U2H#T3j889$+$Xnet>R?;(0@Pe6_#$9H7nY`Kj-c| zN$uS|Gjl7#wNw^Y?sEH8ayce(-=>4**VQGmBo%*0U0*o){oa4Cj?LZry_7+*=i9q! zZO>RQp8K+}yduZp(?iMjh;{SLf7w00Rn_$9=;{=G-47S~rq7Juqx|ae$%+4&f>t!{ z^8Na)wMdvbT4kcvotfnl544(lKj%nq`5=Bwo1E(uQXxRR!ng zF&h0eN?d!Y>Z*FVNrJKOoq02k#P2!!hF{MuQM_!0*A0Q3o0Ix8W_?`1cj4m2d$ZsA zOnUnzu(6*j=E&l%pqIH`mmlBJ)m{8Hclq+oQxBAKwCDc%Eq_62;)@A<6TDO>WoK*O z(G3^8<9u0Vp18o-FM?+?A6WnBYrf*UW`eKc{+SiEixx1uC{0@ya^Ti0u35_#ha5O| zjBRB|S4XPQ4?QR0jt#xft3y^MwCg&hX)I!%;+4HG_qfUJeci8ju`upfcjz-ylS4v# zGK*t_2-DN>olkuquams8%2aVm(3{)ezwGWjvTS;d{e)fXrZ1hc@3FwfBOKi^()N>E9ONJMO`q3`4$jm-YCd4A>BS-mg6 zdnn6$e52CE?S8c%z0Y4*cs^NC^8b^^{pWV}%~^Hjn(g`3p{+q(_wK#@@?}Y8PR{kjO9KChJvLmC3SE?%9gDA)hc zV%^f$$1>wz?0uN!D*G-f&(}oY->?1`r2Dy>g{ Sm>C!t7(8A5T-G@yGywo5g6`S? diff --git a/share/icons/database/C38_Samba_Unmount.svg b/share/icons/database/C38_Samba_Unmount.svg new file mode 100644 index 000000000..220ef6d98 --- /dev/null +++ b/share/icons/database/C38_Samba_Unmount.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/share/icons/database/C39_History.png b/share/icons/database/C39_History.png deleted file mode 100644 index 95e7d6e8ed5d29e28861c61e8b41409efbfe623b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 963 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfjQLE#WBP}koBNvzH}-> z!^3j1{_Pc#$Mce`&pli6KqYUfj!9$Di`G>Np-va1w*HW+mxG1`f+_Eekaj z=xeqXd3K^`8Iyx4p65O?HzuDf53C%vlPD^~s6+NSoG zd0SzdjyD6tiA_B^&5JxT;yPElFmIPryd=DHZC2HfP0P5}#mOyGwm9_Z^#2+2<5LXo z9zJox;N2_3K9%4?5x;)F7w=y`Jsi;F9?do{BgN^cIM3E>wxe51-SpFD&N^jeG2_ww zsY;uR{S&^L{=3K6vaVQ9Xu-vt4{6D~QI0zP2i9_(?Coj3yKRFmcf+}J2I0rQ$A8{d~^{-+u}=T**k#)hWoV>G6JP z!oc9fVH2nCd^qyY>ChGPO;SHE*cg(p{pa5s)1_aTI5zyRZ0tC$I2V*ERkoRR>HOK+ zl$kvv_4Cr0ySab1#O7G;?DEwy>Q?#ILl^w*+n5xOZ4P(t`Hvc_N+F0x#{Vxr@wnB z{z}~)TPpU+)ll~Qv1-+L?$ucWd@U!R7Ukr>7vOS^ZtX-t@C%^m$k9ins?{W z>M)U}a)-ckXOf>yi#w?qZelv^O=m%x#Fi+&ZHogfr&<&U{n<6?$-D2%H@CY!<_^hb zmQe}vZeYr@e{i+H=KAi-`=XhfU!^E5tC*0mKFR#L_q9)D3;!vb)Hg=WO%rW7`rpO6 XX6gct0}~h+7#KWV{an^LB{Ts5bEe8~ diff --git a/share/icons/database/C39_History.svg b/share/icons/database/C39_History.svg new file mode 100644 index 000000000..a50a0f92a --- /dev/null +++ b/share/icons/database/C39_History.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/share/icons/database/C40_Mail_Find.png b/share/icons/database/C40_Mail_Find.png deleted file mode 100644 index 6dfbb958d7ebf94e780e6deee43dda1269462db7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1018 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfw{-i#WBRfKQ%boXLc%s z?fvin_x{yg>hO{)TlYed^yG~j7;oP=Waid6J$A;foij2P?b9)|%X-w!e~evN`0K^? z%sGONaXwonC>FCUyUlWH$u?&*&4k@f`WGDQZ~g!F^T47&{~|d*zjKvV?O(pu_Qm+I zCO53wbeu)ws^eviBXiyubG9v?eB3^^x1v|irn0DtVL$YJe=eA zf7bS6U+-KLF5MHlAfS@3e@$M_NuEVc8&(RaY-c#eSS8z^^F`0EWUJEp9Wu#_g}Xy0 zF72GJuG|>o)wF=UgpF%C?*<7@lRk$aMp;HJordj)8t$0&^V|It{mZNzY!lA$X-{95 zw|DmZvwt?-xm|llPv@AChPju9@k>Q91_Oul%uCG_g!~l^J{|s3_T<~{MFA$$0?j9f zT&~EFVtQ=;uJ=@zoN8KEZw5zd*n!YrGs+r7RnGX{Z_9r5OML#a{eONf{Zg>W`E29o zs`;!-ds2;}C*94nuV1x%p4)Tri5=^m3?vzR9g|X77vJYQm?Zci>vbN#_&m|puOS~6 zOkoR;u9li2l;KmmVVxvG?cM2glW?Zh8D9 zda7^D;wSyR%P&a=&QnT1A9werk>UjIpVu-yBJ%z|8iC|r}UEf_vTej&dzvo`(!ZJvX%UkPrm5i8B \ No newline at end of file diff --git a/share/icons/database/C41_VectorGfx.png b/share/icons/database/C41_VectorGfx.png deleted file mode 100644 index ec47b76e3e4af2e3a16473fb97c9f5cab83482a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 743 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfvM8d#WBRfKR4LcJH}DO z_Vc|ryXLE9UvLo@X--ns$XM8vq0C{Hlss3hG%Ncf`;tq?F2yTkXgUfCiXB{Wv`ayV zscYYZUHjJ0HMjhHM_s$(#!d4xcZ#3gGcG@J>eQ)^fByWDVDNn)>hwYVj8;@)q}ZjG zTW;LGT^t@BUY}52e*N{XKhI+pD#;wfj?CBvRQF z=6wn&KK1@>?vh)#KbEGkEqs2o`lN;kSK*$M5oSL>ws~ILl>298NPy1ti>7vbqHPz> z&bVgusNzxRffYA%bAMDk=OH*Ov?Lw1TPHvw*{fB#_ z(dE-&t3C2_587KfO*y$|#!Z#i)7CHLvF3OnBeS5cxLKc@o1^EqzrRPI#-1Gx2|;>O z7j(NesH&wfXa2i#nE4gY9|POoZ3`8z?A{e{<7VTNU&niSEle&x-gWMIVt?;KhvLbX zQjY|)aLRgnPuMAQ=eYZe&Bh&*g&Ww!JkPCLdoU&InC|0w*RP+PqPsm|mfF;&XV=SP zIj-dgYBc%;rLyh(U43Q!dO=fGow+lT*LiDZTw9^>W!ry_Dgj@=M|EXlE8pccY)=y4 zR&g#g^j-XCqF@WB;as*~zaMT|xGFgK!?R}-mPahsR1kI--QVO~bT}%`?dumO1kIg~pqQiBqhs1uu%HZZeg-u}xRy^~s9|cF1(q$VoWV77OdWHeLE8qPlZ$ z!o(#W=L+VXO*@;sIb~^3p}Lxyk)o}^DmFFk%a@L2D!;Jin>R~+*2B&DKV}51zREQ5 z{PX=^zkI1t*FSo8yYGL#Bd3k0mzS599xtr>$G%c`sr2iniDe873=E#GelF{r5}E*~ CIaHhg diff --git a/share/icons/database/C41_VectorGfx.svg b/share/icons/database/C41_VectorGfx.svg new file mode 100644 index 000000000..443386055 --- /dev/null +++ b/share/icons/database/C41_VectorGfx.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/share/icons/database/C42_KCMMemory.png b/share/icons/database/C42_KCMMemory.png deleted file mode 100644 index ee2560a0230f5892f96270031a20e7f8b7edc66a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 752 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfvL&U#WBRpE=U54r^JiL^JrCv8+E> zkZAPUAtzkkp;IS=Re`yI>%dHhxvVSB8+9FSi+!xEUOeA=MMl^gXJ*b_pBt<=SD3C& ztv#0VFPML|(B7QCCXUyi-}cE5mvv&+K606%T(ISr_Vm^ZOZPT~>Q{>=zscS29KU7q zy6v?gIaVuPU6kd@n(~i3WEw+gYgFWgIXZD43ri{+A1)MZvuf&baXJ%`mGWV0?>tjs z*2y`)EdnCBLPWAJPW$X?nw(ydI*#KRroXcy!X4cdH);9uaE0V zy*l;>$2)iO-oJE9WtP?7DNbukzO%pR>owRFa;*P#R+QIMO@|K;uWVT*6O#3fx7qL6 zm#qT2S9#7qFU)p!{A~L1#hX-y3(J|KE~;F~>UBA@@F4>O1B0il KpUXO@geCwO^if;@ diff --git a/share/icons/database/C42_KCMMemory.svg b/share/icons/database/C42_KCMMemory.svg new file mode 100644 index 000000000..6a58fbdaa --- /dev/null +++ b/share/icons/database/C42_KCMMemory.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/share/icons/database/C43_EditTrash.png b/share/icons/database/C43_EditTrash.png deleted file mode 100644 index d09e0793567ef5fd0264267c6350fadef85e226b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 880 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGftktE#WBRf-}mzF{ODAf zV;|rD{xv7r`rF5izMhvR98-Pkq&!i{F>=BVPg#f5gjUW@!6TO@a)uo_6u`;ZIHSu- zK~XHhW2uQk;EEMhidj+YMPGG4K8<-(Tv^Z4*zuhI$BW%IUM>OoYn`%Qg`Te~uiI6# z@}20pjHf%iG`%lfX>qi9_dfSc`S99lBj)M~#{Ah)X0i|yg__ir#M{(9%; zOI)hSi)k|0|w;KKVEMy{DB0)4BRB|2`~z8r;48 zdbG`rZ-V#XPRc&U#ml`cs!I>Mjd>hDkX-M?_osW-0=2o`LbvgyidP z>~SW3HeX=aLfeWt=i1KhHG8wO?cP7L6t})c9cEUW;!{aeGUQ~fc=+8+*puJAab2;} zYSLznUF{Kj4I|YSh#Y5Fpu=j}(!{I!RQOcGuI$fSI5XWj&n|41a848Hc(h-Z@z?^! zz%Cs_lX5=Ksm<~(6yd<6Vmfv{y>rTyurzN6XQHzUHcQv>8EpJZEHeyziVU}7D zQ}QEOJ7u%D;g{rZ(aMutPDJw+iU{*4mn_@Rd+4fIUut8}FNusi{!4prs0p5RDSE?J z$=9Zt8-Mwe?xKXI*H2dL7Clxq%i@&6x5>#5Zl%lDmDWD(6X|A+S?}d9_jr3*@9ec! zyB}wkJmt9&`i*IJyL7)tUX7L7ojqJKwT_zZ+W9{}73=T&^Y75l@U-`A#Zgafw}d)K zD#!_z&DwG;T=@U__p@Z~{F3+) \ No newline at end of file diff --git a/share/icons/database/C44_KNotes.png b/share/icons/database/C44_KNotes.png deleted file mode 100644 index f981a9a47152fad062fed993fc5a18b9e23ed79b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 786 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfoX}Si(`m||I!Ql`){Yn z9RIjo-hNxMwO`Rv_vn?jvE1H*%sjRmL(B~f3=E8vT-a3vmj7d4p)AB4l$hww#L3yx za^w(`w*8ew-!!bQJT5BK>z!-SSwBbqHovn_;j2^Ozw*w%{#mm>-Z}g1f6d3+1m^FT zV#$xM{T{Q~_kT$;Y~nV~c~eoLnJzdCAK+ z@|y1#|6Bg)xq9G_w9`9dY$`nBHIJOue_+DeVVS@@{lM)5U)DX&d$wZjf88Q*w+@Ezav?|F(xc_J8CCouk8wK?>>2fLu>A>qo`&z4=^S3I5j z5!b${${r1p0d}m#7r0j}S4e)Q&bhhA!))3MPcEj_Op8P{!dLuwKiPC$l7aG~$uZ}- z+b(^HmetMXQCod{dHSU5FSTQiT{z<4BO~U!%5usrLD|DOVH+$a@49E-n#HBnl*MGl zG}XXTZ#9$C%G`@>uQd1A#q4s?ViI+>WmIlEI_IOuN+CZLzIR3GwQOk%E~`d7)@rk9 z3S&{_d45b&!26=HjDW-0BB8BwmiRgNI`}&JYd+%qRM!#W&htL{&!_2JjUHv^)9qv! zCOwrEF<_tBFsE^@gKXkyoXvI-+pv{zLp(>*s;6jZ>sN=J+IvVwnJgV*?IZ1 z8q=lsWk39-wk`WYmiY_Ev*Po4Us>Dt?SFlE_W{m^!oy2HXP=wKxsNrLTQ5>=_PUdm v;g?F6+|2bh4iLTfe)FelR{7#(|5*DA!#!or$=qRJU|{fc^>bP0l+XkKgY8_5 diff --git a/share/icons/database/C44_KNotes.svg b/share/icons/database/C44_KNotes.svg new file mode 100644 index 000000000..0852fdd1d --- /dev/null +++ b/share/icons/database/C44_KNotes.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/share/icons/database/C45_Cancel.png b/share/icons/database/C45_Cancel.png deleted file mode 100644 index 443450f09044f70c0c9eb7b9f138d080f66dd866..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 998 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfw{ud#WBP}koDkgf01y8 z0}t<8R;QJxwMVAv#tCuqDzdGaVYX;x=hEDo2?3A0CtXvUDrRVAClM_FYx<340kgv* z9cw?h-ac}KeTBKuh7P9O?WT#LO%J!pmPeMSpR@dH_x0_z+>k{pR&L!_r;+`(+W*@1 z-)jw(J(CO8xJoq}u&p)a{IR6;^t6Yo4F8|Aul}}E{pp;pwYgQ+lO-2MGP^h}UHrcTkF1WZ)`lx-RiVHD=%Zmx0~+-pQLg z)~Vv;#EA#ly(GC0iyfHpj_>-}+AEhQPyG9rWqthRxn6H~7Qeh?y7gq~?ai~z8s9rh zEIK!5;pUJ}U%tL>uK!WTyY}!m3pvYzFBuc83Yo&f9kXA}nsp-Y-X3S$%8!fei{IZn zurTZD^y7Vw0uScd`KE7tQT+LthcCz7n|J4as;*ub(lk}{%^4nH^SqGsiuyQbu=`sR|*ub07U$B#Yg+_|&Z?KO9w zfChu6s#;gkWizUN1o(?`)gHTbnv=mHS7W;2 zv4kZ@)F!)5_M3fOSa^z<_{8Y#Obbq@ayV}Za&s``RAD?GCDL$FYPOf`z0I}1r~W;C zI?s?t^ZdD>nR8hWe69V{##Ux(W~Ifk&Tj5JyVRbOj2hWIW>a6))gSM>^DlgT)2ByD zViOLqDGKyCKiL(bxw1`h_v~4FQUrMH_SN5ySld3;V`*Q>maV*{>(;PLb!y~bSWzs) z)t8*4=u@n;Fe&@uwV>$OrF)ki-F))NgZRaZ`?ButEPfHNR4C+gWmW^rt4o>xKJIz- z*z0MwwCjJ(wfft4tXtozz_zHB)ym4MM)@iKswh2iuXVruP8A9Sx>P-O`&3%`aq-lt zpO4*|&uXxFTbb6&-{R4)UfbsC8qIv-yVfl=H#hL?^Uw4D-MaI~J3RXKJl@l%ZM>F0 zKH1t@Y}Kc)GKER;!Zkkox_>cI=cRM \ No newline at end of file diff --git a/share/icons/database/C46_Help.png b/share/icons/database/C46_Help.png deleted file mode 100644 index fc50cff7408d77ee4862333e0e05accb5abac268..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 963 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfjQLE#WBP}koDlrY?)Gq z10Ub#mwlTt*VgD|-nO#IAz4EG+p>D5Tx;>*wGBGzBpCR5cD@wn5AzQGeHtCtyF=u4 zIOH^%^u>ZiqH~0kd9O@Z;;EAP?S$NBV{7Z<`Nz(?7yMCX;9#|w=jJo#oM_L^gNK&} zw@tjdv?t?=?(=`g-pxH1_cgicL;AuaXI4CK6j;H)!MM(TjpR=Lb1@aKE}hw&yu{c_ z*80fHMtQA|dso^1yuNnpNo#KN`mN>Po;loM?Fih%&}SYap;i0)+n+aQy!Cr7Y*m@M zHkR$OZNaTI>%s-I=CJckKgnlTl2X6@Th01?^}P{mqz+q5zf?4n|M|1@^Zxd+NwurH zgVz^S-dgay(#C8_;ircx*TuE3Nbzy{Di>y4xpDuFg`CM*d6AZ)M_+EL$JeLraaqi1 z{ashht)!=>Nq_y;%KyLBo(4@jZOp!6`!17Jp(3FRE$mENrS>mTGyXN({kVH4lfl~t z7o($xyqfL9b+`D;%Q~H$dO0mgr+?at!0g{YHhC=yP{{nUcd6Lvqc4|wiG}a7iQ*A- z3MeeevexrG?H(-S#?GD*!KfSj=u610xoR0^E1mw&n05B$PA~08+i&Z}SQbW6LGvLtb2d5E1#| z*iWUj@K5iq{{Qjic&$~e_-#YZX1Nn46Ir(2eiyOx#PvX@Ll+)@i(-iFKU6ZSPkCll zdh1qQX~F3(ms$gyGy+=`4Aweiz6<#uu$QmOi&3&c%W>DAy{W~i3(wx##%nlV+m=P}eikk+ZZ0xp+{ZqTJL|;JV7BM;JU)N&;gpe2VYt+MKy_vM#8Tn? zSO55QF8TBKUhmTPpB5fH(7@N{ZNoLwX4=D#?52J;lbYwTH}dcEj`5x>kU3}fe?6h9 z`$ta9`&fH-eL{W`Jdb;n=5bC*8(?%(%W zYlXLhfXIDjhXn$b>-3!Tmi6rWney>K;KHTC6MH`R-2T4mEAP!!^>VGBvOA;}FmU~6 Z_CB*H>ie}?eFg>w22WQ%mvv4FO#pl1y9@vT diff --git a/share/icons/database/C46_Help.svg b/share/icons/database/C46_Help.svg new file mode 100644 index 000000000..6a7bf8193 --- /dev/null +++ b/share/icons/database/C46_Help.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/share/icons/database/C47_KPackage.png b/share/icons/database/C47_KPackage.png deleted file mode 100644 index ac5d51789bfc69eee0accbd29cd72e64882fa025..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 858 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGf$5E>i(`mIZ)sq($K*tb zx_$p2Y@0tN(`xI=*`GT)pYv>*q|ss!(Bh=HW!sIxi1Nx21H`WLo+$#R~ zyWEt_JiXg#Cyi!4FEz|s<1=%C*^3Dq?fp-z(AJAK-OX=le{0?Cv}bI(i;K%O*JO7m z91y!(w^DVVrlX_?%emGyuG~shYdbs*6;;idZ`}!5QEci`tKgUWqjblilH_f3YHx>a zb`(JF{rcJDF)RVms~#cT8(LsOy_laDb!qjK~+(n*mF&KU{4o|F(8@j=+gK zN&)5Azgnyfv1nj&IztG^^yR$!@pwckwJu{@ZmN zm{Mjs=B(lJtP<_=UX<{ETEj^}W;I9Wc_JhZqTMljD{wc=j?2&Qe@yA2jr#ODR?A)NJU3XDF%>9s`D;1kag4&+nj>P`;!6?hc~+L*yLNxq4x2f~neWzI_Y<9S&U@`OQBm2{*z7V1_xat^ zT2DUwpQAYETbt{=aNp`Z+P;rB%Wk(jTN=J^rpM~i_0~ \ No newline at end of file diff --git a/share/icons/database/C48_Folder.png b/share/icons/database/C48_Folder.png deleted file mode 100644 index e648b3fecbff8dd3db735ef47dd4360a90589b04..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 484 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^xl_SO6joXo($ zppfhlvZ1b2$?r=%0;BLJ*+8ye^ZiGM-tbJ#*(UoEE=rm4nJ*nI2H7J zm*?7D%y;@2-m=I=7t|CT_30{2=IPvOziZ;W=Yc0OteG-OS?^R#Gb~S#Nf9$*cIIYg zzIO2FOYNzLzb=~AwMBqoZitc@Uy*jhm6n|oOZD5&ms~j$#qwbqi-Z57Qa&U0N{d>F zV|NZHwENZ1$z=H;r}g8->G>P{Zk=eh+-#(O?QY^rIguk}O!v5t>?pi>t^1}0qe|+5 z@cKne`ri+nNRE8M=BN<8!VErfm(j38ik;Tz8niK1$R`uso19 jk=5vc#(UfU7tMLaS!T*^uARWZz`)??>gTe~DWM4fefGAv diff --git a/share/icons/database/C48_Folder.svg b/share/icons/database/C48_Folder.svg new file mode 100644 index 000000000..5bf47b6e2 --- /dev/null +++ b/share/icons/database/C48_Folder.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/share/icons/database/C49_Folder_Blue_Open.png b/share/icons/database/C49_Folder_Blue_Open.png deleted file mode 100644 index baba6e00e8fcf143b24c98abbbc0c1a5568b4cbf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 496 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfw9Tc#WBR<^wP<`8ZLn% z$KU_Z@YM|K%F#_*dPQf6h#|Mv<^yM(CV6a{DA$`}#^vkV)2bF9?CfiDjHy%V(?$hl zP4BYvr*3_Ff2aEXosZAJuJZ|vhWvpiWtzoqw_3=CZKi!AgvY$k1~O8PUb+0*DDr_>){F5V z^8$O%=Z~-d56cg@eq!b9=~I6^I#{duLH)_KsxpTA(=y*XF4DC3k~?l~?w@>R#kym& z`j<`T5ENuT \ No newline at end of file diff --git a/share/icons/database/C50_Folder_Tar.png b/share/icons/database/C50_Folder_Tar.png deleted file mode 100644 index 69f1c455d8285bd016d9c5e6cac1866d2ec36e89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 719 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfhp0`#WBP}koDkMzZg~t zh6}~|jq%yN^Tk3-)SeeHFmM|`zTwa)!@$sRa%Tq|7+8w$Xyr0W$#7<3 zkX&QK!l3YMxoU86Hv@xM+Ods|OqFcEOBE)lh#Z`Izw>7%1H;KHcV@NDoE_md@8G-Q zYuRVkF*q;;DkyqRkl1B*cI%Gl-x@nRpYmk6pIP_eeY;D`e>t6-d%w>tO4mAj>&m}- zSASmG;(h&o@X9jJ%OSt~AFsQ4>MKvy@dJKE>N#+-AY!`<#@O+bYxM%3`U)ArGi{EF-t9qNbo@(9Q`>8KD zU6;YgA}iq3iOq3U?wK+Z=U?3C@822ZS3UKfo$J#Rm3#|kM$VADZ@xY4N89JHK5>aX zO-+yWs-j9*rrKSSTl;0=+PPMro#P+ZN%Q5_6&}x*&wt)8-?N2p+pk^Kzb~&lnCQ8+ z`yXH6DVv*jzJ4~hKQ?{7j#=2W=hF+M@2fYk$nNNf4tL*me{RL+sn^x-?=!p+X6ZY9 z-|weC+Mk}C8~@)bCVyL3X-)TU!NO?{E)6Q4LMbnfi|*;_wm9y*CW-rNhsJ~Y+#Ie| V|KFa?V_;xl@O1TaS?83{1OUTnN@D;3 diff --git a/share/icons/database/C50_Folder_Tar.svg b/share/icons/database/C50_Folder_Tar.svg new file mode 100644 index 000000000..68ee554ee --- /dev/null +++ b/share/icons/database/C50_Folder_Tar.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/share/icons/database/C51_Decrypted.png b/share/icons/database/C51_Decrypted.png deleted file mode 100644 index 1e239a7cc8e4251ed982b03c55afff808d680b53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 826 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGf$5B=i(`m|AnQTzjwz)K z3?J@)pOIfyUbApr;^AKrmtBKz`|wM1Pn+(SIKlC$>#1y~2Zl|%N=`LjP*m(%^hqk> znxj&zjf-Pjf6bO%Q{JYXduL_6+t~VZ?fw1t^|=%+YJNyG_$`;cnsxQMoBQ{Ddn-SG z=ri$MymF=WQmZl}}5#BgN75>d~nK+nnH$B!Mm$Eo=Fr}+GN`%7LPx-72uXT$R= zEBVi*O`Wya{eI2r_3QtC72skKaQ67s5gd8{K-+5by#HU`et&M4cjlbj`_?z7oXq#v zJ-_$lON}+ZwiCys9n;Dd zXT@}F?viC*oAzn@i~TPptM1h*{lOu7%{VjX9DEYnbt8W&?MXet{9*^wO zDBfj!=u-ltW=qk`r@u?AMT(CUr~S*B@xNW>^7dPA<}VWt6ge_;!g@AM4ew9wPh_i# zRdgRG*Yd5cP1$(7_%~B(H&g0@Gn|$ljy)L@iyBvWX3W}u>C+9RyOW;zvVH$Ld4a}? zR24%H#UlpZ5ei!(Vz%T3KRNQ-RIzJKl(1lUq-dbX6{ANiOB_6HoNuWeS+eop^Xsq9 zD=lb$DkR9owhE;4mdKI;Vst0Q~-nRR910 diff --git a/share/icons/database/C51_Decrypted.svg b/share/icons/database/C51_Decrypted.svg new file mode 100644 index 000000000..d10c64d23 --- /dev/null +++ b/share/icons/database/C51_Decrypted.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/share/icons/database/C52_Encrypted.png b/share/icons/database/C52_Encrypted.png deleted file mode 100644 index e1edec451bfaaac85fa06490bd26703fcd17458b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 730 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfhot+#WBRfzjczgzlftq z>;BuZwm!yhSy<#9cn%)P5D0T|espe!!pCq4;p=aFB0h89`OW`_QRkvW>;wg?PL~=3 z8=XWM8UAlB@Yip~eL+I3cMWyQNb$9^r!_j1T%i)&%4m#$jX>g1@dt{yM>d=9h6Ws&DHN=+OxvQt-t zXt@L)IdOvH+O0T$5!WS|U8|C;KJQHoFf+3Y(3&gIrf6+l{p7RY=FP?x^B%<9ZY$;s z4P8I~01IPue3_-qDgz1L;I+q}w7Xl{W^dRTs&b;mB6Q8xSSBBRnfn2nvY)>G&DODd z`nfjm?uy%xvbYA3VJ6%dQ803=9pi7Td)&hv}SC5#IsV z-DmGCZAe_tv9LjKh4zZWmhGEmSy#P16vbHF=E6FmVdYDCoqIkUJ^T+t7qrg#y`(d@ zeZ{T6>|IPv{)=Z8#OOU@t#skpXJ|6V;Vd)v{#SC$7dBoHU*xM>7xv+pT(Hd^_Be(u zw%dM-Oh0nsDQBBr%Z(+STXR*9eXlhv#MwLPIlmn9k6+8`KViu#l(X8+%-TVs zt)nCT+V$(wpFe-Tsp7feS`)`D#RdL(|1*#3a \ No newline at end of file diff --git a/share/icons/database/C53_Apply.png b/share/icons/database/C53_Apply.png deleted file mode 100644 index a2ae9cfc75cf75f871a976f69e9d597d1861b874..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 759 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfvMBe#WBP}aOpvBkB~qa z_6PSZpWoZrSMGLf%`(s4O|6;debe|lHyh|K>QK^Z>YC%q>bN@N;^A$AYn3)FFfiHF z!DTY{O`@TokF@lqMUBVgjDIXr%3k;VPW8WsY8e;1_w@@3{$n?u?W`bvLGAMbZ~c#jnP3M#^{3)SUrkiF9XUGY%e$;je=v!sPy_cVVP5i}@72CMh_QyT+ zRN6b;ux_^h?05AK^^JBfUEC#E=hjtny7b#wP3@YBqUCJ#yEHC*YKE4axpp&(RLprv7`}#D-yZ!ptSc={#%PnUweEVtn7VCG{xYy5aN@9?Z zFl>-mR-pU5S(96?#$(g(j|-ols5zT(rMCUY?ddPF&i5)N=Lkv#u`n4j8L}RY)p+Q@ z$!>Gr>_O-}&uN-3d{pd|P6xe^uWX)YR(+^$?tW(ul@HP}JJ?#X75pXFE?|{OI1(@xgu{^W{txlYI;J SbTKe6FnGH9xvX \ No newline at end of file diff --git a/share/icons/database/C54_Signature.png b/share/icons/database/C54_Signature.png deleted file mode 100644 index ba5ac29dd44b4797614a8ce57466c1b744b7ee83..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 673 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfyvm@#WBRff9iREkI9TO z?H|*tw_iV-Yj(Y0*PQxU(dUXbUG?!jabZ(Rmyc~nfb5|&D$5dC)jR_t16Fc&3NBJ; zOr5UR`atoNo|CKN@)!JquHu{~Hb>SsuUIp2vA)f9{u)8S2PsXr8vS^lH75U@%0G=~ z+cVcKYrng&gf+aYzrs3)=~lp(bS9f4NM4BedqN{k4WeCh;)`dF0({ExT^@ z=&f9<5Mut-_JV=hi=vjZzD-ptQ+Zc>6$-!1w?S&of{^8+Z>49f&#YGZ^<+YVwy4kC zpJ4lkukX3j`C|?@ny;mC$M9@FcWT<3 z;wC-s4YCn#oA(R(Di@^4uDE;5D~_Xj;W1wK?o!$3`d>W5{^>GqPvGU+l_27Dz)xWV z-;7X$)d|K;cNy4pHACZ`{ybCQlIHd*)xXf;!jk?*cjl!IoB^Bo*7#jzny~3~@~j%m z>R7vd5)(T!&OQ3^^1y2*_esYSPaaFuJe2tH@rECd85Q=PIlI`uI8ZQhLgz*4M`nUM zgIa4hFt#ae{L4F|>+_6x^50MYHZM#&&@Gx5PPLo9lPnz z*KIm=yLHTWm;GmJs^XRTbTGh~X~BV|^M8C;6JA%hQ~C0Brb#nb@iB2ZMC$RF=P_tR zeVf \ No newline at end of file diff --git a/share/icons/database/C55_Thumbnail.png b/share/icons/database/C55_Thumbnail.png deleted file mode 100644 index 4c3a26d449a02dd2f5d191991e3c62c16d9f72fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 740 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfvL>X#WBR9H+Hgjwn(6W zoB!Q+^S&Ipm?GrD`k1?S1*3S=u8-4MKC|ChwV*n7r+|3mss%f|90VL$4mNZ&4bt8x`d^u$UU3;R!v;b0FaB zio9!r1~X^Rj+T~}zc0?z(<5VRU}bgc(rxpMcZPxo1gsPln3UQcO58F(v$wkZ7o$^y zg(@1pPZVPa@!UM+!G+AS zxmJE#SsI(uxa+Pyye*!wH@t4EO!jI046|UCr3^D1B`m+?eV37IC}QwCpuOhkhNUbE zr7AbOZn~tz6MKAqJwubh1#aur1sm3cn53ROUUR-h<@}FW-W4IrkM>CvY9_=oNIYuE zyC-naxu`pdzrUbJu5cZgppC32-JxhG`QFz(%^bIBl(`YV{{Po}MY^;}!R51zI7@>v$1U4RZB;$~jiuT0t5@6aYUu6dZENp0u&ms_ zS5WZGnu1$AA#01T9lLNr?%DI_yBogEwPs^4PgquxJ)7b69>>s+^A@fDaG=_M@kNcc zT@CLRNLH*rQW&FSz`}9(K&Y1By>PB#hrp#Ap{y+Ld;k55TclCKnowBy@$iu&F7eY+ xc-`}OZf9(Mu&8c4N!m95{NL!zdU&@)2p(j{(kAZ=K!PC{xWt~$(696e_LLvYF diff --git a/share/icons/database/C55_Thumbnail.svg b/share/icons/database/C55_Thumbnail.svg new file mode 100644 index 000000000..64f174db0 --- /dev/null +++ b/share/icons/database/C55_Thumbnail.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/share/icons/database/C56_KAddressBook.png b/share/icons/database/C56_KAddressBook.png deleted file mode 100644 index e24b44ad3be0bac3b47b2430ee21a9974dfc7557..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 834 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGf$55;i(`nz>7|!4JuWlK z9Q*iu|DCW|hiA>&Htk%K$myvmk#ZUAi!L;l>^q^CbyqU*N|>W+iA17=Yf78I%%feU zmwj8@qqYS}YuzldI(j5lE_dg0aYxR`y)U@WpT7V6D!gj6Q!MCG@2{1t+}&PsO>X<->CvBee8}Tk z+SQQk%&dJ_V5N6U(r*)mQXT<)_dR-NFTC1x;hmE7E$bC)Z+n#beF^_@TFl{zG0TF# zj2tr;PRQ?yDqsEXpLw)>R>E@BwVoo0I50cpAb5p6~=&Ab+8nHr5WHH)sTy0}wk^0#l1 z-?v^@lgj#)`QyQZ({Adg?QhA-ExYE%gfCjC;qr;mL1EE%x2<9_u}=QW zd*$>qe?Cg=J$iCFFQ1*k*N>OF-R4zhC0>j+Uwv!unYFtdBAqsHAE;q)sBp_zxy+#Z z`s@1_bL11|9z7S;-5WapZOxC1M<->m``=rc>KG}ne=W?Q>NJl&%aeaqERIqZev9*N z#|Zjow>M79yL2Th-M4#k{+Ycx`HElN`1$P(jg;$kU5g4;8BQ+v{qRE|TiQ80tDAo- z>h)}=#=iM9VQ;)=cD#MQ`SoJ|OvTGwVu5zC_jnZ~olTXro`j^u>2&i-g;~#zNZNPY z)O?#^+4+$5O0H?s**fMipEz(oNM~Ne#AWdZuFNTETiXAAqDI?Z)&hY8DSwPN^0x&3 r \ No newline at end of file diff --git a/share/icons/database/C57_View_Text.png b/share/icons/database/C57_View_Text.png deleted file mode 100644 index afaa8132e9793050650e5d5f9b4aed2f7ef41c9b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 735 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfvM2b#WBR<^wPAd+L~!z> z)2UUze`!wt&h(&mLC{O*s{(~HB-7lcxt6_orI@Fxv`%8e@e>7GPZey9nql(d?b?Eu zmt6lXZT(q#hTHL|^101lcAh(QdOHsvZ{X_Q3mJbN{QS%s6y(w}r7QbwiIH0yztTI4 zv_65O%!hs*Q;VOrZ`1yugJ&|f8&8`a-VrFs7<$+zbE^@XR%%Xr!{?TaKEG+f((;SV z%-9^}sq@K7J-D@1yZ-z9(hB46!iPoIKbVuAn>v&KtLrazHVGLUuf-Ra#I2t^X%W|| zu2mCLE!}^8S1gh^EG)$L-d6tg{E8n1Z6`OUOGrsAxtU{R{kvs``kdkwn#D36&irk6rK2wzDE|HTJ \ No newline at end of file diff --git a/share/icons/database/C58_KGPG.png b/share/icons/database/C58_KGPG.png deleted file mode 100644 index a842c79713b73cf5648f5ade7853c20b48cbe81b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 939 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGf!Ws6#WBP}ko91;$J|nx z10Uc2ueTBJw~kuYHqHIA<>c5|%!z>kPA68FO?c(%x}p5`?4-RCv5Icu8fzBZiwNKp zHQD9EzWHKW^6YIf+0wV?7%xvxuhM(9^Y@(N&uyMto?n07{q6c^Ck|YGwbplSg1BIf z<3{gZBa>OSGj*S{$KSd7sYUZ@^^{{#F(+mFRW5~3lHRb3kztQy+O8ro!}S`L7u=s7 zInJx}X_d^q?R!mjDA#;Dq#r+Jk+JY5gTHhClssWAPAES6e5(`#!;fEvmx=^W`m#Q` zn=YsI-*V4o(Mtci{~7CJQEd1qmN2>ep9&yZG#SV*^u(UUw_E!UA3g27N!)J4sAj zpA*~;`UP(DiP`PqK6$<1iw_J|Gu8T8D;7+-xP#AuF+F!?+i#XLs!Jpm$D9h>kA8& z&APojSk9wy` zLsyN9{}^xeGvPGPHvjy#{kg^WV}VIeeRb9xeDZ@USlM~o>oflsY-2Jr`M#|<>qYZ} zYafjj`D%mbY+>5HbY=E)<$t?=|6QfFWUBTKw{yD7lAoS=yZ_OS>GsU~f^IW3u$X+k zQu#l^;Hb}(xr_%G>eZ*rYE)oIV3d4dmcaOjzj?uiEf!CH7BMg|FnGH9xvX \ No newline at end of file diff --git a/share/icons/database/C58_KPGP.svg b/share/icons/database/C58_KPGP.svg new file mode 100644 index 000000000..aaa0fef8f --- /dev/null +++ b/share/icons/database/C58_KPGP.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/share/icons/database/C59_Package_Development.png b/share/icons/database/C59_Package_Development.png deleted file mode 100644 index b740c987b376d643fcbb8978cb7352c86f9cca59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 847 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGf$5>Ai(`nz>Dr0a9+v|} zj-Ri)oqzuRd-K?8gU^P~=kRAJOxmc~<>OVYp~2F~_V?l96Xv`^FF(!~(O`LY=Fp`R z=5|KK9jmtp#n0f3@|Zb8O0k7y>XWiv(ixq%cGf&BdS^Mm`rUV@hzN-a5ji=&V;2H0 zyezpjV}|m#MUO5$ef8>AuXX9y+2(m+e@~n{S1m6m7Ye2C+GrrKJkntE_U{EeLH*VFEudwAo8MOav9l2g*9_uj3n?=HULIWjZ* z$I9bv?WSi=*D}6*DOo%@c=L_RxBCkVH}3a%6|*5G>hf&qC&w0YcW56u@+mlP+MTWH z4a-=UC7;yvUYVIW`^b#l3^tow5)z)8&b4GS_ltAkj1X= z%{S;b_A1|>&ANiB%!2coSNpx)Q5)2~y^lR1XF=B7 zipn(h2LHeZ+7la{4!xTcbgHp!qV`uV*XCJ@=FC%{z5L1i$%i{@h1Um81_lNOPgg&e IbxsLQ0Q`@K \ No newline at end of file diff --git a/share/icons/database/C60_KFM_Home.png b/share/icons/database/C60_KFM_Home.png deleted file mode 100644 index 8076b8e248d154e3b541750dfcce4d3426127f08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 869 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGf$6)ai(`m||I*24vt?2l z+UHl^pLuiU&6{WQF00+nnUv?_lj-an@IjfAL(n=-G+_#sGNCas&ZkwoZ30{>OIv@r~C$)fe1j z$VqSQ-1q5F)}GP5vf>09^jujk(jd9~J^N&EmqrM*S4nBRTl zy_G(%yqB6Zvh=70Dj2jlZOA9-DckTS|%5UPYOQ{2fn)#tXlv5$s3KG$CJv$X3tPLDk|3K znp7amEunOM;iFxxr}?*kyRznQ*ggT*<^2z2ZNC)Fe6+b)Anl{=^pb^bUte;lSV$~k z&E=`x=brF%VfNW;>x-gJoM)Qrro6sK@OybPZ-MsR7q_FYOqZXO;dp7&7U2tr*!2}Y z+Wva1w=*K&=j8pZQR}>xe|hy$UF+^&+lKbZ+6rBQx69v6sqUYCI-!Hkg@OWFwym`(uTWxW@k3<}>H~pJRO0UO_L}OaJ4;`%NGs@1~-{^TsMuxo~Cu~GP&*ieaDt!aTmtbroqaQY^Pm2eo1uC-m~*L-=Y4C z3m99R9&kRa_^EV?`{rK;HXrenTPAgL*kd+5R?OOZ>R9d3#Z7m(rFqvpJuSW5PhNIb(fsv3 z6K(--G_o&&}=*uUj2HJ^b1GgOygtwdS_`6V;LQcroSWp$fx-`<`1h*DZbK i{-FAS{=epWhClmEjYOtST*Sb@z~JfX=d#Wzp$P!knV`u4 diff --git a/share/icons/database/C60_KFM_Home.svg b/share/icons/database/C60_KFM_Home.svg new file mode 100644 index 000000000..7a7bb80c5 --- /dev/null +++ b/share/icons/database/C60_KFM_Home.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/share/icons/database/C61_Services.png b/share/icons/database/C61_Services.png deleted file mode 100644 index 66478f4ad8881df379864b92fc94e60ebdac13c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 862 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGf$4*%i(`m|AnU>CjH#sz z3?J_QzkT!O+2XR|cWLuv@*ZBhb;WWzxB63OR>uq%w^Z?LTM&5T;b@Ry+57Ezp#S(cr8)_p@Hh!KgbYjzr)Xe2c&U<;B6giyhFubnQYm9N@H8k8kuz&nU^o#&dv3I9x?Gx@Y`HA?rxvunhh$;X6B?hnniCb z$c{@5T`QBkR=P?&IPBuC6L*=n>uVbpZp$Bq$wu;VJgc)Vw5?Prg2n;#2QvUSo1vo&&&A+XI5>r&id}Z zXXCErPZ!$diE5}H>6yW#=-xDoRcxKrmzSFBYYVy6Av(r8r z8Z|6YiO_t}^F>F`?&8LUQ^Ifi-_|OA-dwWl#H7T9D~~fL=XTF(InJms^SI8lfXjFH ztTfou_sg%ouKv;w?&Ep;eqOpLeR=s%<63t1JT@f8X~h`>VE?hjBh;h&!t1qmua3*7E+7O4$WM&KWMU?~mdKI;Vst0FIB44*&oF diff --git a/share/icons/database/C61_Services.svg b/share/icons/database/C61_Services.svg new file mode 100644 index 000000000..3681a83eb --- /dev/null +++ b/share/icons/database/C61_Services.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/share/icons/database/C62_Tux.png b/share/icons/database/C62_Tux.png deleted file mode 100644 index c22c15e2cf202ce61faf6cc12a5dcd3b72367d76..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 530 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4kiW$h6xih%orFL*h+%@f*F(;HZu6+1wP7T zU|`@Z@Q5sCV9-+rVaAH3_GJtVjGH`N978nDCkNbm(cF`Ff8X4R6BjO8l$4Tk<;s;W zUtfotu=1Rkb9uS{=TD!E6d1F!U(dI%e{>}wHTCGplRHyR3aP59Mn~WFoUF$9)n|qQ z<8n4NH8pp4_u}HuCr+GLa>PYJQ%x-`A)z7m@Xq4r4bRT5xpLd~;)|zZuiIbi@SoqL z*E4~6)~BDJ({-d?y?WIkb*()5ZbVi=<-&VYU8}Z-OZe(+X5e~vXQy!N;dQaQBO)Vh zZEgSm`T6(t+n@R6(`)wcfAoF%Z3lT~+rx(sGjEZ1ZJsqt>cW!E>F56)XZZd7J-Zj< zRz;JXo10iQRJ62y$xHwE``cVxT>OZ|inbd!A{6dlx$?!Hk748fHEVcQImX4woiH~x zKD^X1Hdb~8gT$Qx-ZN*;IP9A+;lh0TdV|pV|NmqqW;?L<^z;PqhK7b7NMRPq%FqA* z{k{CASNrS#Go>~LEnT|Q!Bpd8!V1lak{YHfuk5fqe&~?L**hM*CuRiXaEM&FF5ukX z9>2bC|DCMQX|qLHY-6(P^0!LP`CYU5YyWiji^;!EuKYLK`g4BH={-9)e|UK_Q(y1Q lj-9Io&YZ0;*dxA \ No newline at end of file diff --git a/share/icons/database/C63_Feather.png b/share/icons/database/C63_Feather.png deleted file mode 100644 index 307deac8a7147c39497fb785c45204d0426e139a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 406 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4kiW$h6xih%orFL*h+%@f*F(;HZu6+1wP7T zU|`@Z@Q5sCV9-+rVaAH3_GJtVjAouLjv*Ssy%Y9k9ZC>s+dD0;ZMuL_N}#x*cbK{0 zpa1RxE-a!YC4!De?ln9}vi4kga7r1MDQj*=Gp}#*tnKl)w)95%KAgMnvyJ@oJ@dM~ zf6Z@Pm9+80jv}#Lamgl58$0r@yBf|(mMyni!jvaQcUAc>4_xUW!e94Cbldz^jfWq2 zT_?W1nB^GQC%%m}*{qtgb)H3Ey2R=^aqlJW3V(@uJ2CY=Gvn(cC!dJqaxYuP8TWqf z{rs&zWA9r!&O5(8^4gQ1pI7MSgs)zmb#-bn$EG)2mY*59=M>&(H{}v$U|?YIboFyt I=akR{0R32^z5oCK diff --git a/share/icons/database/C63_Feather.svg b/share/icons/database/C63_Feather.svg new file mode 100644 index 000000000..c612ffb14 --- /dev/null +++ b/share/icons/database/C63_Feather.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/share/icons/database/C64_Apple.png b/share/icons/database/C64_Apple.png deleted file mode 100644 index d799fec0a6592b084c1bd6a69da02ff24325483c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 478 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4kiW$h6xih%orFL*h+%@f*JlZFfjb@JfJ^; zfq{Xuz$3Dlfk96hgc&QA+LtjfFxGjxIEH8h=T3B7%@`=r_Sebml8@3vx1>a&PM6Ca zYP(cTJ6(il-|lVQJNL%PQ~Vn?e&VlqXK9uExg~+S+n@!imO@82Oa*F?~K{Ud?j!D;aw3rbuE6&FNbgE-*dgdVo9Qo znDzYg?S~&We`$RD@x`vZ<(C(R?!MdSqV%E}s{6l3renc%hb58vjSXM|_@Ew{1ibDre2)QP=DNZ}H+hKO-dWQz*ULPDA;WC; zGJ#|Plj)~F<~?Kp2bR}-t9dp$Ok`zXU|{fc^>bP0l+XkK>|@m3 diff --git a/share/icons/database/C64_Apple.svg b/share/icons/database/C64_Apple.svg new file mode 100644 index 000000000..efca9f4fd --- /dev/null +++ b/share/icons/database/C64_Apple.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/share/icons/database/C65_W.png b/share/icons/database/C65_W.png deleted file mode 100644 index d3315b36cdaa45d4996bbccb2d3a6cc5c3249623..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 452 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4kiW$h6xih%orFL*h+%@f*JlZFfjb@JfJ^; zfq{Xuz$3Dlfk96hgc&QA+LtjfFs69AIEHAP-#f{6byI@OQC8m*LM8KNM{3Od@REm-y~r@Lvv%0;(?UfsF4+(NPD;J`vP7#(>1W+kuccl~h5C;h&peZ2L5V)tDm9%f4!zVh9&pO#W;j z*qRwrwnnioKKwUx_uX%`{|l#=#I}1*OZ|{z#vClNH9|*0)syS+2g8P47c)fc-b~HC zZF9akdu!DG`|nGv&YyR@Y%)W{_2ko{#TPkx)*g8szWVCt14TQJNPLiNV~o@hJNUHd z=T*_uqfN85{*_uKis<|2^BBmKFS&ft5TA3=9mOu6{1- HoD!M<)UL^> diff --git a/share/icons/database/C65_W.svg b/share/icons/database/C65_W.svg new file mode 100644 index 000000000..4f598e9ea --- /dev/null +++ b/share/icons/database/C65_W.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/share/icons/database/C66_Money.png b/share/icons/database/C66_Money.png deleted file mode 100644 index 619cea4b2eb6539722d43a908149dde1804cb7f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 285 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4kiW$h6xih%orFL*h+%@f*JlZFfjb@JfJ^; zfq~(Yr;B5V#`&p}6!{JX@U&IWyqh%rhGbbQr=CG;Y?FJk+J-X=(*%Vrj2a)aJof&# zM0!tO>yk%%x5eMy|Ndr5aMstQ=lClnHeE5@ckERRBhUFn=8SyZ%A0o4QH46Ys>K;9 za??}3^xt#OTF2|Rj?qCi=~Q&q0|90h27^^z&41#((iYfEWipX)dl>SaM?m?cq`6z{ zT_NtJ{$09~-0|$Z3G2Fw85Ugq{x \ No newline at end of file diff --git a/share/icons/database/C67_Certificate.png b/share/icons/database/C67_Certificate.png deleted file mode 100644 index ba7a76799314b5ec8f79e8b6d3cbf6030542bedd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 512 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4kiW$h6xih%orFL*h+%@f*JlZFfjb@JfJ^; zfq`+Wr;B5VhUnCTyZu4}C0HM9{kQl0%)^b0Q#cNCb6ree6Mmc1J9m9z{$u4Ew<4=v z>h!dl9ShR!nfQYtL5F9CfU&}K#d8L8_WoB@*>|8uo;6XVP4MW|w^!e$wJ(_15Yw?m z$HVVKOL}=qbL#ikZ=e2noDqBG^V*$%@BJ&NcoP)p)+K5A+^vye)vlZ?YrbEP(pXd- zH!ot3Y3btG|74cPsia&hwSDou|I&dXpAVRwg+V#?i9Yq%dmYVl(kF#5^HvL)L9)3lR zuAZhdQ$3B@E@jB%`#+e%dw=iUsM~Mq{(X6U*ge_Ag+pXcU_(s6X3)p#?x>ysYCII0M{miuzlO5_wUh@w~N|$?cM$=qbu(mZcpkF zo2;%RaqL4p!-d;7ZtVG-P?Y!b`P<(SZ_aF%ogllU=e*gxzV@tbrrtAFa7=!};5hy9 z6r(4n?pMXX@4MeUx9X{atc)pVlgCL$_6en2Tb}r~dGCr^b0)-Cq$N \ No newline at end of file diff --git a/share/icons/database/C68_BlackBerry.png b/share/icons/database/C68_BlackBerry.png deleted file mode 100644 index 9f7e4db3962873a475cc68748c889fe03eed35eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 516 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7I14-?iy0WWg+Z8+Vb&Z8 z1_s7$o-U3d7N>hB`Fb-2inQJTDRMm1$Jo$ARg0%2{q~Dyv)o0l+1FiNevAF>5ZjtD zHQ>Uc48bqbI(L_CxxmD1n(ibiWjy!gxwp(06Ktk4w-=wUJy-qS*5;SaR4>z8Z?_#P zlxaGsaQ14JY02)`jzue$Uw%39Ue!MNfR!OrY83gm-|ls>@iXH2^pjnptuZ3U@7;QN z29{&TH*DU;8hvp6`Zan@sg`$AHx;lL@H9XE$r>Udwk*|AiJ|rRil(o>?-Vq&Wj<^+ zG<;c<7*?cwIcHLL&3jAc6H?`!5ubYx>2vG|HQiJ0TTxdwmrHa31z*dDOJMw&zZ$pqa!4_khyEYQ^ldFyQk0@7fnLzPz_OnKJ2ElY+_b*ZUdvO`f0N US0dNIz`(%Z>FVdQ&MBb@0IuiZR{#J2 diff --git a/share/icons/database/C68_BlackBerry.svg b/share/icons/database/C68_BlackBerry.svg new file mode 100644 index 000000000..6c0b2b43f --- /dev/null +++ b/share/icons/database/C68_BlackBerry.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/share/icons/icons.qrc b/share/icons/icons.qrc index 4f01feca4..c1d74ba84 100644 --- a/share/icons/icons.qrc +++ b/share/icons/icons.qrc @@ -87,74 +87,78 @@ application/scalable/status/dialog-warning.svg application/scalable/status/security-high.svg - database/C00_Password.png - database/C01_Package_Network.png - database/C02_MessageBox_Warning.png - database/C03_Server.png - database/C04_Klipper.png - database/C05_Edu_Languages.png - database/C06_KCMDF.png - database/C07_Kate.png - database/C08_Socket.png - database/C09_Identity.png - database/C10_Kontact.png - database/C11_Camera.png - database/C12_IRKickFlash.png - database/C13_KGPG_Key3.png - database/C14_Laptop_Power.png - database/C15_Scanner.png - database/C16_Mozilla_Firebird.png - database/C17_CDROM_Unmount.png - database/C18_Display.png - database/C19_Mail_Generic.png - database/C20_Misc.png - database/C21_KOrganizer.png - database/C22_ASCII.png - database/C23_Icons.png - database/C24_Connect_Established.png - database/C25_Folder_Mail.png - database/C26_FileSave.png - database/C27_NFS_Unmount.png - database/C28_QuickTime.png - database/C29_KGPG_Term.png - database/C30_Konsole.png - database/C31_FilePrint.png - database/C32_FSView.png - database/C33_Run.png - database/C34_Configure.png - database/C35_KRFB.png - database/C36_Ark.png - database/C37_KPercentage.png - database/C38_Samba_Unmount.png - database/C39_History.png - database/C40_Mail_Find.png - database/C41_VectorGfx.png - database/C42_KCMMemory.png - database/C43_EditTrash.png - database/C44_KNotes.png - database/C45_Cancel.png - database/C46_Help.png - database/C47_KPackage.png - database/C48_Folder.png - database/C49_Folder_Blue_Open.png - database/C50_Folder_Tar.png - database/C51_Decrypted.png - database/C52_Encrypted.png - database/C53_Apply.png - database/C54_Signature.png - database/C55_Thumbnail.png - database/C56_KAddressBook.png - database/C57_View_Text.png - database/C58_KGPG.png - database/C59_Package_Development.png - database/C60_KFM_Home.png - database/C61_Services.png - database/C62_Tux.png - database/C63_Feather.png - database/C64_Apple.png - database/C65_W.png - database/C66_Money.png - database/C67_Certificate.png - database/C68_BlackBerry.png + database/C00_Password.svg + database/C01_Package_Network.svg + database/C02_MessageBox_Warning.svg + database/C03_Server.svg + database/C04_Klipper.svg + database/C05_Edu_Languages.svg + database/C06_KCMDF.svg + database/C07_Kate.svg + database/C08_Socket.svg + database/C09_Identity.svg + database/C10_Kontact.svg + database/C11_Camera.svg + database/C12_IRKickFlash.svg + database/C13_KGPG_Key3.svg + database/C14_Laptop_Power.svg + database/C15_Scanner.svg + database/C16_Mozilla_Firebird.svg + database/C17_CDROM_Unmount.svg + database/C18_Display.svg + database/C19_Mail_Generic.svg + database/C20_Misc.svg + database/C21_KOrganizer.svg + database/C22_ASCII.svg + database/C23_Icons.svg + database/C24_Connect_Established.svg + database/C25_Folder_Mail.svg + database/C26_FileSave.svg + database/C27_NFS_Unmount.svg + database/C28_QuickTime.svg + database/C29_KGPG_Term.svg + database/C30_Konsole.svg + database/C31_FilePrint.svg + database/C32_FSView.svg + database/C33_Run.svg + database/C34_Configure.svg + database/C35_KRFB.svg + database/C36_Ark.svg + database/C37_KPercentage.svg + database/C38_Samba_Unmount.svg + database/C39_History.svg + database/C40_Mail_Find.svg + database/C41_VectorGfx.svg + database/C42_KCMMemory.svg + database/C43_EditTrash.svg + database/C44_KNotes.svg + database/C45_Cancel.svg + database/C46_Help.svg + database/C47_KPackage.svg + database/C48_Folder.svg + database/C49_Folder_Blue_Open.svg + database/C50_Folder_Tar.svg + database/C51_Decrypted.svg + database/C52_Encrypted.svg + database/C53_Apply.svg + database/C54_Signature.svg + database/C55_Thumbnail.svg + database/C56_KAddressBook.svg + database/C57_View_Text.svg + database/C58_KGPG.svg + database/C59_Package_Development.svg + database/C60_KFM_Home.svg + database/C61_Services.svg + database/C62_Tux.svg + database/C63_Feather.svg + database/C64_Apple.svg + database/C65_W.svg + database/C66_Money.svg + database/C67_Certificate.svg + database/C68_BlackBerry.svg + + badges/0_ShareActive.svg + badges/1_ShareInactive.svg + badges/2_Expired.svg diff --git a/share/icons/minify.sh b/share/icons/minify.sh new file mode 100644 index 000000000..6286031a8 --- /dev/null +++ b/share/icons/minify.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash + +NC='\033[0m' +YELLOW='\033[0;33m' + +# Build desktop icon +echo "Creating desktop icon PNG..." +if command -v "inkscape" &> /dev/null; then + inkscape -z -w 256 -h 256 icons/application/scalable/apps/keepassxc.svg -e icons/application/256x256/apps/keepassxc.png +else + echo -e "${YELLOW}Could not find inkscape; keepassxc.png not built!${NC}" +fi + +# Minify SVG's +echo "Minifying SVG's..." +minify -o icons/badges --match=.svg icons/badges +minify -o icons/database --match=.svg icons/database + +# Crush PNG's +echo "Crushing PNG's..." +find "." -iname '*png' -exec pngcrush -ow -brute {} \; diff --git a/share/windows/create-ico.sh b/share/windows/create-ico.sh index 44ae06a04..d78592fe0 100644 --- a/share/windows/create-ico.sh +++ b/share/windows/create-ico.sh @@ -1,7 +1,11 @@ #!/usr/bin/env bash +NC='\033[0m' +RED='\033[0;31m' +YELLOW='\033[0;33m' + if [[ -z "$1" ]]; then - echo "You must include an SVG file to convert!" + echo -e "${RED}You must include an SVG file to convert!${NC}" exit 1 fi @@ -10,6 +14,11 @@ if [[ -z "outfile" ]]; then outfile="logo.ico" fi +if ! command -v "inkscape" &> /dev/null; then + echo -e "${YELLOW}Could not find inkscape; $outfile not built!${NC}" + exit 0 +fi + echo "Generating $outfile from $1..." size_list=(16 24 32 48 64 128 256) for size in ${size_list[@]}; do diff --git a/share/wizard/background-pixmap.png b/share/wizard/background-pixmap.png index e64d87041879cad998833cc4c1403803a75ecce4..0651b38f5ccb1023dcb9154e3fe562c96135ad16 100644 GIT binary patch literal 41772 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKL9Bd2>3=R9u&M+`AuoOFahH!9jaMW<5bTBY5 za29w(7BevL9RXp+soH$f3=9mCC9V-A!TD(=<%vb94CUqJdYO6I#mR{Use1WE>9gP2 zNHH)hTIuQH7*cWT?Ox6X71yc%VE3-qRSR~k ze)p=Yi~aZQzq>n{)@`p?vwa1}q6OS};8*c62Lq{t8*b`ywkiM7<&<9aTTj}qnd`2ZV2@#$c7I`+^{Kpr2M!!yQ22e~ zSCgT=M6sks+Q#1{Isy#}e*auH^FDo}%x3VBw@hK&hGUMYomb6UHNA2yRlY8ELoLp$TDx-`ox!RzNJz2c^&7s>eJUl!Mi_ExMotp~< znvVo6(xBnn3uqo@Ykp64a zaN+GAi8^1=nj40i9|AV8I4m?MR992G^PteWfqSq2_Mf7nz7uzMH)ZdB@aYz>ytIMA zhFV?$sofQB27Zngg>ETb@B6qt^OYMH!^Ih<*G=^=t0$tO|=A zzkc}1v_mjYSy}mE?(Vy4!otE2O`A^6{xCJNje(Q#BBuk(c1fW=?(cy!Sk`aenS8vj zlR+!@N@T!1yW@V(9^KN~u^*h#c9vN*AM@l0s%E3w~Bp_z$|+ zdMp%VNH&-;NBYo_>D-L1TpvprIInP9zS(g2gkrmllVjsFz1Ua52|96mEM!EKEbp)C zp2qe&m9goHt0V{Q28h9Z{ui|cgMpl|DI3N?~J>kq6+Nv_+MdyN$5{8M4 ztM49@zwA)6z%MFfE{j9<;#aG8l^ITG&;lihmQ?3Bp`Pb#i6#o?(Ij%js#lpQr1`_x0I)@({WsR3)7woXp=kdD|b03f*ZR$`AYOeNpGH z5_9{xb40DER@Z~Am-2sn`M!j+bKaw`B8PeorT+c(HRbB6(2^eq9ae|0Uv^+6lYq+3 z!%176KL>q#clY+4O{u3Pnmwn6#^$n3;`LeB(AfCaouM+wAg*iC)sSf>iAqORX6>45 zobLC(iIv+a<3`}AGA((hCTF+S6YsRD;tFhw?i3!MxZLjR$|susm0XsOI+RyPpLr2o zpD^RE+?24g4>RsP4?nEaf7)vXZ z1l2|v#GPblDr%T`({1_Xj%HRnB2U`BRN`%DpHhJ={3JF^i z(fDrv|GNM4s^2MIVO48t`EUEt)fH*MTB6 z?99xw6&V(8?09Y%ewESkc&dWa^xJwdI|{z-sr=l=&d&b(>En_O0lC~FY*pVj&-eAS zda3ehO}cIOnOUaYPinfCZz$H#Y5H9gG0EGLl}*=0QKg`YYZ(j8kVtjlyFTrbl>&H zdrpT;ZoLg>vMW9uWWPB7|DWdqT8&O0Uw%p!by%|Wu%W|`{qm)SZ*Of~y|eJ~vCc^+ zyRWDPY~qn{U}7`#WpGlzzn}Bi>cF75B_2yJEZFM0P*9_9r%9l)dt?Tq(`OAo+pi%d zw=$QvdL<_$II#D$J+IvRWg6dLSf!VC-auN8cw}gO<-`~@rg{v8sgmpY| zbYPya&cUys^yBR-NBqKz?$&%h`^0?zPu|kfi*@R542iDtheKno>=kWDsYyyYWXu3b zBh?QVbF-P5GJIlwXgBTK(g%h%HZ~hdUS48uYimpE*3)_Eye>r1MEtR;ekG^n=QGBK zb@Gp<_$6Kx_c5p~UDdNmAdq$Sck_mh>&frdmMy-x;GLd$>U6H(`+r?sf5E@*lkldZ zr>8_5o}?an9L6in8AJS4tv!k$;5>lZZ^TuphfW1Y2t%&qktb=R3X7A5mAEDF)O+u$L` zQp6C%va^ptY3D_o+uJJN9GN=xu`|D|OWnWE^C!Pvzu#`n?^Gs%buk(qOs+g=7;wJ~PfR^f@a3ZWVu#EL;(K4X z&P=d~)fM%TGBn}ZcemX1J=4{vW__@j;(FdSEUw(5|_ej)9D2A4Vej+x#2 zb#42kmdmH^ z&tv(?v-5VHtQ{3$EJC9B1#bZ7; zGf9S*uV25me6gTe?Cfmw{CzBZx-QSo&-ah}`zm~L{h#CYOHMYg?c41w1|jeQw|zWh?-R(Q1F<_F)%sTYL4hR2qQE_5uf+Rvd-veKZ|XLkJB$jxbU zzSf;*?s#$S7OQ-r!3I61Clj3cetuCz-a>spOQki1EoS9v| zWR+Q)$;}6Kj1FqdO0B}Fd=6QK!Ecotrqtz{GPLmbH!f*i5~mR!Uu*jF+xGpvOj93< zGq#8qE}8kZQ7Kb#bIOsu3)~JI*u^nnvcKKWx@U1tmJA2G#r56tD^EvX(2o1aB@(L9 zc{gOsloL8q_Z@Do`4AKTzm9FfAboLN)Z1?-L;J7)9h8rOl#ZbwgcT=}|{*VVDiz+l5kmJ^Fyy9*Xr7%;Po9k?i6 zvmu@Rg8;Ycv{MY>3`<^5HepDa&)8CKv!wRzQ47x(Uzg<8t;~M?>9juoZj+*h4HlkW z3qRCu>9OJ661?CEgUgw;<$1a<9GTdzr}^FIb9forehzFW!EWcS2I@W>Qr%vl^9 ze%6k`J({svM z4k3Yq2VOC9^e&uV_v_`4yYK7Fd&`e7mhKXn-sl{2>ov0jgF-2z%MJZw9)~#Ro9)^4 z<5BnD=={B=;tDopn{scP&FZi?SbgOA5sw%)!4uMq%&%D#+~sRc>hAx(*WPFUuR^C` z@xcRzEfJ@~r>r@_#LC3*lFh-zRcYOpPyc@$w-1^iaO<@#zrw=#r@rrHu-Q_++jGL) zXT3Sj6OQt+g~=&gkE?$BSHJFKcjf)}8|*E3``DA^x_&jUnD+VFr1uPl6aHGW1r^lJ zZ&cCK_iuD$ep~WV|Lym6%pCPTS3MYnR=NF=X}I7R%K!E}A7h!p1|tSeyYt_REiUwY zeBf*mpK)c$Y0itRTFZZFty#%4;ct>?*v);aj1C!$$2nD4Zk4~i)oS;B=lNDw>CX&@ zes5hLySpsuc%Q86%r`a%`1Eu^<|Q(I`kCXYr`N!4RFdo{$HA~9x#7e8(}gnO99!Do z+uwTd%6R@y9$&pHOe#0TnA&!2zP2Xv@)<^s`}@=-tPd<@Wedxh_IlUnTW`NzVvwt4 zJuY;%Hu&~^`w1*@(WTt?mX|G1`_+7#?f$nn>GsmGbw8iJ;LWdae)zLnOt)y>w=K)R z^7HaWvbJBEabM}#K2~Pt)4>V{+l$H@Uugs>xMrnn%1SJaZWM{Ttvt`(%uwv99!nF` zVhzE(u=hG4OB61gS>2kt%3;-?xVrp&{qypi-|c_BSo~zM{9lc?o{K^hYQBoq?y3Cz z?Aor<*S9q4SFS%E6XiQY?Z5#mW)7!Ulir2ii3r{&wf^$J_dej{&7c~Z-kJ)9yA%++=uGv(Jl@G@Dg_M_e)k#+mQ z`Ztvm?q_`Y@wYc_|M8c~hntK4EW8(a@a+cs@`QQz=>=s4*5bO7aZXK*V&@}!p7WeJ z*v2qZ>uQBMw?d)PqQ@4xDl9iM8~$GM*6%%i>@>r})!Q@JU1pg(35!pxTPn6!&(}(( zaU~Pa8XJcRY)USL(X0x;x5%H^W_$aNySe=<+g)D+^Uq#0tuy#A?QZmiYkQ*$83aX= z8vJZTxI#h_uHBbyUBa=w{kF#r-3c-$&CW15NjNmg+wYrJBg4wz_m6L35ocW$(*vDZ zn@=o$yur17;$bm4H$M9Z1$$~P7TMgf?^(v_pry-i7FuU=LhjDCjGmVL^5JVD1XoSu zl{U*@Jk(`e)o=63qxk$h+c-W40cMVr_05fv3@nmb0zsFiPMsxUqP=0)yIoPcOV|FM zIKQ@qiMijuN7?M)ZzhcZE}n^NK0MClY6z&%I5>gfi2uP80t$b2eE9X|Ys>AX-=Eo^ z{chK@x$^spv|Z}im-C&~b}KJjnZ5Ql!^7w73WYPJIJfur_fP)+_x}H{nUNy04o$^> z%69vj<=wea^{7+*mLvkiHx?0kH_R+Su=e82yH z=kLAj^7R+^9yBihY=7t5#kW7+9e=ltnf2-QpWkPuiR~|wO5u0Yul8U3?_b@Qf8Y1Z z*M6Ej-=+B3nTv4^*D9korFfnXbeFvv{2}JcEp7pp>jw`6F=)=(6IyWbXHWKg2`d(# zwEv4|%c(A%*Ilw>|BGKcHve61wtm*h`yJkU*E2Od=GQukmAyPmg~2m__g%jK z9^7I&4xonl#oPD)eY^9Sjg4(ha=-01^8lT&bJ>fzQtX0N5)yvfI&?HLU35HlW$My7 zHY)WMcVD?=R;ztW5WA^Z*s8BRZ*Fjes+gk3yUQ9f;=iuyK9te9yU5_&M7OO4ryoh4 zw7iu4pzimToiDF@eKY%BR?Kw%?)gU%!Ixx?FO)T^X6mr0k$$`6=gsqVV!ZtP>h;l) zNhVT1I+Xif#BRx$ICnL-;4JB$x*1Lf92#HTb#gsen6knl|ET2qp zGnmu#e1YgH_CzVh+xJC1rb@JX8tm=!Ty$nDSO4b;?mX+9tm+>wF=mk5$7WQT{9wuH z-`;!AyLRZr>=3B^Jo~;&`n<}tcb?ti`epOJEKwIdYMr)`k&TUuMfA8u*QsP}#)KWe zP96Drb)wbFVlJ(1Gc>q2y$?4lbU6EJzU#M(EOvLp@*jTuSorGFrk$rO-tYN*f!*!{ z;}NU8V{X&GefnMe{M^=l>vuaO?4+a_IvU=dXE5ZQH<@XJi0`u{3jY_cax(nqW^=_{ zWLx}_tFLv-x+80pdE6gld^rBcLc7oQ!n^2;hBJ=p{V>&;VmEzWGG~2i&cX2%OlKK2%vw{vU_-~a3Ci`DUewPu;;&x=bs zGb=T)z%^tUh`(sPVXzvC6BoJT;WvwxluUg z^Zn$TAB1AIR~ZC!2iMk5yvgX26k7P_>HqXGsq(#!@(-e-W+no*8 zHoQI0wd6(J%%%GtwYao6wT3oc+!+1(!cX>ONv@U>J~rnA5;4sp3>tr}_-qq?mXzzh z)jrJVBK61E;o--v>uY&!pKAJ_WY)HOwPLXpGc$9gz)MC|rfv4x0#~>H+4H8T^YRUmuu4cB#xqK^~9TKDt65m&gBwe`?`#nR;3r`qv~ zpsM<-(Bk#{j4lTbd=lkwdZxGLj*z;n-rco}f{NbmVD2xjnj4qIdHhodkEN_~kLw0c zS?}YDFDwhaX<0!^-{Bb==Y_WmPO*CSfR+9C=k&AN)h>QDHeSkc%#UHB#g2a) z`)hgrp5Fhb`&)$+cjc$a^Y27#NN5aY5R7=lZMKE~`=fpQmn&QpZ!ELx z*W3LrvRi5y1*22G-oE$E?8`y^x&XVj4gt`3)|^&uaWTz_j5E>>q-|jmR4Wzb5YT#l zXwt)p;=dI{-9sO=lpPD6w|=d>==V<=^9nm=p5_$yS;h8I{OtRhTa)LfPyHk9Q(C&o zpYd2&x~0tf`v2eSW|daBgKHAumR@41|NK!xt4GLMH}wjRpg!rHf5z~GZ1hptT2 z1N+Ap(r>igf3tj#)l4n7$BG9#6hAeI?_sF@^H^TL3mbC9x6=D8^U7E7WVjBFv>lIQtSO2hiDIqGi zK_L2~T=UoCdp=37SL%D}BWmGO`8BY}UQE$R`&V4e$D=K57fQ>XOmx51Ev|ozRp4c# zCVP$>qYFo#@XOn4GAFP2A(5w5A+du0(nF2Z{J*oeM{R5EG&?p?b54hc%Z>HI%gk?SwszExgt{j*f;mD7Ha0CmZZmTza$?SyMzddE9e3Pf(pnd$u5wP>BE ze_POp1mn}Kp$rqRu=xINt$#o5y`Rm7hmFg2__Ouzc;!{puXtszinH=mr?(ea+ixwG zsa%y^z-H)WS8JB$Cw~0tE?>KaOUb2)!(=Jb>_|NwQI{v8QQvLr;y?Sw z*C)Tu-v2i%`R1F{ZI3J@MprCHMQm~|GqcPW&O*{!X)k-YpYaR_ESae;LoOP zU5Tg%`=4IfeyeT&?+!_3y;5dZJf^x~-} z43EnsFLKeDQFmaOt;3V6K~1+c*-m;CAKCrkxwzk+*OSU`^yfw=pPy~oU&p*n#LJbv zf6orjyX$n4C3NR(y*a0M2X9eyt1Q@wLe7f|CaV;?(F?9x9+*NFTlg?H?yda^OFsS z`4$@rMr8!v6mDg^)|~w2=H~R|y(f4Sn-aO0W`E;S@pruQ@x|M-*Xy6k-_3siJN0n- z{H@MnGOtbxZ)K1dwFzMK_;z#q8FRbeYvw)Xt6P=5j88~Gz$fc;lDX}>)bkatzrU!@ zzo$`CI{Cq^S0;uf8`1^N&o6b@F=tlOdrv*HbmqoR0nQM%U-SR} zlwYE~!6Q3Ow(iHnvV-aC`Ijkdc*!S_%9Fgs^i^!hS65;A9e--ieVdqT##j62qD96( zBmX%bD&NIVavpiF9WFLWZD~cs4X61PZ~xyYPUrv488p$%K`!i4D9cUJ?VKqkjYZv0 z=SIwG*ePIP|E9rt4=8qBdHZ(V;@j~qTW8*8gI&j$-P{^|{n7TC*S$Y(o7W#MjxG0M z`|jE?r{EB0i<3+G=Crem^wukN95|)3;pJL~l#VqOHLkDE-mjQkeb+YJTxotymCn4) zQ&t>U$TV>w)5=GuoJ!}K*JteedepqOm4}Dtm)DaijZ(hOYmCc;VzU2TuzCM^{eFq> zRy(IAWH-9|-v8CRuJAz}PxWelym`M$_}9_c{U5$xe67MZf9{2O-}gLU`1!oO zJTH$*sCUk7H6<55+bc#l*+O!= zGrloK%&{;%STvby@8qc|87zy1r_X;<^UpW_OWUuun%GGT_V5bJsEdoST`rt)I8H+2 zIpbf|!`*+^&;47vrRHIgc6;<>&i<&YCl6V28*g5wykdLW>Q=kryRJX%>;EX$udxi< zHl;q?QF4WVj^8hnvzjd^PU!Qdb<8`%k>Kz6;|+>$;L)(U$ z(9Tsnzo$))6!J+F*>mnOpXI&Z&-TYO@y}cT_gU03*AG*g*|%E$E$;cJVs8JXy5`#T z_N1>-4QH43?LLO00KFA9H$rR&r%&PiPUM?fO z_v6m|vi+Zyt+zgSe`j#Tm8V6oB;>S~n%EfhJpOr|@4t%5p2N#iX8+ayF+1nhX3o8z zcfVKoUw-}n&)+vnry6lhOgJL2P_)M1?q|x|kL>a_8@3iaJhVr@gh6n_OXdmQ`Mb9q zw7(ORB;xyI^RKi>DUKQ6L}#vAx8}w#soEF&<4fxvbLa2cu{YhX&Ezn**lDWCH%pSR~@iUwEEWy7g){VNH{_e`;C-x10ewb_L z9e5sB*Jp2J==7?^SzY@=fyD!K-ZSMH-jgfiwE(XWK zqt|n6nok_;Pq3KwbaUz|S3RBJ1wLKcr&azf+}w8cKz;e4`(I-|z7M}CUwzi~?d16- zUbmO&t(dfN!i%YH3tnb^nRI!6QQPmC*Xz&y{%5UM>{tKkv$Vv+yxohI@z^*ueEGs6 zygq)9)YOU#jxC1NUvW-Tr;~mi?~swLd5SKk#e+1NAbS#@Sm$*rU&#_TDed)^qS)UH;8G z&3hj6SFQSg=BfIkbeWna(+k!UuFK!MzSr*M)?aP)%=bUM52=XxuGb0$}g7IVs0mFb@yn%Jt@Pw>kB>5cvHb}g67s)i#!ZcJkM zxSApB_6xJ}<1hH?OOmGiIPz6?wd1dro`zF)k= z^wIt=lhZR8g-#^Pw?4SQtis~6pyU4krtiPkSNvMNkx8MoK*P%Id%0lWchwma8XFm> z+yDFbeZT*{pJ(&67&m2K*ZXvUnZLsFed>H(gAJN54xI{QO*G}p+;S%@j;CqCE3P9) zrlv}Lc^gtYMZNGqRMec0D_q@gp0{`+`OTQWcG~AH&GX;M?ER5p-OwKTsC4$Og(vK+ z)@@6U(yje?L_o;(Sodbu%kQ7pebxMPGTZ*;?sd`MU$6aACm}7}y+37c>9xowSAzXR z<=n$l<`x{{to+E=qaep*7RtCNvU2I%D>3VPnOpn3RfKAQMYS+cIM*q zy)qRK8eIh#nP*SpQpx9BUoh~nI$J$Ls{i2FU)wgZq2T^+au9{nzh3?_aci()em^EGp#mBy@dMXv900^hU0etEaPS zvE-~`Y!PSb=~i1diR_|JX(-t$(`^zh;-+1+X)@9yq44-whHrTb`Q6VlA20PX!{!m-HWwYhGdS>4Y$U^!q>eZeRHJ@ok;#`kkw?yH!Ps zSRL)YEaX4@zO66jy#FhG%XnY=l(|2$%W@ya?k;OB@3VTP z@#S3kzToPFgO}nAHmqFa5OAe>>US1#=4X$r=YLqtadTU__j0{8O5a289m#xh>eU13 zy6rL1vE|vJHv7)Ko))AYU6y}Q?t$>+w&)!jek*@l^tV61R%ZX}N!x=vN>1mdKDl+s zX{wJDcjZIw_!(9U_V171!{)$}lf~R}t?vsZ`ouH!rCn6)qOlU4HZ z_!WIm*jn!RiXBrrI9@7lv<64hi`?kvMbpFDx)^gvo ziV{V4uJ$X2M%)X}c*3i1_O~>@t^QzzNG>~reb#6FvO8JzukCY1Q{aa5PCmr+9Hn+dD z?qF-`t5Z%HpI)Wvyeo?Pqjy%ON<4q?PD47i*m};5)TixT z5!>wpc5U!^77FSzAv?szP97Z^yyZdy=-TXRz+}&>$S{azj1|) zAFX4Uxa9fsDj24hBwn2w5@EtAb^Y|Kq_^6-3RzKcHg8WavDx%;y@kAt$(+7y&K0Lm zDd*;X>5PwQxb{9KKDsF-@<7hLIcwakpU)}2V0c`{S(u+uF5$9Mqrkt$qn?6Cox;z> zo7*I8jY$nWx@!`bx2C|^_Guv+UN<_mS4V3tpIoOJy!2Q8pZB{;zpHIZeLw9*>@p9& zBYWJd9GMojx2ib%DlJUkoN{DN^0zAGAI$bv?LB>c*OqE|$vWS@U$mG@Wqp{K#EmP( ziA!gBw8q|hw9tCvOVf|c(sBja1&J#gE>6_umRxh{Rf4L>j;&TLXJq^DF64>(y=BU7 zM}2`eyN@iPJs zuJX-!J*_<7Xf~y(F_BUdGgkGVJoEcR?Kv*a7TMifcip_=RsOa*?Eg&8&KK%UOulkH z?UyD$ag1(i5`JGEp$=sJXz(;wx*a)JnI8owS*CC;5Htn|nKq z*7|?$v#&y9 z|5{zAxvHYinw-BYng_^VUdo~D^p)ko@|NiAv)4lZ@!eW{*xgOI)UNN>@KjanqM0C}sS7C`49XDUhuXkIV?~2+XhXszFPW50E!(tAB+YIA%wF_#tE<=Ivhc8ZzgEnsj9dOY z%V;{U|1>8zNmLB6Te;yx=~8YN|D%3w zcN<(^UXQ(~8Ya1qKfmh6{T=Dab)7}0jmw;89<#DpJT>-a^17YBm;X3-wR}=u1LI8A zD?f`5`LLRqG9GG{)tu15`r6|k|3}-B)5`m^rPt{3W6DIzN058dbt_gYXUn>Ehb+kAJrLVtuk! zG|xOHwl!dPhy9NqFZulRcH08KsxCW)vhF*-F35i{{T}bk)xv&&ImbRk z!D)^1Rc712)2{tD`2DlizI0+_?wV7ctwJ_I=a-%gzVNhm%BvI$)`Lb@!?H!^eZOqI z?!ZG9`9BqHPj4%$2Cm=TC6~TQ==37hfITjiwNHPYf8@K{Y$D$Rh7Sz0ck1a#awz%u z9P9lae_tZEch;3-TDO+PbS~|vei0My>MHiS;PaJfHW3?Yw!iz){-?JxC@g#J-EG(Q zmtX#S%>O~KL`2*5@|DtO5;*eqv6L>bQ(J2EUd31H_noz0KUc5&GBN!E!-Q-1b%mdA zDBOFn{^SU;|ZT8?_Rgz zR@`mR3mv5*4dTX%QI#%N%zk0d*s(r6D^xkq9IH@)G`rpak<@4uLM^V8jRt7LemWU-$+cX95MS=IGv zOU&+m|$;L@#y@Kk5@i+!AayR=txYcKcOc|NP+oZl|XMY)S_|H%&jBQ$&4 z9Nzm@CLMCyHkrmZw(6$DryEl^hHvWhgF{C!b%Qt2hW$1;!h z-HWSJug$g;+xcYL|D(5$Z)<+Vz$_m2h1cNkz4i}nBh;+D#CVJx|PgDqS=&^0zCM*sBJ zvy<6YKFX+OoB2{tP3y#;fB&LCBq#ST-6pN~ko78~88gEoFNrHpYiIPlNEZBe=kJZ! zZ@H`UG8g~3q*AG;6kH(^`eN;)Q?J4%CCa{AeUd5UW%mC^^H%REy?s4NQp)b5_ug$r zsXjubK}e|I}_`xml z`#&;GF3EgMEfCqU#^=Gr*QbnXVwN~~?cS92uG%hhp6-&qi&HlBT3?_1{_jKU8SAzk zx>OWv{ZGE@u~L!a5d-m)UFV96CUG7;E@EV4A@ztc=#fIG%(P5{yP3kPY>wpCK5G8= z!M^1BuILM|CSENKd&64FWY!xKF-tTw>5Ovz2|k&RR@TS2JwAWu!^drGGII|s_G-On z#I+-=%?>oh6rZ)Tfo?8ktb}aOATpF90_Ueez zw1rlgW@?8X@B2EtJ3CmGfqz3Lvp{N``%Tq7mM1&De9YCZ&;S4JV7zJfodDAVi-lQ( z!fH#b1j`TCno6$IeOkJH$KT)g;?3Cc9_R@1vfMr`T#M6i)e7&=c6Xv4D?Z%V z%V6}@W$E4R|Lkh+FZ->v{QxM!Y(+Z+7|c)Fh1YE;eSR@}^XvML=JPjh@69PKRuHOp z4nM;2>49NrOk`rZZ6`yk?U=%kh)8?-niEUUYSJTL}B=ga6KpdTrV2{$szC z(X{Jl{_b8=^GC4e{Icp*B|BM|XD?$2)VaU*)d8=4X3N%hHt#L5+3>LLb$$LnC+?@u zE2ijfieUFxb%-VNj^9-E4|+S-dzfDl%nh!-_*MR!`MXM`n9AqJS^2di3fB2EKVm7r zy4F=#Aa+*fyPc{c?Ki(3ziqbj$u9k=f48$U&)&yyFi27;*3aYL@}TMNLXFNg?_O2c zKZ_~p$QHFH$;k<|=X&)zqDzCmEKmW(#lhuoVm>w32+pzNeAuqLGXIj=bdodaWU7y&u zxO(58+vjic=S5r$V>wmKttTZCxyE`%Tv+Xk{}+Dlln;K+oA|>jKe}{s`P2FO+k5n7 z{_Or8n7SrNxSomU*&-#?ukt zWoHPSqNq99XU6MqNvk)6Jbx>9H}UWB(B~D_ZrdwYM77>KS&}-j$sQevoU;1-6^(uO&~G zmfOR)_V(U$B60}{mqipxUOjVWXSyu-TYuB_o`a2(LgT*t+x0ek?dSTBjN5PK{fcdI z7iGQF`D?|jO1qgS8<$$Cypy==c(45D{>5*rw?AIx{~|h2&*Q_@{a>&C^cF&ZKfKMvhPb7)QM7rKy7NvgJuggg4cHhRePxh?- zH#g_z-xfm~4TYMxy1h+a9qWa|A1`Il5cghqU_tMaJ3@w2%3fSswT;Pp+v;~axZdB| z%6)**tXZ@pY18wq0*@a)=Xq%HQOa;iOV<9xKh5cDE*DpvN-X%lUix3s{PL%k@78Uc zyYJN0sl~T*!^Jcg+G*|Fq_(g+G4=L_?7j8p`0x2$%dM7Ke$U{`{Ykslb0igVSG{&O z)c`GGTp6~G=^){8h-^L+!aDU_qEuF-s%_>qiq^wq) z;WRaPxRGbq8S$G^PEUOQg)F=g$Y9$y!`$ailvrka-r6!D{)yHCr=E+fInb3`R#N=5 zH(ZJ3V95r_H4a-!R|Y(f{TXz-Kw`4L{@c`ld_sK>(*JHNz4m)uMf?9BeaG)i`fwsx zdF!rCRw44GZ0ECIYbt%WkKg!D?!RsLAMIOqakkGUek|kq*e@Vqx9ZKcPZ5&eH+k0_ zX0STVZ}@M*2E7*D>plxDYRx2bZym|(n{d_oz0>NlHB1E!XLH2E4zgr$i7je&)3eyI zx_jr2ZEtR-?EU>|`@`Ge?Ppg6@I5%SYyB&pWz$3DLmf8wzquu9|NY-<_4kJtKd$yZ z%*_2$exJbq6)}%mn46E;M=gUSH2U$2L-YSHFMauTx(WA!#6@nW znp}3TUGTi>u4miiSEsVJ-+mFjz2@rQPxDV4d5)BVNs_pdDvI>HiO#+{zKdL45? z!`T22GlTh^*_Cyc0HW!df=pNq4|dsoZkQW@GakZ{=R=r*IKL}PH$+} z)Y-MjA*Fl*AD=1PdF!(Hw{o{%{(pY{-s^u~*2zaK%+_RMKK=E>ZsUg^lR7Sbb~*UN z>-xt#8WnQ8wimp-8YLnzExAsPcfs?u2ZVBu_sPEC=l{=mfYFSZanh10ldnt&I&RF_ za&t<_qFrp;nhxLeV7;My(kYeW_B<8&M-|am^1g4c|GV|``sw>F{(gOI{}$^8_n9*~ zilY6_uHH3?=ey_LHPzStUi`iN^gW+{oBr8pE3-d|j=d1`^XeS!t`lpYCbDsBN39IC zxcFQ}u*&IYnZNk?3Cyo-7e$}$dX@6@E91-4Ui?xH+atvfIn5Tf`P$ZFRomter>ClrYN6`;fZrceWqAD<(t31ms0!T`1@`31<%W8 z$$j*B7b`nR{tJZ$q_m+5!@nSS42_lq(6_=&z#2aDeATa>3BzoP!B zV9d&bMW-sbqt6t3YpoL5p2A@J$Gmj0klNa|N}D4ur4{{*JKJqGd{x_G`NQzXcUI=v zZd@)^k54(QG%69!HMEd0nlPc{M0QcDW90Ohy5Fkj>SId%vLC{zA_Ub> zza&>z5o5VEf7X2bF)NIrH$$bdN~T%4v)|=lnb?f|0{dcscT!rA(i8GwfDIu>&qr2 zTn=hx&4cI-zS&vl>hs)vf}xT zZx3cHdEybWS?kyHj@Z_krsH)bD&6@mdaIAry8f4~(TQJO)uVLYM)BXl?Bvj$ezT_* z@Ow{x!g?W8ewu*PE43i2+s5xE9Q&bn$ylNxP1$Mt`u(zLvKwYTKQu}G&n9ihEzi9Q zCLU;;3+MU9Z^q zX-`zroaW>96+0)*6Ow0(`q#C4^O{MFUp|t(MREt4wp3t=pZZar>6rb>E#^7YXfY>3{LE(pl@^+@q_%wv{(Mei5Z; z704bRZ1}z;<8#)&hnp@NBny5{KAgNk)8^E!by}&buLu0Qdt<7pmEEb7)?R`5^i!uZ-b=aPLizkSdg%zGyDtS(E5BjIFa zpSSCF!d&gmJ+YBVA8MBDyuSYT?K<;brbE;3L>a2YZ2$Z^c)JK|TlhK)rR`$f%>fw^ zw!%x#<@cC-oPWS~$@*5u`RJWlsvx^v8a-w{F=9B?mlEZjzG``wMi!T*+jI9q0mU$( z3T~wGP2w2 z4PbuQNr>f`PW>aJRw>W1^r-urYn$$7Or0vPDwJm0 z5m$WV!h%}+J82w!|0c<6$vNcrSf8q2ALL{zz-$wr$k3@Bftqb}3Br{Hc%r2hMujLnZa)lRnY z_I_~)oH==0a_fW6yHT~z*DEeWbSi5V3^IwrNURmeg7Rtf5a4d z$pnt;=hs|&^q^yl`=(dzjqY0f=dXDB6)9HhDPBujkRXB%7 z;$QEd7w?7F@9LVw?0h|JdT5LOj`fqWc4@RU=}$8~xq3tNQ{Q)6ou^MbEzI$@Z0pr1 zTj3>=Z0ApFi^w^=pTFJC=KH$c@0xD1=dkVE5TdQA5B8jG(h`5xXUzv=DFs|vQsFBz=1?-pQS z$zfwqF`ur?FTi!+$@5l~3mQ!B^Ij=9?ff26w2*w3VhPDH2>k{9riqWeW$lY=WYJ-)h&|q`yPf}8RmCOCV%+Yz+iP_ zOG)BV^)guwFIB-)Ud}<%Z4WfUWSMkQDmF-Xtkd>xaG$#G<<50$q^`Ix)b_sqAgd(&0dwl-REp+L?o z<`(t?FWZC7OE_EDo-dj9BZ}kX&6g{)_9dNT=U%n^z@esB7M#a6D_B?C&0Er65Z3-w_ zb9B`wuaEsdOjk6$w3=+qx9Z*llYfbuf3(XUwb!uNqAtR6Df7?ayxT|K^)kIkwJ$Jf z*jME#FL}$tWt~g-As!a9y^M>Z_RRiUwIZ@sRess-X)A(%^h|%%tfwZVc2uHsNyw5Q zjlx5THN6sYN9S_!f`fby*S_B>CkyWMi+F^jn$JApd|}ee@44oIdS8#)?=Wp;Ih59F z!O>fPg0aM4!_37FB9p66rftjmuwtF|iitT&iQC>(&#CG7aVox0saJ^ar|F~A!$EG< zo)smJPEER-RC#=AV`tH&izTu>YI~nm=xD6DVqdnUcX#)M7yG*IM(HfP(A5<>OHIT| zwcpk9c-L>&?^9Ke*=y(&y^0q#o#f^F>Cb!NU0WxyI7Odgmo)ejaPbE_|ANCJ%x0TK zIo8UHmQOU&4xbdnd+Twf?wS>DpkA<{nKgL&hw|d=+w+Riv@%%cdBeXidd)XrzO z#2$X+KfQg?p-$0R9w)_)+UFSElTx;6i2EjG@^9mZ8Ldxlu&?JiXDk1J(X5wo(TaVi zqg$uR-g>oXBfr*3i=H0}TQ-OuR7_bW?3!l9zespC`?HNxI{hko+*tXQzfVnhgE-n%!29PizF{Bn}hP(i?vYrtej!!Hq zoXoXX$67Wz@Uq67>uWb$e-M08pGmo^{=)5LGA8qL3)ZT>ne_SB$u+XC4>9cevXwhc zaYH7Lz{hCIl`q|Y?K|Txa(TgLF=>x;>?iep_ReyfxZ|UU8|MtA=VE=2HD?@d)<~Aq zN>B(67c+VE4=1G(ai^K*`v_74Fc5%U_MPU|dMRRw0hV43AUF&i@vaZ&!{|bBKQTwRgv>Dt^ zkLAnGUAnhW$z9S{Va{EJ+QoqkvE?!km~*V8>n^7I?_$dQ6S#EUl*_NBwT*5Wd$wtm zMJ@H-r*6D@*UBjuw8Cp_uGrt+|7QOBZCnoo^M1c|zP{!Eo_FUg#F`iLd7rGkX1wRT zq{DmL$NOb|)*LN<@oUZNZBKKC96+X8GsMrZ`50c`O3)3?1r>N2W78;$--!(okU-a*0c2%^q)2 zj(ok;=p&&!HpsmB`8MRwV%dAI7%oi_;V4hETx)3L_SrtlEb~!eypKYU@dZhTZEe~c zgjkh!ZLllamw1%jV8hB44qx^phst-pCI?6yeA zXTSgIS}~)Z@kIOaEfvP%2M!nA+WJRM$!3*`KoN6AgKu@igpfDQ>v~?+oDeO4Jcobh zuJsJFRq7Ub81%%3=@`$==YFi9;;FQyWs-n|^g-o)TU&}-t{wvX(tLko~d}X}Mf8$HI!k^i@4{EJml)vE;??djnEQf`Z zoi=OSpEd6%SMIZYizZ}TZVQYP`M*Ib_fpyGpL3u5VE55Y_|59zBEQDwWBA`dCg&zL z#Y;hPj4}~=!AdLpBnmX5T_%24IrwUxf+VYu{&ms+d`WlIMBNWma)G8#x_>$7bOvPR zm`>AQ!GB-hzH-^AJ)c8EY~l{Z#K;L&RYwF0?7wWDwIk$ux_4=9+^UxJ<+}?D<{q<& z*?l(ZR@B2y_pIy{Hg}+(wa|)-4m8X%*({gBqPTf|r=8}BKqZu}*IhVA* z({|rjGyS-|4_ExzllOJ?@3+2W%Q?oV^5ciVtK*LrXDPZC9=Wc3iGOwQ)OEd6=gjmn zd7{G=e7-sP=En#RnVv2UF4N5!8gs%{9G_-sGh?^*pSy=sV=jI^(pa~ye?us{g;i0i zVslkw^4g0l9Fl%~-yFQTGQ`8shf_skD!f=yk^;(hF==NNofHt8w(DQ~d1 z;jO%$jx3kY+6RBG1jRkvy>(U4dYheHCuFViK{8`G6s|!B;-q5w1ZJm(R&JOSCB?~u-^iM4ipZ2uc>GO(= znFTW(B=qm5zS9lsG=J$LA^Z53XK7s3y_A}WppX3zwp}ba;ZdyLz?4&8mgu=tN-g08 zV{eVEs!7XKzsd&!4+WbSujo+H-_}uET%i!c!S6HS&XO!6(T<6~7VN)$;>Zj(0TX#< zLx&#^YZrIUKk8benDCC1@$<}YjSp-u=$d!cTiA-tT%q{yAnzmj1Y_^UgdmOvBj;IL zJ+dOWGL|sE&n(z*dYLeLGw)7Uk*$s;x;6!Ku6R_WyNIaUDJ|U7HPvc;-h>xgzo&T_ zM zo;N9GU53@v$X3zRnVbE#Zuv9iii4Kln{HuY#4XnxhN&g*mda|9+RYULBCUzkGxx+!@DM8BZuDRIc3{htnUZx(%CI0 z=hD>vLQ44Ik{M5SKRTtgV#n;==ReyX;Z|K$8hg5C{^{?` zy8@l!{!0q`4Lj-^8awrLEYla4NV?iKh*T<8Wjtwco^j#wQ3+42Y*|mv4%QD2k>O$A zc0PKp;BoH7J1+y<<*IoLe=Yd7P&~e+?e}w6@0qM$9gDd}<~L`nh&-FS zxWJ$D>zbgf#R4)?S0}Rb&*7_BJ;nXeKB4&OY;rE~a|&0nTt58v^fR5q^3`9(FMen^ zbYE{}f6YG!G0cf#jA*jJ?beX913^><{xhe~`7IAZ@PCb~32 z;{OfqkNg|{GAOJv+Y%I)u#0ob6#*}~Q`@%LBq*)qHC*7g+G-h>&Zn-uPE1K3)|zGN zO?7bVNPh6cD(Jv&1AP^*G@qtVk3L_>6`S3VU6#7?Rrb`bZjZUb&ejFz8h;!LkMj}Z zIrqKtYpm28u4GZ21i_~*8`J_M)DMV%JFYh;Bs5Os*@S}cp+W}z2Lz7Uv>b4+xt{ht z^tX%{dpPUmpLV_r_PF0zen$F@?_CXD{b!0>?EG(@IB;*re|P;O_6NR2vo3n^+_8&E z-qLvvU#P9K$zS&=r^|!)UTU?OkiwbI#HX`$gDcDIDTba`x^~2v|Fh=!>%Jx?qQtv# zN|5}ceM=9sM?K&FsXHU@f6SrP?>}7)`kAL;fAyT%8}^_>Her|UCVdq3_t5+DJuq^T z(X^uYueTC8g+u=^FXJ;XxY!!HC^6*bW9|ikTrv-r=)LpbJ?)W^)+VcyyHz`uJQNf= zdg@TKuIt+_?bQyo0>NJu=M`W0;P@jsy^i&)ti-tx?{BVO0}~3DI|{AjpTDwyRsOCe zpB1$GJa)|XDvCe)PRG13o%7x57aK+2e!g{N>fP`});OJzhpF#$6#pge^t~kXNdE4h z4UT`9bJ%umxOA6!YvgHH2gjR!Ez2$#u(d~(E_tB1l4J7inu;arKa{Qpa;mV^x~|IM z&%OD=`s#N2lV)$p*ou?}{%E^Tp9o($2k5gyY%TrEjubgf2Pku0Zy~ucf z$Fr}xUtGTiE)fcQd1!P+ zK>ZCz*ZTJurh_s}^x5}E=(IvoG8-{=WbxM^N? zH7LT!_sZF&n>^b?4=ikQKh@g$IW{86`_>anp^7DUvNu`tUVVJ(Qp%k2tv|0c7V{sJ zuYD>0q2RyG{ORT=Pji0cQC7bMiLaeB5UTBz@za&pP;O#!V{kuhI&W>zcwdNEUc@x#W- zBVxM*KXth8(K_wrb*uaL&BGPUz2zP6wC_!ucHI1kjHCOiL)!1MKd|$<#wGd}X+IOa zq*Hp`?~(jEf&U%(bHgNFXLNq-e=sdwP>cILU#j_8(?2$I7>c=X)Gc%{skOC=X>8qc zc4m?K4uYAGLNB2CtM%DW3ji zqWgmXmN)929t!gPHMd7ed|J%K@P;-vnU$MfuY8?3iEHA7bVc7=H+@QEZ45l;scRYC z5cJ@xT9v(BbK2W!ZJk^Tyq~iORNhSgSaAQ(3Wmk=pR|aW&h3&4an(BdUHEI@(_V?S zdy>5Clgp<)*thAY*Q&B5Mp*^%GiSWmm&Nl&Re9Fa-AR9#mx*rp%ckHKTFSfTh1Dse z4^mqfGP9>m-sxAmWZ{C6$jtoi2Z4ubr#@e&Rg_vPddDxwO9VJJ$t7e|8`$i`}VBwQ)SEKwsZ*ha9aMmXf0;b_H=hb z!p`~jq0AaPIj5ZT5RboNzHHLMgHxL)C_A-GEX;59UGw6zprYBLP|dUt9Dl#qTvIZg zu!*HY<4)325s$vtTKsITr^~cg^Ix2HHnQ#CZ`Jv(#q7_1?h)U0r{jVkLnG@~NBP^9 z`9|(xQj>mnt>)J`>UG4z-T&OzqqTe6^8eHwew=n#hLJ7p#i2>j7s6yU*Uz}}X~)+^Q2chG?xmgiyGZXQ2Y=*r*mG)tmBP8mi$(DDB7sIICamm z!hSzd5BGICcmFZBgRVR zuD%m~F!#l#q<7j?w;#P*E!XX{BkTLr%bQNlkohlB;_==^5E35GRt($Wiv|jt{iaw(Hs({a3W{wv{R+2s~n~TD7-o} zednu`lOG&k?2rFtX;MF7*XBKQrbc!+HXd3Sv+`Sk>9iZlwxQdOw4RjY$%)#rA%c0i z#x{YgYOhK@yiSzlSgF^l@h;gf-X-QUm#h7stcTty0$x`yIN8)IuY9a3*WMY+r*v`V z#m`G08&2Ha8&T=IQec(b_ZMa2hrNDJJ7+8L|NH6v9nZh&^Ef;c&{@I1>%N$h%C-mX zURO6g+NjK^(W}xY9adHUC`x)%u_7vwmLeUr~Q$!a?`+ zjb;2h)*tvL-ypJcK}arpYvL-uMNBm(6W(%r+AO&)c+@(==djoA)sKF(PYKc3H*Zc~ z%gpFQt3O0}GRQ@Gu3_!|I9yg}4hlLz-rkACL2FPoMU*B}|^oRENLc@7??fXx> zIw(Gg)mWzBN>{VrkCIG1{Y5XjR&NTCWtX;mAJZs0@psp*HIt@o+j#p_rt4pa6{k-v z%v-bUTCMBdFyV)~ryZ{ET3_Yy{>|H$KaM|A`Nw#f>&CywhbF0)Rl1$bmv-HgVWxRpKlQgmk>)*PQ4TEQoHA3^2ySxU+rF5g^T@_ zoyMo@`v32y^NSrhl@^_}bzCE~PN)0o2_eyT^)L4A{TdQCLc$b^*mfm-(zl+n;evzm z%l!wHW!xT|@YFi8Yo6jx#}eU+4U^QT#zdO#Sm&iV!S8DOj>R`+oafzk+2gd{zw5E= z#NVexxzybfG=8%!&C~WTh~HT_VUI4$c}A0jgx_acQ)h+Fn_G0|eDKa~TP_$dw0o7R ze9*W$(V)=u=>g@Ikbhol7VU6fzE1nf!EIizn(wW-x9!sZA7AAi7T=2~E84zUmXo_t zVaIxxuNPlRTb9IETE5fXzU23+&`Y&jg{Qr5dfTt3v$$;AvxJLcp($H7HFb9O`xGVC z@TMjua>=Y@ag(!ne!iVU^X4_PHukw3x!^)FzfaxqVMgq6@dp#V z%FYzVmu}9l3JniqO%?hl$7r*sKkl=g$+cUvZ=Qc0+M4RcbL(-N_8lgJ3MckMm-0hS z*1FE$efCaxNo&~bmHaG zQBu3|!Ncdr?MfVrlf$PqzCPvAm@zA4<{_0k+w-nV{cn1GuUpe*(W{-EzfKhU{%rcC zVbs5K{h@1H_Ni^&(=>C}`keA66YGL_-g9qNXCJI(-L{|k$c~OA!2pp31}$!BN;=Ga zQ(k$fDohH}(-E!^D0Ordu6W|KbjfS4)ebzfLPWJD9A|o3cyQ}`$H&6TF7_YQUnz?V z#1tBQP5jhWBKl4{u=aqv7*7rtqf3Wrh}NPR;UR%7u6>t0SdSTMzsk70gZbgcj*;=}@y(qJkTeR!^W7*1g+Ux9&JQwj!_NLrL2BO#uwDYjOnuk(DDuxb_HookolUpW$wCdzg}E@zG&jNh#QN-^yYZn4S)C~-#zl# zuSXquA?N0<>=*G3;cPS8t;RjCIww<)wfS4@YOPr}w0CV(`Yx(_{a(^L?b%z`_TCM* zJ^F6-srgz3@r`fI8BY4WThhFG;-1%?r^{Hyg(oq8s0-1sS*_8MwO{4SG{s4l_GN`H zulChQ>v1Np+x8=Ri>i3um!tVNQo~|09fK~Gwt5{}T2Q^fW>5FJ{|s`)lb7zAxXIy` z>b5Q4rmC;te;bpva}Bd%zEG;%i?Y^Bs(SqM*!yqad$MDb)^Ym-2fj&*Pg^x%5g&`I z^E?|PR#D}bjhT0~5-;S+NM#j#xZ$Q@xFSU1QE7y)s1U1vkfHeE1gpgLzWn@Esj~|X zE^B1hDvob(KfZ2FQ|fMw{NKCguKvTl?k9s>e*c9#wa?aVy1GvN&=q$bbsbWR zsI1*{CMaILi^Y0;DohwccR^;&m^ z%YfD5QL^cS38yzq&iU@}RyXnb_q8Rzqki2Ib`6oYF)8e~ij8!=ePUMb>OcLl)q3}C z_e^_rY5)B75t^wJRW8TuoWGL&dhea6o$vXt-3tqmcgw%zkh$YbZR*Fm7iX4UUCZz0 z&oF84ncA!7*PP1^eu_0PXk`j45nQ9%8E|!FK=48H&|Go#+%)I%uBmHhA6>7?b|<*8 zT06A&y2cE-!_BM@fMm|rOb z9hO5U}s^5u!+J^OK?}UdfFuGOrVbAi&2d9io zCdelw{M1`>>(E@?CN(Tt=!U=(N`4C$~Ezg@1 zHf~P*Q8UXe^jOvrgLfCNCRmk5#}?dW{}AELF(X<~XXBOB3FRUtLGqTCiiRaM=T{tB zC(Y0*m%i~1|2n%>`%a$TwSL8~hLwywXBZSxPi=WVGw@`&(%&P(5xe%dzOv!;I(2QE zW`T=GV%Cuj%8GuDo~-=w_mlSuSA>+MW*VIXZ_u+r6*Z1=Ko47M6{5aLME2cJr zE1^RnVBgFm>zXVhpB8?&ljhmBY@NC+18`OdH=B*^aA;BnUe zQI6PU1*uMVuej2wVbU|3x*xsLb1W5b+VoT5gblxnruuv@iJpfC|ig?&6 zo-WnK=IdvKZlC4SEeb4@OZnE!>wFY?}FeM(Vud28Av+wVvc^TzeWMIx%JH>*g0TbU&7|eieNG z=45f|(!1e{ei>93>o30-Bcd2;Z;u7`)5=6+`~JoQ(=dxl40 z|DsRtZY6d5lrC8}mCs20N#g{I%nL#f4kl}woV<{xC+A!-gXQe&qEyZP$lZSh-wR)# z*L{4pa>xEMx#t^LzdDL`3f%7OOMRuBvraYU%EMR6%m2Htu&ZhPC9v>t)ANPDKIrO( zOk(OdF(=3NHWcL`k#%%_<>ZrUkm8QaA3 z?Qt*Oy6DFu6U9|lf^GMgRBm*g!m=Z{*0F2)ZKWxi&*$ZJdpkaHZ~W$?yN2t7Mv!b& z#FHmADcfwf)o%UYDQ(x`ep^|GL+_97-xnKs8drSEyYk*1jWTVZtoSIsgWAS6+Vjj9?wr~UH9a*bjX{jS2_Z| zYgxpzv5S53SoC+=i$$6|%iPx=c1wC1|Bv_X_C?Q+>=3dEIB4m%Zq1xUy)z$&=hq+k ze}nhEvxuC>1nE6*s$@1NbWYs2C*^iw()6i&?w-#n4=U{4k)RYR#~Zj^<#%$pSg`!V zKDR&nuWZ!gp4a}@p(bph`Q_c){8uFkWeV(WKcrF=Z)y8DU{GY00@ zCt9y2>Iu|;VG@EKg)#gWzH|WqHXi9-1C#|pAD8%=Kk9LIjDf6KHmP+-vt}_+>2aa zO1W8X{MDhb;MDgA3l1F0(k@&WD)WAUmvV^u+lbm3dnPJ>7j5;L-16%1)-3K>&A+*L ze3m=#{A!re=Iyw%{3DlH@Cb`s%*PMc#qLdO zb{92m3ivlEcJcA_`6Yd|$0q83Kg?6LC`@!y)Ph2u_^x7=zjk}he6$M|(<*&v^wm+c z>szmTc%7{SGec)P;e3G83Hwry2>y zWX!B>{jfk!_s#T1clCFxZLUwf_}F~@pSagw7RSHres$PiwXo`8vLwTd6{lxZ{CU5a zp-q1Uzp77?`P4Yy9Xb`~uC`BnlmN19%3lVNouE=~B@>Sij@f7qnA#hvQ8it?Qb8ni8w3BwTkA#mS2D`AuG3j`&QkO5k2mRa zljjz`(YCqxT;%&lftpCouMab>v@0_m?)IK?;$)+tLCCAcf@`-4U3EWoUUi@0+>#GA zdbyXDSBP_Gm%DzSy28%t?}7$Un18f9%iZvt(fR#5Ext9+9h*IB9UjFgIIS!a3-!CRow)x3f^*y)i?oHJHT4Voq7uV|d zUOS}F0(6&jpWrnWwBnsCj5Dw$}8q&Oa>dY^wu=R z^!kM*q$VitTK;67f>uTdL;H(QN=I)#{5}5N z;xe^r#p#tdcX04dxP5bvz`Vl~%fc%qKcqA+TzzeIfc(ttEs>iw5?|)c(_Vcr>SmdQ zjrrO=+`()TGdKk9s>ELp(BN5k#>37;tI7Gz>qeeW4mwF}{RKh12QD(&6x|JH^DgUk zREmGSCjH;;uZI@LzdK%^#LBYc*9o25rIQa-ZolIGZuXQzE&=jxUCzQb@4qlJztc7_ zc({4x8@?L{C#;{&*cNljcHMP7N9T^+r|+@{KM;s3U&X_vr;|EKZ?ck_@~x!yLr;Es z7EU~N3fyK1^m)>&J}=q!{R?AT!-W^N@7dv$_hst5y@ooTwH8tzOiW%aUKk+1ZE2e) zzqibkEA8)mrPKGv*Q*tEvU~HhHb_ctg>%J~i#b}G|DRQ# zlf3_dXZo*;hZr(%uG3<^`;@bj>+8X)@{}v?du+nj+EqM_y>~n2_p>M7a=u3h->c<>s&Y4 zWMlaStW53sXf^c$a}H(*^(YHedOtee#>x*PZePrVWiVcWempF3Nu4w4$l? zM@-gr@wq-fA6!4tr2N%4AmX5?tZ?WVE#s5IQ`VJ=u9hm3O8O{E)RJe+sgwAA9+6X5^*UHq$SS^2Pe+l_ zAih-P_Y3o!rlqrD)_BWvcC&B3&o2E{+%QO)D?HeJ-I_@=Uw_=T*}rOj>8;6eZaaP* zP?>8Xv5H?xyD%kT$0--5{+*krygK~w)#A17p3STK!+uF9HX88F`>yh8@r&Mhob$L} zDcikpm?3cBz$s0E%Qbw=r%&@gH0)0Jr?9fILU{3);%)^YX^*4FxgQ+ZGAYmCN1$tp8I3MLdE@kA7rAGCh`i(%zUg9lNF@?ru65u`CRjaIptR4KDXM6pRbyk7QfZJ!oJxoU*_pd zknOAenw~${$Hc5%koZ#Vw_iJ-*gmxt>zbx>^gWTWwfM6`zax8a@_niyu zeC~aj`M@$*-axjYaVkqkeK{0xtu;#x9!QFqMNJ3C(e|8x5NFScn{*?TJs zz9w>Zwo87!cwt3clwOzh!dX|eB_9~xp2a9$DApCYDd=WR=8CDLHKo~>%sDe zQf6Ij=XE>d)0YITV!0T|Ss}8DFC^Hf<gNs!S%6t{<9x{ntzx0YRCGtGSLxKFYj4El!u?>zYTohBZG*H_q2B zT-5HSXTvq^^{hjxr8VlV;xBhH+SqXQZ@JBxF69+DYw4bOxv8I=j^s6S3PcENG~Z~i zs_*W2<^1~8tJIs%O%e?PHTJ`mT zLuISTL>9iX+$5HMF2@p4n^P+$ZaTZHCnkJ<)sN->_}~AN>Z@B`(kZmgZqJmcC4Zgn z^E9ccVhh~L${?e#A?EFE7XAQTW&fAvw(vHpH2AZdxr<<$@ zk)E+_vgmGUt_KS`>r9>>7HfK0cISD_YOA2_Wh{JFKfWHRiaTlaI4NUFi@T_4(6QL5 zx5^K%nqMIzck<2b(%8g%%r0*nGBU5UuRX=xX~nthO1prL|H}Tjt-n0>I!7LA-%)b? zWaPfncf))Cxzvi(a+Dk_o*{SOKvzseSJ>uNp0Tg@X<687)kyq(vT}M3yOY$BKDTWL zk_vQBtCh5ru7C8PT!@2zzM*^Rk~>ikcV0C8`89~EXT6lNTj2zw4=>aac9pc)!e>vG(bWrmC7vw0y+wjuIc7UgY- zL~@eCKSfaG{kP z`l1%gUo{_6wmcuSehb&t_SK>CkqIiVoLMJ()Na`_^Vzaj&Ftq_{<v z<@=QFjBCY_n@{p48NKjc>TYx2pkUr&yBPnn)T@i_O7fE;YcoRIMQqwPy-i4%t0iD~ zE#YFr=BgV9UG)0)Bu`x+u=(6m2~KPOt36&VZ5)cHFEux>J8($#bzBR{P1)H50M_hUE!L@vHpskMlPmQ;$yw<7j+R_m+ zal4X@Pki{(v|tfA`(4jxCmx9LV=Gzt`qZIIpJES|rmlXZ5~ihhDEjKDcPkCP9}d>N z-h0J8`V@EP)%L~V@_{?cwu1K3-8tR#{BPs08=1RG#P5VBB(Uk}G>3-F<&o8K$vDAr zs@cuZV#A&Ndn|71_cT5^?7Zqjw75+``-c+^Pph;KUpYiRZ{M#62R{ckuiCw8>27Fc zl;!mPNXUc}!4g{EL*8lWFc&0nceY9uzfM#X(KUYdy!-l;hX?1IFE>bPQe;$sekeDEW0^ zwf?6Emf`ZQ?_)XUH8)OW@mR)@)cIgX)`{zzH~K$W*gN&eWSK7EUpmoUy*DxoKD^zg zt0Jm4dGE&6C$_O(Ra6!360H+;e0yk#Q^?xjL{(NJ69bX||1__QPKpUHd$g-a<$CDh zhn0#KkKD^x5*z+V`h@WGx1U-Z=lN(fES$cYUwyTmMMlu8#rA9MWWobYCWiWmOn;Xq z#4fH@UjAy@yMMYqEC~ssu@Rm#zvS_JJXx|)NKitCp(xQUa^s1akM=DI^4hT>$h$<9 zVQEa%j322B1KH%Zn#_JxoTjL=d)HXo;RL|x7)ZLK5s2`T8(z+xzOTf^6qmzcL0hN<^?WyiohO ztBp@gW&6%4OIzFgr*Jkq`E`iOWhdqsX{xK<_1yI+|I;tsDQo_$T4SNcD);4|Om&~Y zcaG(;t*=i7?pU|sQ0dewd%T#QpEO%%cc&oQ->dewkxULeGX2K6oTbJqZOr00!O#6vk`dmH)UP$1ZkyEgOd)-A6fP#e0t^_qN8NO z^Vwm_ZJkx^OD???)1Mi%X@=6QCuzZ-Oxfl-9{l^{sKJEKc88wss3% z23!jio15d6rm{Ol#7__sc=*n6omI$(4XYfNtV;{trMiD*avKxtp@)M1mAlvNbEsVs z7IO3Dp8g}HQybj+5-Wlp+)3?n5x4MfY+1=4bzf_%t^T)%Zm*ITF@H7OvVDGz&=vNY zF9#1~F?3`l`TM?WTeiFJQx#~LlHzJ!Ntu~^tw{#4bJ-WonX>V1dPsZ!(g%B5Uqv;B zx-WNHT z;{PsUKJ(UiC&l;#?vgt?CH{_ZZIG4dt52>n#}zj-u_ke@Tg}18Y4fOS4=-QFt=tP; z@~2N%Rt6>f>5_`PF1k10_vI<)<^_5aC@1r)a+`=?dbp5(b9Os@?9r=A|)7v0TAxnLig4otq z&Zn3QWv>d|&-wqk%sF=5+^{=SVbyZ;70o)ku6W)mRSmoR)#T~z)KtM; z>z*8OJby~&_|^73vRBw8ZkRB2XuS(Ke&R@oNabs-fTOotT%4@kb5GoSRcNfi{rbQ} z-P9!Y^NPFI1RWJQ`!KM2xzpWA@ofDwZu1pgaLBh8e0Z?fR_f#Z+q~g{raZCXk9Nk? zri6Mev8!^)V0pFJzoIav_QcvO*=2T5k~%A2EneR8>wg3Yc$~v>>&FfYPg>v!E+FchFy2bYB zrn~<*)K=~22&?@P9xflSjfH28H$$NBtyG4Ee~XqgwEmItDxVs#NkuPODfIi)-)mq0 zTD(~3YQ9a^@6mM+d#kNxXBq zy^GdvcsBLPBCad#F|V~k96hP3*zVgNV*->o_<1j_w^sqZr6m5c&%U&Qh67mF=5J$8wdTP zi@4^gR6N;r@5qk!J^zc%=RUu?|K)kH^4P+NfUk)gH|fUhIq!QXhKFgL{7U|PA~RO= z%UL{UDBOFbRCN{qY}RwGUk@@r7g5mNHusQnN$yV1d+hPsytfxOw7gn8cLl$og4S0> z_VcM<85tOvS7+wcpH5xA_vniQ53+Zx@mY1y<^RF28yCrN9h!Nd`j zyzXvam+PS{on;*Sr<1SN9k!WRR^!Ja5M^N)xyxIa^)`==uD<2Dmm8VC8XmlL#qC1J zt!sUgS>yywj@@3Y=%7?#!c_4_G4p$9KEs4umB!;bLOa)oaWhy>t9kOLpTXw9fvn<0 z&x4tBr*`(9xLO)|{@~`lM-_K3HwZGHJgM0ClH_B}@W`2$6jIfygBbezx^&8z_^Z;x z?i);eIC017Csh&aHsx@(yWiS+HEfDj=JIJTPw8p#^OR>b4b5l2nW4Z25Mk}_UgagV=ZaLT2&Wxx6geuE9QZw_7Zc`yd(r`r^G?9=#Bdll(5a-*3M$duJg(7l)zX zh3@d+ldgidA0D|cZ0~p6Hs$)%x66~|a*rCt&c1q3=$D(KoQ40&Ne;CpciwD@o%$;x zV}aeYre6%qvsqXd&3y1$N^{1FsC!099Z$V#cufw8=dfN#I9YeGvN3352&-W5)(u>D z?N01zZ|CBf+O6~KzzPnzTU>jYb=aJ)x=+&3NS~wrK_E8#VY2%PxA&fpw4C@#Ih-Wb$mE6NWt>eVt!DGE5g*Vti3Yz`&7sJFDF8m_Dz1`c)06# z!;9aGy|-@gQ4CxmqqS?zszc6xA}-55bTAlAIMBQsw9eqsk@w5IHZ6C2Xr|$DYvpmR z>!Dta6=8cy%){gp_q9LSwy3jN3RHRJ-OpZNC&%!Wk!>4)OoZ&U1C!Q=i$q)(P19*| zle1Wqejs&fo7pu()(3&B_EhgTj^3FQF8=+&I_|31uU>-|*S)N#O|v2D)x#Kk47clqvy&V5#<5VG;aB1W4Dht^KB z+E$-XwyMT+O6t2!k2+uNXn(WoRq6tdwYxrTTBohu;J*IJu1Qzf%VT*LoX8bTo6F7B zvYNm0<~pz1mIjeYY>u@Jjc=VBM09uSCZ|sOys9BkOv>}%;TP^UWrt){?RR|djuY*W zSiv_r!u_REciV>(y6^Ah^)Hsc^HnoGL`p1JF3$0e^1L5QpYC*BryX7td$Wrz$ZvsN z)ZSMIcJ5f)^J~E|P?5=S~b&Kx;uN~`F{3|PJ3bUOq+xct32ZKQQD-N{{jlN6{1|K`JrtF>Y&gzjtXX}au zipN8q+=@^#Ir8{t@!!O+>p$|p`xnF@c>PFh>Z@t1nB`XFRV*p8Te841SLv$q!NWyM z?4H+Eg-%`hdX@jfU5{Qlm&CqgdT!hJYld>pW!>Ao+-htez-gzzxy}i|AS}N1w8!GP3+z(OI|e}R`%g3nN;+q=uY$D#kmi533Y26o6G*& z(&P-&^N`w}Y^LX(M?ju5V~vgYC13n~>P`Q9A2((RE<6~YV(|0x!Vu}8PYJ8O><$Tj z{XKjALHix=x#dbHL! z_4fX<7UHqtm8Z*&9;jSl_w3uGxsP8iaRe2Ipcs6c+;D}F?egc~JUvE<)CG#o%9o8@ z0(%U1>8X{k`)T@bVO8h)m9Mkn4>cE5oH*6|KlagropXIYWbraz~-5 znwb)Znpg36i~5HgwSDpUo(*{Dz~k+%q8XsF&!#|cpZk>4Wix+WP~}bAzqJ8WJCGlxt z6Ez;mu1wajXh{p0+O1Pmap(90!LVynA1JP#7;@o`Kl|Co$wiOk)-m*JtLPJT9?HS8?A32NfOL zm2J&f+0ReuKllBlyxd;C{~!K!`zkbb#f05$WADv3DSF^2%vwER%cD~l*PIgSR_FS_ z5gV?veX)O2`-@#t1_iNCpVln7;%+Q!Aun@2ejB%ZyupTAUV+1@yS26l&6~+`{pgbe zA+g%7ofVQon|@8Wo8|gIVE%mh;@^wSAIRVRU%9^Nm4T;#&f2t)4;`_gQWZyjA6>BX zu&9eQ=Nk4`%IDnpue85dB=qp%1rJxo9e{m1<15aP7oj9kJnuBd?2w%P)GJm40wjY{|YK>def{vr8IEw7FxK zhkZJ=pyR-XqVU9%sopk++__{lWQ7AYr=2N_vd%tR`s34YA=RXSPfOOEUS(q=A)r)o zAvf=ss_3D^<(+H7ayCxsR2K6*vuo3#x4cp!{URRL!rwCl`TD1IzFy_8b=}UvaZ+h) z=kb8A8#ia%eE0Lq{?DApBsiGZwykF{%HU1uk}b3H$xfTepuFC`YMIAkv-i##>ogji z^>%6O+W9W#d-R{h)%xGEN+LxMHg|leFlcaJ%pf;yfmXsIzqd8>*QcS1zuKK>0cO7Ir^ z?y-BFQiP9yyYTk~uNGfae_G?QZgt?v(y8JW%fJ5@o7)yAebD*O?xx1Zx6X%!g@xBY z;D2|!r2Bt!_5Pf#clJ)ze=%L>(26^Gl}DcJnzqQKrl>|t>Z4s^k(lDt?f;)RpZoCt zGs{+aJ=)>!A7o=#68n|q!-tj~ z?)=5El@oszNa)PUd$Q}%hZzNv4_LBugvu{IQ>w~-uJVm@N$lCXmec=SzWu**PMe=M zqa-L`M3_0Y#;(nMvb+ADN@dCK<{jJAH5IhvIW#wph|FNS#?6&VCxjUsxo7z{{?Reb<=_pzz|BU(cO?cnDzzPO_ zgAFU0Crn>m_NVUa`M>l3ezm^wc~8~+3zy2RuY3#DXXKTXQ4%Rx<;>b=Vsq!mpUM1n z6TkmjzHhmR%QsaU3!NWz*ZrqwKL0qu;N8W;cSDFDmhG!!ngxC{Fwb^ksGON){r7%ywcJPjy{|84oW9rVmZiea zml_j0ElEC1MZb)TZ|?3>-nRQ^SNbm3so(g$-=BL5hgM8&Dht1V74NbS4}S0B<-b^} zdRX~<>Cy1msfDq!oqZ1H>rd{VlzhSP6xT_x5BVqDSi!V2^R55h?Eh6WpDs#!scz8O z8F4GZ!!qN^%Fa#iv;s>%To-3w)?Dmw_l4*G{JvnViHEEr8Er18md8H1`~OI8*xU~t zeTAKzHYMv;+f=x0cscL&D|x@a)}JOR-sDEj!};K$_lFMS6RZ^+kxw-%EIj!-IBkAx+x1wkbjP}9IyHiohcojP+!rVp{ay;{ z3@?*&h+A}f`K^lAx3d4P{{PGOPRZu1Bip^#9Qah|r=t?BCU^TNV`+Rz@XdK*Mw;c* zZde~K$z_xa8q4 zP6?mvd~xB<2MpImC2m|{_fV~_`R?_9)&3e$+ijl(l^H~jI{P#Pvh?~LTo^9vBN`D` z7G3c7x!gad|67mmleX@g94K#+Ag96q|DUd)O~?Ze?VfiBm4n1zF4)P_|DjIe`-9`= zs@FrsKqqh=elF+r?`NjG8oOLYf}n)}sBf{7e}eeax8^%f*v`%`s^9e}`dVK3_MgJS z`>$x}gmV7$VTjc^v*Ly0B9`_CuRhhZz7lA7{4>sqFKPMRsO2($jQ;cbSEqk4FTV64 zqHtpU`^Vdtb1P3;!>v`7lX|67-K0^AyZ=Mj361s4auZ)?#Yld?uyY;TGZ~k-@;mku zgs1JfBOwD#-s00r6IY&b6@Jp@UiaqymlyiF{Jt*2dLOmdA24cdQ(eispUEP`yCU>K zK;u#6m#=MpcTE4izWUVuWI;K8gNh2)4*`r$ZS8Ac=xH2szNdEh@VkjuJ*?gd9=8%% zr!6V>WuM-=i96O!n`GQy#aj9BGev5v{9CS}%knSzcF9nJT0?icgbcK*M$_&;m>rboe3A57e_?NzJ$j&wX}3wq4@z;nPQ4PaRaYTIQ=J zEVt;jR@?D4Y?jI2vQKR8uTqWLkl?6VpujPwxzSg;VNN1PmzGGU81lyaF7bY%vc>7mqgjGQV zlZB1*)roI}cm2$KF!4#*lf%l7+lnUL>8ps}n86%se?#j43rWe|{cg zXBYGCR!LkprSjl;+t>LY>o$LL&p3VK@eU&sHBK3;tBQx6+1z746x3$MvsN6roz-%D zjwSoz>oz}g>VMu5zHnz}@#hB&>$D9vNb*d0UV5@M)PnO*>TTJ7y4iJ(Vfp*zr5P8i zn5Z$!sI6M8W8-r5Vs1st?HI*(j<+vYmCZ@LH|3F>x=y8)<<|$(7e3~*+p42;pp=!( zteNpr?qxq76ThPG$L{~wzHTqu`&l=pa`$Yy@Pb7~t9+_gX-HvYVa1c3Yf3(JY!7X4 zU!tcI#3uLo_p?dQWj-?fU)jEgN#5f30l!2>u-jNBT>gIWbC!D7RqOBy^Y#0r?(Toe zr_IV6y1rCWriinA5o7yYUx_mf&XH@w17x?&4ij2g`=^3aj_;gChbDJ_UAxWmhTs#% z{dSXOjDJf^VQ#!7!U0O!zZjpGeEgWQbNvoa-K6B(uit%@zf+{X^YusRi^{X#_a{F3 z9e487o}&*0)a%cenXcZZGl{j^yX1Gu)J3h%j5d?Hc1;WDi#=uXUFYD`tEUbe{??K! zRpC;w@uXmJ|7ZV*Dk-b1lbjhRFHFiiz!VdnkYFsL5Nj-}!Lz`*tnaLz z+tzRSr1kdHg%#W~N(w>iv^nLpzK5xQ@Yr^hyPreC_Y%i8*&PpFK3T#%&$Tb+Pt2Bz zYmYX0El!>Qt`syKZoU0>-%nLMOwQxQ|FWKZ#rm6{)IVLAX1}m~`yKCC;~l~U9UnB9 z+?TI9EF!n))e5G50lvhUWu`W47Zj|@ZgT!J&|Kt2yM~?99op zJ~vX1{ko(~MSqdy;+W9Kr@nrAkU079G#OvM_tAcQQ6EZ50{#bPBqTVnxS2l)lu`i| zo-g?)Joi)l9_p?zakBLByM>>Aylek^^|ri2|Jz^Ml}YcDE3O|2Tf^MW!7pmzQgP#u z+4Uo-q0BZv%p~OwZ|3_j{hY0gtl9UIPd@DQS7hh4;q;zxV#_Vl7I#qxiMh-l7?@{E zGFXOgtrfZx9vTxdGqS&up7u@7CiJI(K_5 zwJM4Y>*JXG>4U)bvspY7SZzu+21e%D zI~itP(pxj>f<_D1-}^Ui=eteD}`oR<#{UAl5liaD{_+KJhsAS{!V@^J>-qRXccUj-Rf49VFk?xy$crA{W1M=%Qx!`a6s^ zTAI8ph5QB^X0CTAdwc7s{foNA7Z+r;@a@mp&!3dR_R3}Z`IP93OVZX@6p1uUd}UA& zncDVY&ywyB4s2Yj))<{^)d3aAZA?$(|2>pHAsQYdxZZ$EL8wV($7{CR9yU$g$=j~^a39cwvWwvV9rUM5Kq|M@feMH#5Mrv>Ii-qlrzVG|K z_r=Zgb!D#_7?ifX-sP9DwPJ(Sjr*qJ)6^W|p5z7Ptv;BV%G19mndf038(Zo@MzH(& zCZyZGj`SBbpHuZ}<%>JT=Uq=v)9vn0R48PcaD!_?$Xtb02bKhPlrZ(hXo#%2v}%u$ z_tK6}4;FIH2xoLU&IOMB!;D3jJk@38&seTh-EC`Y`{L^QI@7Ax(f7OB+S`MV2fGU0 zxn=6ODEgFgcx?$oU+pTZT|E7Ljf@`{m~ZnlF1ju0F{g(t78yXtlvNKpdof6!qZMEWJ#)9knzHNQ+X7l-DJSsIs3r-zP zGSHk|aU)Rkd)I{-JOxhmXe8RPRy6efyt z3W;!D{M*(j-7}kR=`JbD zzxwFVs|`l^p#@VyWuq!W3L~#_^!qh}eR7_$XvU8jO;08`^JSiyX}ny-W8Tj*>1|yt z_f83CGYD&2v}p;i=9?hlpv=!#+PHYls~2WAK0;!pKen5X+gDSs1fJX%Iwp;hOskEc^@vk%g?~b%-o=% z8=zG2@zGIUu1QAX%RW@RE1usS_vexL;>mtio~9Su4H6v=vK?5#EVb-`Mp58Qr-Lq~ zA+7GA8K4^HKo;|fg_j=pIV$;UwaXNFNR%u;**Qt8Gx1W^)>AC^vWpWX^**mnjm)3^ zNcL`nyI=r=TtY&EqJbFe;`?7(_U*IVlW>r!`r;y2zr_~~%5pEBY}=M=`*zFaLkE6q zE}yfAx%p_4nuykpmQNZ>?X;e>hs0f*%|0WOqyK~014cHsW9l#NCGZ5>O=0AW-54sS zawTKx{e=q^zwCK#tKT!#=DFqhi;WE21{(u-_15rxcJ|VLz4l_N>C6uwKL2B5;5RTZ z5LEDBI2luxUDM0VXK^5IQ%a|;fq}zg$)#%Ir#CsxxKMHO^ZfsRHq2O@CUl%BV8Q~w zo+}-R1$zXPmYuHR4Rw$GutLTqes`Jf+9PkC%e3q5c+m9WpS#^BL5+)iY;4O|J#-9a zC}}baMO6r%pKpJErgix`UFSs~S~uix-JE`&ulZfcpR@P>`2L7UPJFZEW=@pJ!D_15tFyCp7ztX+j4IQ zeE9y|_h8ZW*z$#|*YBHU^WgyV$JeYC4UM4f7J(DbxE(bVS`?rvR$6#+)sZ79Po1uw zxIF(~$(Jq5ZF^;^-)wwwLb>0CN25|tXPut_bC+Srsg#A&17%AOCqF+ocgvEV7j2(R z_s7@#e$dPx6tO@$e~)3y@e3COB6k!dzIuO%0hHjGUvntj$uM8JFo7q`!o1DXz%#1o zf$jOTOM`Swt{J7DlPURdkiGrp`{T0ZGO`cNm|Gjw)zn@%F^JqrDwDQbHen@4pVz9z z9CFp)-|>ED|InlUnL$E@!7VVrX5XJ*UteEb6}tMw-|zSR!`8)g*8RSHzwJ27{`?AV zaNg%>C|I18BqkkpviR^xjTsEdGcJUNxgL0ML8IyPr>Cb+UUZk2eKzmH?F509n$rSb zPWkw;@XG!B>-YHUR?M-w7E;Q?$ET%U$HiqeF}x)D=y&tHI~^+)-Pn-GT=imMyHiEZ z-Ca{ZT;H8{*Q$YCLgI!UYe&UD1?gU{=k1N45+~}Qd5-psGeM`0ut->aRmxk;VEO5U zvL}N$m&BHolR_dk=@FhYR`G>6haVC;K6A@%U7J29MF|ZCmdK4stXxxEIrzEwvKXfv zeq2>u%?Qd(!9og)z8Xy6@wl#Q%6WFSIe&1tII9^jcCyP(*Pmu`-kJOT-Q9)VS=ZOap7?CDsp@Oimdwj)o05`OmC@57IT=nCmSbA#5if-;@iT?VDN;)dRNT+fdSha3D%w8}_*kg#d9Rjb>@kCoq> zpD$lME5lR#RhtttGxI~cs`*-~_Y%7OZf%L_e!c7APi1B0hf928Lt+BAMy>r|#=zLS zSAeTGp^5*Ypp5*x&AHZlN@dhbPbW@f=l>;j<32yw%C!tiQO%7lYyxkX%K5c!$@_GO zg=#cr9SE8GVMhy>PUQoGR*t!MK8y74nCt)J(cg_5H=Z&38MftQTYJ(>y#vfVJUOQr zR8039PWTeq;`!`{18aiSiqqZG!WQoJIkjT4)q#c0OzrJi^LhAXEqop-?po9JpzyM< z`OFE_z7wNG+yZ_N&OdwD_i)R%wH&d&Co&MJQJ@D~|ylI>yb zc(v7RN#M4JA(1C0NcAa-ehXy;bu@W+7=jMD%&=hFe|{f>`^C?GYBmf~2?+@d6Xx7+ zZ#t6JeBbmdKI;Vst0Kd;s9smFU literal 45338 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 +#include +#include +#include DatabaseIcons* DatabaseIcons::m_instance(nullptr); -const int DatabaseIcons::IconCount(69); -const int DatabaseIcons::ExpiredIconIndex(45); -const int DatabaseIcons::SharedIconIndex(1); -const int DatabaseIcons::UnsharedIconIndex(45); -// clang-format off -const char* const DatabaseIcons::m_indexToName[] = { - "C00_Password.png", - "C01_Package_Network.png", - "C02_MessageBox_Warning.png", - "C03_Server.png", - "C04_Klipper.png", - "C05_Edu_Languages.png", - "C06_KCMDF.png", - "C07_Kate.png", - "C08_Socket.png", - "C09_Identity.png", - "C10_Kontact.png", - "C11_Camera.png", - "C12_IRKickFlash.png", - "C13_KGPG_Key3.png", - "C14_Laptop_Power.png", - "C15_Scanner.png", - "C16_Mozilla_Firebird.png", - "C17_CDROM_Unmount.png", - "C18_Display.png", - "C19_Mail_Generic.png", - "C20_Misc.png", - "C21_KOrganizer.png", - "C22_ASCII.png", - "C23_Icons.png", - "C24_Connect_Established.png", - "C25_Folder_Mail.png", - "C26_FileSave.png", - "C27_NFS_Unmount.png", - "C28_QuickTime.png", - "C29_KGPG_Term.png", - "C30_Konsole.png", - "C31_FilePrint.png", - "C32_FSView.png", - "C33_Run.png", - "C34_Configure.png", - "C35_KRFB.png", - "C36_Ark.png", - "C37_KPercentage.png", - "C38_Samba_Unmount.png", - "C39_History.png", - "C40_Mail_Find.png", - "C41_VectorGfx.png", - "C42_KCMMemory.png", - "C43_EditTrash.png", - "C44_KNotes.png", - "C45_Cancel.png", - "C46_Help.png", - "C47_KPackage.png", - "C48_Folder.png", - "C49_Folder_Blue_Open.png", - "C50_Folder_Tar.png", - "C51_Decrypted.png", - "C52_Encrypted.png", - "C53_Apply.png", - "C54_Signature.png", - "C55_Thumbnail.png", - "C56_KAddressBook.png", - "C57_View_Text.png", - "C58_KGPG.png", - "C59_Package_Development.png", - "C60_KFM_Home.png", - "C61_Services.png", - "C62_Tux.png", - "C63_Feather.png", - "C64_Apple.png", - "C65_W.png", - "C66_Money.png", - "C67_Certificate.png", - "C68_BlackBerry.png" -}; -// clang-format on - -QImage DatabaseIcons::icon(int index) +namespace { - if (index < 0 || index >= IconCount) { - qWarning("DatabaseIcons::icon: invalid icon index %d", index); - return {}; - } + const QString iconDir = QStringLiteral(":/icons/database/"); + QStringList iconList; - if (!m_iconCache[index].isNull()) { - return m_iconCache[index]; - } - QImage icon(QStringLiteral(":/icons/database/").append(m_indexToName[index])); - m_iconCache[index] = icon; - return icon; -} - -QPixmap DatabaseIcons::iconPixmap(int index) -{ - if (index < 0 || index >= IconCount) { - qWarning("DatabaseIcons::iconPixmap: invalid icon index %d", index); - return QPixmap(); - } - - QPixmap pixmap; - - if (!QPixmapCache::find(m_pixmapCacheKeys[index], &pixmap)) { - pixmap = QPixmap::fromImage(icon(index)); - m_pixmapCacheKeys[index] = QPixmapCache::insert(pixmap); - } - - return pixmap; -} + const QString badgeDir = QStringLiteral(":/icons/badges/"); + QStringList badgeList; +} // namespace DatabaseIcons::DatabaseIcons() { - Q_STATIC_ASSERT(sizeof(m_indexToName) == IconCount * sizeof(m_indexToName[0])); + // Set the pixmap cache limit to 20 MB + QPixmapCache::setCacheLimit(20480); - m_iconCache.reserve(IconCount); - m_iconCache.resize(IconCount); - m_pixmapCacheKeys.reserve(IconCount); - m_pixmapCacheKeys.resize(IconCount); + iconList = QDir(iconDir).entryList(QDir::NoFilter, QDir::Name); + badgeList = QDir(badgeDir).entryList(QDir::NoFilter, QDir::Name); } DatabaseIcons* DatabaseIcons::instance() @@ -149,3 +54,55 @@ DatabaseIcons* DatabaseIcons::instance() return m_instance; } + +QPixmap DatabaseIcons::icon(int index, IconSize size) +{ + if (index < 0 || index >= count()) { + qWarning("DatabaseIcons::icon: invalid icon index %d", index); + return {}; + } + + auto cacheKey = QString::number(index); + auto icon = m_iconCache.value(cacheKey); + if (icon.isNull()) { + icon.addFile(iconDir + iconList[index]); + icon.addPixmap(icon.pixmap(IconSize::Default)); + icon.addPixmap(icon.pixmap(IconSize::Medium)); + icon.addPixmap(icon.pixmap(IconSize::Large)); + m_iconCache.insert(cacheKey, icon); + } + + return icon.pixmap(size); +} + +QPixmap DatabaseIcons::applyBadge(const QPixmap& basePixmap, Badges badgeIndex) +{ + const auto cacheKey = QStringLiteral("badgedicon-%1-%2").arg(basePixmap.cacheKey()).arg(badgeIndex); + QPixmap pixmap = basePixmap; + if (badgeIndex < 0 || badgeIndex >= badgeList.size()) { + qWarning("DatabaseIcons: Out-of-range badge index given to applyBadge: %d", badgeIndex); + } else if (!QPixmapCache::find(cacheKey, &pixmap)) { + int baseSize = basePixmap.width(); + int badgeSize = baseSize <= IconSize::Default * basePixmap.devicePixelRatio() ? baseSize * 0.6 : baseSize * 0.5; + QPoint badgePos(baseSize - badgeSize, baseSize - badgeSize); + badgePos /= basePixmap.devicePixelRatio(); + + QImageReader reader(badgeDir + badgeList[badgeIndex]); + reader.setScaledSize({badgeSize, badgeSize}); + auto badge = QPixmap::fromImageReader(&reader); + badge.setDevicePixelRatio(basePixmap.devicePixelRatio()); + + QPainter painter(&pixmap); + painter.setCompositionMode(QPainter::CompositionMode_SourceOver); + painter.drawPixmap(badgePos, badge); + + QPixmapCache::insert(cacheKey, pixmap); + } + + return pixmap; +} + +int DatabaseIcons::count() +{ + return iconList.size(); +} diff --git a/src/core/DatabaseIcons.h b/src/core/DatabaseIcons.h index ecd38fd8a..9f33644ee 100644 --- a/src/core/DatabaseIcons.h +++ b/src/core/DatabaseIcons.h @@ -18,32 +18,32 @@ #ifndef KEEPASSX_DATABASEICONS_H #define KEEPASSX_DATABASEICONS_H -#include -#include -#include -#include +#include "core/Global.h" +#include class DatabaseIcons { public: - QImage icon(int index); - QPixmap iconPixmap(int index); - static DatabaseIcons* instance(); - static const int IconCount; - static const int ExpiredIconIndex; - static const int SharedIconIndex; - static const int UnsharedIconIndex; + static constexpr int ExpiredIconIndex = 45; + + enum Badges + { + ShareActive = 0, + ShareInactive, + Expired + }; + + QPixmap icon(int index, IconSize size = IconSize::Default); + QPixmap applyBadge(const QPixmap& basePixmap, Badges badgeIndex); + int count(); private: DatabaseIcons(); static DatabaseIcons* m_instance; - - static const char* const m_indexToName[]; - QVector m_iconCache; - QVector m_pixmapCacheKeys; + QHash m_iconCache; Q_DISABLE_COPY(DatabaseIcons) }; diff --git a/src/core/Entry.cpp b/src/core/Entry.cpp index a5e372d07..fc553f9e5 100644 --- a/src/core/Entry.cpp +++ b/src/core/Entry.cpp @@ -163,7 +163,7 @@ const QString Entry::uuidToHex() const QImage Entry::icon() const { if (m_data.customIcon.isNull()) { - return databaseIcons()->icon(m_data.iconNumber); + return databaseIcons()->icon(m_data.iconNumber).toImage(); } else { Q_ASSERT(database()); @@ -175,27 +175,23 @@ QImage Entry::icon() const } } -QPixmap Entry::iconPixmap() const +QPixmap Entry::iconPixmap(IconSize size) const { + QPixmap icon(size, size); if (m_data.customIcon.isNull()) { - return databaseIcons()->iconPixmap(m_data.iconNumber); + icon = databaseIcons()->icon(m_data.iconNumber, size); + } else { + Q_ASSERT(database()); + if (database()) { + icon = database()->metadata()->customIconPixmap(m_data.customIcon, size); + } } - Q_ASSERT(database()); - if (database()) { - return database()->metadata()->customIconPixmap(m_data.customIcon); + if (isExpired()) { + icon = databaseIcons()->applyBadge(icon, DatabaseIcons::Badges::Expired); } - return QPixmap(); -} -QPixmap Entry::iconScaledPixmap() const -{ - if (m_data.customIcon.isNull()) { - // built-in icons are 16x16 so don't need to be scaled - return databaseIcons()->iconPixmap(m_data.iconNumber); - } - Q_ASSERT(database()); - return database()->metadata()->customIconScaledPixmap(m_data.customIcon); + return icon; } int Entry::iconNumber() const @@ -1104,9 +1100,8 @@ void Entry::setGroup(Group* group) m_group->database()->addDeletedObject(m_uuid); // copy custom icon to the new database - if (!iconUuid().isNull() && group->database() - && m_group->database()->metadata()->containsCustomIcon(iconUuid()) - && !group->database()->metadata()->containsCustomIcon(iconUuid())) { + if (!iconUuid().isNull() && group->database() && m_group->database()->metadata()->hasCustomIcon(iconUuid()) + && !group->database()->metadata()->hasCustomIcon(iconUuid())) { group->database()->metadata()->addCustomIcon(iconUuid(), icon()); } } diff --git a/src/core/Entry.h b/src/core/Entry.h index 3d42692c8..cbaf3e2c0 100644 --- a/src/core/Entry.h +++ b/src/core/Entry.h @@ -31,6 +31,7 @@ #include "core/CustomData.h" #include "core/EntryAttachments.h" #include "core/EntryAttributes.h" +#include "core/Global.h" #include "core/TimeInfo.h" class Database; @@ -81,8 +82,7 @@ public: const QUuid& uuid() const; const QString uuidToHex() const; QImage icon() const; - QPixmap iconPixmap() const; - QPixmap iconScaledPixmap() const; + QPixmap iconPixmap(IconSize size = IconSize::Default) const; int iconNumber() const; const QUuid& iconUuid() const; QString foregroundColor() const; diff --git a/src/core/Global.h b/src/core/Global.h index 0821687e3..9cb890299 100644 --- a/src/core/Global.h +++ b/src/core/Global.h @@ -46,6 +46,13 @@ static const auto TRUE_STR = QStringLiteral("true"); static const auto FALSE_STR = QStringLiteral("false"); +enum IconSize +{ + Default = 24, + Medium = 32, + Large = 40 +}; + template struct AddConst { typedef const T Type; diff --git a/src/core/Group.cpp b/src/core/Group.cpp index 7ce795f14..d9782a7cc 100644 --- a/src/core/Group.cpp +++ b/src/core/Group.cpp @@ -17,6 +17,7 @@ */ #include "Group.h" +#include "config-keepassx.h" #include "core/Clock.h" #include "core/Config.h" @@ -25,6 +26,10 @@ #include "core/Metadata.h" #include "core/Tools.h" +#ifdef WITH_XC_KEESHARE +#include "keeshare/KeeShare.h" +#endif + #include const int Group::DefaultIconNumber = 48; @@ -128,10 +133,9 @@ QString Group::notes() const QImage Group::icon() const { if (m_data.customIcon.isNull()) { - return databaseIcons()->icon(m_data.iconNumber); + return databaseIcons()->icon(m_data.iconNumber).toImage(); } else { Q_ASSERT(m_db); - if (m_db) { return m_db->metadata()->customIcon(m_data.customIcon); } else { @@ -140,35 +144,28 @@ QImage Group::icon() const } } -QPixmap Group::iconPixmap() const +QPixmap Group::iconPixmap(IconSize size) const { + QPixmap icon(size, size); if (m_data.customIcon.isNull()) { - return databaseIcons()->iconPixmap(m_data.iconNumber); + icon = databaseIcons()->icon(m_data.iconNumber, size); } else { Q_ASSERT(m_db); - if (m_db) { - return m_db->metadata()->customIconPixmap(m_data.customIcon); - } else { - return QPixmap(); + icon = m_db->metadata()->customIconPixmap(m_data.customIcon, size); } } -} -QPixmap Group::iconScaledPixmap() const -{ - if (m_data.customIcon.isNull()) { - // built-in icons are 16x16 so don't need to be scaled - return databaseIcons()->iconPixmap(m_data.iconNumber); - } else { - Q_ASSERT(m_db); - - if (m_db) { - return m_db->metadata()->customIconScaledPixmap(m_data.customIcon); - } else { - return QPixmap(); - } + if (isExpired()) { + icon = databaseIcons()->applyBadge(icon, DatabaseIcons::Badges::Expired); } +#ifdef WITH_XC_KEESHARE + else if (KeeShare::isShared(this)) { + icon = KeeShare::indicatorBadge(this, icon); + } +#endif + + return icon; } int Group::iconNumber() const @@ -452,8 +449,8 @@ void Group::setParent(Group* parent, int index) recCreateDelObjects(); // copy custom icon to the new database - if (!iconUuid().isNull() && parent->m_db && m_db->metadata()->containsCustomIcon(iconUuid()) - && !parent->m_db->metadata()->containsCustomIcon(iconUuid())) { + if (!iconUuid().isNull() && parent->m_db && m_db->metadata()->hasCustomIcon(iconUuid()) + && !parent->m_db->metadata()->hasCustomIcon(iconUuid())) { parent->m_db->metadata()->addCustomIcon(iconUuid(), icon()); } } diff --git a/src/core/Group.h b/src/core/Group.h index 7adabc8b5..8ff33d8d0 100644 --- a/src/core/Group.h +++ b/src/core/Group.h @@ -21,12 +21,12 @@ #include #include -#include #include #include "core/CustomData.h" #include "core/Database.h" #include "core/Entry.h" +#include "core/Global.h" #include "core/TimeInfo.h" class Group : public QObject @@ -85,8 +85,7 @@ public: QString name() const; QString notes() const; QImage icon() const; - QPixmap iconPixmap() const; - QPixmap iconScaledPixmap() const; + QPixmap iconPixmap(IconSize size = IconSize::Default) const; int iconNumber() const; const QUuid& iconUuid() const; const TimeInfo& timeInfo() const; diff --git a/src/core/Merger.cpp b/src/core/Merger.cpp index 2becd8a68..83b1e5a44 100644 --- a/src/core/Merger.cpp +++ b/src/core/Merger.cpp @@ -612,12 +612,11 @@ Merger::ChangeList Merger::mergeMetadata(const MergeContext& context) auto* sourceMetadata = context.m_sourceDb->metadata(); auto* targetMetadata = context.m_targetDb->metadata(); - const auto keys = sourceMetadata->customIcons().keys(); - for (QUuid customIconId : keys) { - if (!targetMetadata->containsCustomIcon(customIconId)) { - QImage customIcon = sourceMetadata->customIcon(customIconId); - targetMetadata->addCustomIcon(customIconId, customIcon); - changes << tr("Adding missing icon %1").arg(QString::fromLatin1(customIconId.toRfc4122().toHex())); + for (const auto& iconUuid : sourceMetadata->customIconsOrder()) { + if (!targetMetadata->hasCustomIcon(iconUuid)) { + QImage customIcon = sourceMetadata->customIcon(iconUuid); + targetMetadata->addCustomIcon(iconUuid, customIcon); + changes << tr("Adding missing icon %1").arg(QString::fromLatin1(iconUuid.toRfc4122().toHex())); } } diff --git a/src/core/Metadata.cpp b/src/core/Metadata.cpp index c0cb9bb6f..67a58b068 100644 --- a/src/core/Metadata.cpp +++ b/src/core/Metadata.cpp @@ -16,6 +16,7 @@ */ #include "Metadata.h" +#include #include #include "core/Clock.h" @@ -64,8 +65,7 @@ void Metadata::clear() { init(); m_customIcons.clear(); - m_customIconCacheKeys.clear(); - m_customIconScaledCacheKeys.clear(); + m_customIconsRaw.clear(); m_customIconsOrder.clear(); m_customIconsHashes.clear(); m_customData->clear(); @@ -178,62 +178,33 @@ bool Metadata::protectNotes() const QImage Metadata::customIcon(const QUuid& uuid) const { - return m_customIcons.value(uuid); + return m_customIconsRaw.value(uuid); } -QPixmap Metadata::customIconPixmap(const QUuid& uuid) const +QPixmap Metadata::customIconPixmap(const QUuid& uuid, IconSize size) const { - QPixmap pixmap; - - if (!m_customIcons.contains(uuid)) { - return pixmap; + if (!hasCustomIcon(uuid)) { + return {}; } - - QPixmapCache::Key& cacheKey = m_customIconCacheKeys[uuid]; - - if (!QPixmapCache::find(cacheKey, &pixmap)) { - pixmap = QPixmap::fromImage(m_customIcons.value(uuid)); - QPixmapCache::insert(pixmap); - } - - return pixmap; + return m_customIcons.value(uuid).pixmap(size); } -QPixmap Metadata::customIconScaledPixmap(const QUuid& uuid, const QSize& size) const -{ - QPixmap pixmap; - - if (!m_customIcons.contains(uuid)) { - return pixmap; - } - - QImage image = m_customIcons.value(uuid).scaled(size, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); - pixmap = QPixmap::fromImage(image); - - return pixmap; -} - -bool Metadata::containsCustomIcon(const QUuid& uuid) const -{ - return m_customIcons.contains(uuid); -} - -QHash Metadata::customIcons() const -{ - return m_customIcons; -} - -QHash Metadata::customIconsScaledPixmaps(const QSize& size) const +QHash Metadata::customIconsPixmaps(IconSize size) const { QHash result; for (const QUuid& uuid : m_customIconsOrder) { - result.insert(uuid, customIconScaledPixmap(uuid, size)); + result.insert(uuid, customIconPixmap(uuid, size)); } return result; } +bool Metadata::hasCustomIcon(const QUuid& uuid) const +{ + return m_customIconsRaw.contains(uuid); +} + QList Metadata::customIconsOrder() const { return m_customIconsOrder; @@ -387,57 +358,54 @@ void Metadata::setProtectNotes(bool value) set(m_data.protectNotes, value); } -void Metadata::addCustomIcon(const QUuid& uuid, const QImage& icon) +void Metadata::addCustomIcon(const QUuid& uuid, const QImage& image) { Q_ASSERT(!uuid.isNull()); - Q_ASSERT(!m_customIcons.contains(uuid)); + Q_ASSERT(!m_customIconsRaw.contains(uuid)); - m_customIcons[uuid] = icon; - // reset cache in case there is also an icon with that uuid - m_customIconCacheKeys[uuid] = QPixmapCache::Key(); - m_customIconScaledCacheKeys[uuid] = QPixmapCache::Key(); + m_customIconsRaw[uuid] = image; // remove all uuids to prevent duplicates in release mode m_customIconsOrder.removeAll(uuid); m_customIconsOrder.append(uuid); // Associate image hash to uuid - QByteArray hash = hashImage(icon); + QByteArray hash = hashImage(image); m_customIconsHashes[hash] = uuid; - Q_ASSERT(m_customIcons.count() == m_customIconsOrder.count()); - emit metadataModified(); -} + Q_ASSERT(m_customIconsRaw.count() == m_customIconsOrder.count()); -void Metadata::addCustomIconScaled(const QUuid& uuid, const QImage& icon) -{ - QImage iconScaled; - - // scale down to 128x128 if icon is larger - if (icon.width() > 128 || icon.height() > 128) { - iconScaled = icon.scaled(QSize(128, 128), Qt::KeepAspectRatio, Qt::SmoothTransformation); + // TODO: This check can go away when we move all QIcon handling outside of core + // On older versions of Qt, loading a QPixmap from QImage outside of a GUI + // environment causes ASAN to fail and crash on nullptr violation + static bool isGui = qApp->inherits("QGuiApplication"); + if (isGui) { + // Generate QIcon with pre-baked resolutions + auto basePixmap = QPixmap::fromImage(image).scaled(128, 128, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); + QIcon icon(basePixmap); + icon.addPixmap(icon.pixmap(IconSize::Default)); + icon.addPixmap(icon.pixmap(IconSize::Medium)); + icon.addPixmap(icon.pixmap(IconSize::Large)); + m_customIcons.insert(uuid, icon); } else { - iconScaled = icon; + m_customIcons.insert(uuid, QIcon()); } - addCustomIcon(uuid, iconScaled); + emit metadataModified(); } void Metadata::removeCustomIcon(const QUuid& uuid) { Q_ASSERT(!uuid.isNull()); - Q_ASSERT(m_customIcons.contains(uuid)); + Q_ASSERT(m_customIconsRaw.contains(uuid)); // Remove hash record only if this is the same uuid - QByteArray hash = hashImage(m_customIcons[uuid]); + QByteArray hash = hashImage(m_customIconsRaw[uuid]); if (m_customIconsHashes.contains(hash) && m_customIconsHashes[hash] == uuid) { m_customIconsHashes.remove(hash); } m_customIcons.remove(uuid); - QPixmapCache::remove(m_customIconCacheKeys.value(uuid)); - m_customIconCacheKeys.remove(uuid); - QPixmapCache::remove(m_customIconScaledCacheKeys.value(uuid)); - m_customIconScaledCacheKeys.remove(uuid); + m_customIconsRaw.remove(uuid); m_customIconsOrder.removeAll(uuid); - Q_ASSERT(m_customIcons.count() == m_customIconsOrder.count()); + Q_ASSERT(m_customIconsRaw.count() == m_customIconsOrder.count()); emit metadataModified(); } @@ -450,9 +418,9 @@ QUuid Metadata::findCustomIcon(const QImage& candidate) void Metadata::copyCustomIcons(const QSet& iconList, const Metadata* otherMetadata) { for (const QUuid& uuid : iconList) { - Q_ASSERT(otherMetadata->containsCustomIcon(uuid)); + Q_ASSERT(otherMetadata->hasCustomIcon(uuid)); - if (!containsCustomIcon(uuid) && otherMetadata->containsCustomIcon(uuid)) { + if (!hasCustomIcon(uuid) && otherMetadata->hasCustomIcon(uuid)) { addCustomIcon(uuid, otherMetadata->customIcon(uuid)); } } diff --git a/src/core/Metadata.h b/src/core/Metadata.h index 0bf591471..c61bfacb2 100644 --- a/src/core/Metadata.h +++ b/src/core/Metadata.h @@ -20,6 +20,7 @@ #include #include +#include #include #include #include @@ -28,6 +29,7 @@ #include #include "core/CustomData.h" +#include "core/Global.h" class Database; class Group; @@ -82,13 +84,11 @@ public: bool protectUrl() const; bool protectNotes() const; QImage customIcon(const QUuid& uuid) const; - QPixmap customIconPixmap(const QUuid& uuid) const; - QPixmap customIconScaledPixmap(const QUuid& uuid, const QSize& size = {16, 16}) const; - bool containsCustomIcon(const QUuid& uuid) const; - QHash customIcons() const; + bool hasCustomIcon(const QUuid& uuid) const; + QPixmap customIconPixmap(const QUuid& uuid, IconSize size = IconSize::Default) const; + QHash customIconsPixmaps(IconSize size = IconSize::Default) const; QList customIconsOrder() const; bool recycleBinEnabled() const; - QHash customIconsScaledPixmaps(const QSize& size = {16, 16}) const; Group* recycleBin(); const Group* recycleBin() const; QDateTime recycleBinChanged() const; @@ -122,8 +122,7 @@ public: void setProtectPassword(bool value); void setProtectUrl(bool value); void setProtectNotes(bool value); - void addCustomIcon(const QUuid& uuid, const QImage& icon); - void addCustomIconScaled(const QUuid& uuid, const QImage& icon); + void addCustomIcon(const QUuid& uuid, const QImage& image); void removeCustomIcon(const QUuid& uuid); void copyCustomIcons(const QSet& iconList, const Metadata* otherMetadata); QUuid findCustomIcon(const QImage& candidate); @@ -161,9 +160,8 @@ private: MetadataData m_data; - QHash m_customIcons; - mutable QHash m_customIconCacheKeys; - mutable QHash m_customIconScaledCacheKeys; + QHash m_customIcons; + QHash m_customIconsRaw; QList m_customIconsOrder; QHash m_customIconsHashes; diff --git a/src/fdosecrets/widgets/SettingsModels.cpp b/src/fdosecrets/widgets/SettingsModels.cpp index 3337ad8c5..1382f1f0e 100644 --- a/src/fdosecrets/widgets/SettingsModels.cpp +++ b/src/fdosecrets/widgets/SettingsModels.cpp @@ -147,8 +147,7 @@ namespace FdoSecrets case Qt::DisplayRole: return group->name(); case Qt::DecorationRole: - return group->isExpired() ? databaseIcons()->iconPixmap(DatabaseIcons::ExpiredIconIndex) - : group->iconScaledPixmap(); + return group->iconPixmap(); case Qt::FontRole: if (group->isExpired()) { QFont font; diff --git a/src/format/HtmlExporter.cpp b/src/format/HtmlExporter.cpp index cd3654e36..812af7868 100644 --- a/src/format/HtmlExporter.cpp +++ b/src/format/HtmlExporter.cpp @@ -21,6 +21,7 @@ #include #include "core/Database.h" +#include "core/Global.h" #include "core/Group.h" #include "core/Metadata.h" @@ -142,7 +143,7 @@ bool HtmlExporter::writeGroup(QIODevice& device, const Group& group, QString pat // Header line auto header = QString("


"); - header.append(PixmapToHTML(group.iconScaledPixmap())); + header.append(PixmapToHTML(group.iconPixmap(IconSize::Medium))); header.append(" "); header.append(path); header.append("

\n"); @@ -166,7 +167,7 @@ bool HtmlExporter::writeGroup(QIODevice& device, const Group& group, QString pat auto item = QString("

"); // Begin formatting this item into HTML - item.append(PixmapToHTML(entry->iconScaledPixmap())); + item.append(PixmapToHTML(entry->iconPixmap(IconSize::Medium))); item.append(" "); item.append(entry->title().toHtmlEscaped()); item.append("

\n" diff --git a/src/format/KdbxXmlReader.cpp b/src/format/KdbxXmlReader.cpp index f4109a4df..4ab5c9d03 100644 --- a/src/format/KdbxXmlReader.cpp +++ b/src/format/KdbxXmlReader.cpp @@ -368,7 +368,7 @@ void KdbxXmlReader::parseIcon() if (uuidSet && iconSet) { // Check for duplicate UUID (corruption) - if (m_meta->containsCustomIcon(uuid)) { + if (m_meta->hasCustomIcon(uuid)) { uuid = QUuid::createUuid(); } m_meta->addCustomIcon(uuid, icon); @@ -513,9 +513,9 @@ Group* KdbxXmlReader::parseGroup() raiseError(tr("Invalid group icon number")); } iconId = 0; - } else if (iconId >= DatabaseIcons::IconCount) { + } else if (iconId >= databaseIcons()->count()) { qWarning("KdbxXmlReader::parseGroup: icon id \"%d\" not supported", iconId); - iconId = DatabaseIcons::IconCount - 1; + iconId = databaseIcons()->count() - 1; } group->setIcon(iconId); diff --git a/src/gui/EditWidgetIcons.cpp b/src/gui/EditWidgetIcons.cpp index c9a0c0310..9ffb80ae5 100644 --- a/src/gui/EditWidgetIcons.cpp +++ b/src/gui/EditWidgetIcons.cpp @@ -132,7 +132,7 @@ void EditWidgetIcons::load(const QUuid& currentUuid, m_currentUuid = currentUuid; setUrl(url); - m_customIconModel->setIcons(database->metadata()->customIconsScaledPixmaps({24, 24}), + m_customIconModel->setIcons(database->metadata()->customIconsPixmaps(IconSize::Default), database->metadata()->customIconsOrder()); QUuid iconUuid = iconStruct.uuid; @@ -294,7 +294,7 @@ bool EditWidgetIcons::addCustomIcon(const QImage& icon) if (uuid.isNull()) { uuid = QUuid::createUuid(); m_db->metadata()->addCustomIcon(uuid, scaledicon); - m_customIconModel->setIcons(m_db->metadata()->customIconsScaledPixmaps({24, 24}), + m_customIconModel->setIcons(m_db->metadata()->customIconsPixmaps(IconSize::Default), m_db->metadata()->customIconsOrder()); added = true; } @@ -378,7 +378,7 @@ void EditWidgetIcons::removeCustomIcon() // Remove the icon from the database m_db->metadata()->removeCustomIcon(iconUuid); - m_customIconModel->setIcons(m_db->metadata()->customIconsScaledPixmaps({24, 24}), + m_customIconModel->setIcons(m_db->metadata()->customIconsPixmaps(IconSize::Default), m_db->metadata()->customIconsOrder()); // Reset the current icon view diff --git a/src/gui/EntryPreviewWidget.cpp b/src/gui/EntryPreviewWidget.cpp index 06152c554..9332bb2d0 100644 --- a/src/gui/EntryPreviewWidget.cpp +++ b/src/gui/EntryPreviewWidget.cpp @@ -162,7 +162,7 @@ void EntryPreviewWidget::updateEntryHeaderLine() Q_ASSERT(m_currentEntry); const QString title = m_currentEntry->resolveMultiplePlaceholders(m_currentEntry->title()); m_ui->entryTitleLabel->setRawText(hierarchy(m_currentEntry->group(), title)); - m_ui->entryIcon->setPixmap(preparePixmap(m_currentEntry->iconPixmap(), 16)); + m_ui->entryIcon->setPixmap(m_currentEntry->iconPixmap(IconSize::Large)); } void EntryPreviewWidget::updateEntryTotp() @@ -315,7 +315,7 @@ void EntryPreviewWidget::updateGroupHeaderLine() { Q_ASSERT(m_currentGroup); m_ui->groupTitleLabel->setRawText(hierarchy(m_currentGroup, {})); - m_ui->groupIcon->setPixmap(preparePixmap(m_currentGroup->iconPixmap(), 32)); + m_ui->groupIcon->setPixmap(m_currentGroup->iconPixmap(IconSize::Large)); } void EntryPreviewWidget::updateGroupGeneralTab() @@ -399,14 +399,6 @@ void EntryPreviewWidget::setTabEnabled(QTabWidget* tabWidget, QWidget* widget, b tabWidget->setTabEnabled(tabIndex, enabled); } -QPixmap EntryPreviewWidget::preparePixmap(const QPixmap& pixmap, int size) -{ - if (pixmap.width() > size || pixmap.height() > size) { - return pixmap.scaled(size, size, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); - } - return pixmap; -} - QString EntryPreviewWidget::hierarchy(const Group* group, const QString& title) { const QString separator("] > ["); diff --git a/src/gui/EntryPreviewWidget.h b/src/gui/EntryPreviewWidget.h index e1a7aff38..17bd62eb6 100644 --- a/src/gui/EntryPreviewWidget.h +++ b/src/gui/EntryPreviewWidget.h @@ -72,7 +72,6 @@ private: void removeTab(QTabWidget* tabWidget, QWidget* widget); void setTabEnabled(QTabWidget* tabWidget, QWidget* widget, bool enabled); - static QPixmap preparePixmap(const QPixmap& pixmap, int size); static QString hierarchy(const Group* group, const QString& title); const QScopedPointer m_ui; diff --git a/src/gui/IconModels.cpp b/src/gui/IconModels.cpp index 098089266..3bdd9a5e6 100644 --- a/src/gui/IconModels.cpp +++ b/src/gui/IconModels.cpp @@ -29,7 +29,7 @@ DefaultIconModel::DefaultIconModel(QObject* parent) int DefaultIconModel::rowCount(const QModelIndex& parent) const { if (!parent.isValid()) { - return DatabaseIcons::IconCount; + return databaseIcons()->count(); } else { return 0; } @@ -41,10 +41,10 @@ QVariant DefaultIconModel::data(const QModelIndex& index, int role) const return QVariant(); } - Q_ASSERT(index.row() < DatabaseIcons::IconCount); + Q_ASSERT(index.row() < databaseIcons()->count()); if (role == Qt::DecorationRole) { - return databaseIcons()->iconPixmap(index.row()); + return databaseIcons()->icon(index.row(), IconSize::Medium); } return QVariant(); diff --git a/src/gui/entry/AutoTypeMatchModel.cpp b/src/gui/entry/AutoTypeMatchModel.cpp index 4148ccc66..ac2d0f874 100644 --- a/src/gui/entry/AutoTypeMatchModel.cpp +++ b/src/gui/entry/AutoTypeMatchModel.cpp @@ -118,15 +118,11 @@ QVariant AutoTypeMatchModel::data(const QModelIndex& index, int role) const switch (index.column()) { case ParentGroup: if (match.entry->group()) { - return match.entry->group()->iconScaledPixmap(); + return match.entry->group()->iconPixmap(); } break; case Title: - if (match.entry->isExpired()) { - return databaseIcons()->iconPixmap(DatabaseIcons::ExpiredIconIndex); - } else { - return match.entry->iconScaledPixmap(); - } + return match.entry->iconPixmap(); } } else if (role == Qt::FontRole) { QFont font; diff --git a/src/gui/entry/EditEntryWidget.cpp b/src/gui/entry/EditEntryWidget.cpp index 8274968b7..330a9cd6a 100644 --- a/src/gui/entry/EditEntryWidget.cpp +++ b/src/gui/entry/EditEntryWidget.cpp @@ -1103,7 +1103,7 @@ void EditEntryWidget::cancel() return; } - if (!m_entry->iconUuid().isNull() && !m_db->metadata()->containsCustomIcon(m_entry->iconUuid())) { + if (!m_entry->iconUuid().isNull() && !m_db->metadata()->hasCustomIcon(m_entry->iconUuid())) { m_entry->setIcon(Entry::DefaultIconNumber); } diff --git a/src/gui/entry/EntryModel.cpp b/src/gui/entry/EntryModel.cpp index e6311f6b5..6438f8ed1 100644 --- a/src/gui/entry/EntryModel.cpp +++ b/src/gui/entry/EntryModel.cpp @@ -271,14 +271,11 @@ QVariant EntryModel::data(const QModelIndex& index, int role) const switch (index.column()) { case ParentGroup: if (entry->group()) { - return entry->group()->iconScaledPixmap(); + return entry->group()->iconPixmap(); } break; case Title: - if (entry->isExpired()) { - return databaseIcons()->iconPixmap(DatabaseIcons::ExpiredIconIndex); - } - return entry->iconScaledPixmap(); + return entry->iconPixmap(); case Paperclip: if (!entry->attachments()->isEmpty()) { return resources()->icon("paperclip"); diff --git a/src/gui/group/EditGroupWidget.cpp b/src/gui/group/EditGroupWidget.cpp index f77ae92d8..b77e49864 100644 --- a/src/gui/group/EditGroupWidget.cpp +++ b/src/gui/group/EditGroupWidget.cpp @@ -236,7 +236,7 @@ void EditGroupWidget::apply() void EditGroupWidget::cancel() { - if (!m_group->iconUuid().isNull() && !m_db->metadata()->containsCustomIcon(m_group->iconUuid())) { + if (!m_group->iconUuid().isNull() && !m_db->metadata()->hasCustomIcon(m_group->iconUuid())) { m_group->setIcon(Entry::DefaultIconNumber); } diff --git a/src/gui/group/GroupModel.cpp b/src/gui/group/GroupModel.cpp index a9b61315d..beba13774 100644 --- a/src/gui/group/GroupModel.cpp +++ b/src/gui/group/GroupModel.cpp @@ -130,12 +130,7 @@ QVariant GroupModel::data(const QModelIndex& index, int role) const #endif return nameTemplate.arg(group->name()); } else if (role == Qt::DecorationRole) { - QPixmap pixmap = group->isExpired() ? databaseIcons()->iconPixmap(DatabaseIcons::ExpiredIconIndex) - : group->iconScaledPixmap(); -#if defined(WITH_XC_KEESHARE) - pixmap = KeeShare::indicatorBadge(group, pixmap); -#endif - return pixmap; + return group->iconPixmap(); } else if (role == Qt::FontRole) { QFont font; if (group->isExpired()) { @@ -304,7 +299,7 @@ bool GroupModel::dropMimeData(const QMimeData* data, Database* targetDb = parentGroup->database(); QUuid customIcon = entry->iconUuid(); - if (sourceDb != targetDb && !customIcon.isNull() && !targetDb->metadata()->containsCustomIcon(customIcon)) { + if (sourceDb != targetDb && !customIcon.isNull() && !targetDb->metadata()->hasCustomIcon(customIcon)) { targetDb->metadata()->addCustomIcon(customIcon, sourceDb->metadata()->customIcon(customIcon)); } diff --git a/src/keeshare/KeeShare.cpp b/src/keeshare/KeeShare.cpp index beff3d950..31136a5c4 100644 --- a/src/keeshare/KeeShare.cpp +++ b/src/keeshare/KeeShare.cpp @@ -190,15 +190,11 @@ QPixmap KeeShare::indicatorBadge(const Group* group, QPixmap pixmap) if (!isShared(group)) { return pixmap; } - const QPixmap badge = isEnabled(group) ? databaseIcons()->iconPixmap(DatabaseIcons::SharedIconIndex) - : databaseIcons()->iconPixmap(DatabaseIcons::UnsharedIconIndex); - QImage canvas = pixmap.toImage(); - const QRectF target(canvas.width() * 0.4, canvas.height() * 0.4, canvas.width() * 0.6, canvas.height() * 0.6); - QPainter painter(&canvas); - painter.setCompositionMode(QPainter::CompositionMode_SourceOver); - painter.drawPixmap(target, badge, badge.rect()); - pixmap.convertFromImage(canvas); - return pixmap; + + if (isEnabled(group)) { + return databaseIcons()->applyBadge(pixmap, DatabaseIcons::Badges::ShareActive); + } + return databaseIcons()->applyBadge(pixmap, DatabaseIcons::Badges::ShareInactive); } QString KeeShare::referenceTypeLabel(const KeeShareSettings::Reference& reference) diff --git a/src/keeshare/ShareExport.cpp b/src/keeshare/ShareExport.cpp index c17c5052c..1f7180d04 100644 --- a/src/keeshare/ShareExport.cpp +++ b/src/keeshare/ShareExport.cpp @@ -77,7 +77,7 @@ namespace targetEntry->setGroup(targetRoot); targetEntry->setUpdateTimeinfo(updateTimeinfo); const auto iconUuid = targetEntry->iconUuid(); - if (!iconUuid.isNull() && !targetMetadata->containsCustomIcon(iconUuid)) { + if (!iconUuid.isNull() && !targetMetadata->hasCustomIcon(iconUuid)) { targetMetadata->addCustomIcon(iconUuid, sourceEntry->icon()); } } diff --git a/tests/TestEntryModel.cpp b/tests/TestEntryModel.cpp index 26cb0dfec..5df4b9ed9 100644 --- a/tests/TestEntryModel.cpp +++ b/tests/TestEntryModel.cpp @@ -230,7 +230,7 @@ void TestEntryModel::testDefaultIconModel() DefaultIconModel* model = new DefaultIconModel(this); ModelTest* modelTest = new ModelTest(model, this); - QCOMPARE(model->rowCount(), DatabaseIcons::IconCount); + QCOMPARE(model->rowCount(), databaseIcons()->count()); delete modelTest; delete model; diff --git a/tests/TestGroup.cpp b/tests/TestGroup.cpp index a9acb3dcc..28a9f7ec4 100644 --- a/tests/TestGroup.cpp +++ b/tests/TestGroup.cpp @@ -336,12 +336,12 @@ void TestGroup::testCopyCustomIcon() QScopedPointer dbTarget(new Database()); group->setParent(dbTarget->rootGroup()); - QVERIFY(dbTarget->metadata()->containsCustomIcon(groupIconUuid)); + QVERIFY(dbTarget->metadata()->hasCustomIcon(groupIconUuid)); QCOMPARE(dbTarget->metadata()->customIcon(groupIconUuid), groupIcon); QCOMPARE(group->icon(), groupIcon); entry->setGroup(dbTarget->rootGroup()); - QVERIFY(dbTarget->metadata()->containsCustomIcon(entryIconUuid)); + QVERIFY(dbTarget->metadata()->hasCustomIcon(entryIconUuid)); QCOMPARE(dbTarget->metadata()->customIcon(entryIconUuid), entryIcon); QCOMPARE(entry->icon(), entryIcon); } @@ -462,11 +462,11 @@ void TestGroup::testCopyCustomIcons() Metadata* metaTarget = dbTarget->metadata(); - QCOMPARE(metaTarget->customIcons().size(), 4); - QVERIFY(metaTarget->containsCustomIcon(group1Icon)); - QVERIFY(metaTarget->containsCustomIcon(group2Icon)); - QVERIFY(metaTarget->containsCustomIcon(entry1IconOld)); - QVERIFY(metaTarget->containsCustomIcon(entry1IconNew)); + QCOMPARE(metaTarget->customIconsOrder().size(), 4); + QVERIFY(metaTarget->hasCustomIcon(group1Icon)); + QVERIFY(metaTarget->hasCustomIcon(group2Icon)); + QVERIFY(metaTarget->hasCustomIcon(entry1IconOld)); + QVERIFY(metaTarget->hasCustomIcon(entry1IconNew)); QCOMPARE(metaTarget->customIcon(group1Icon).pixel(0, 0), qRgb(1, 2, 3)); QCOMPARE(metaTarget->customIcon(group2Icon).pixel(0, 0), qRgb(4, 5, 6)); diff --git a/tests/TestKeePass1Reader.cpp b/tests/TestKeePass1Reader.cpp index 30f744e28..cf0aa414e 100644 --- a/tests/TestKeePass1Reader.cpp +++ b/tests/TestKeePass1Reader.cpp @@ -112,7 +112,7 @@ void TestKeePass1Reader::testMasterKey() void TestKeePass1Reader::testCustomIcons() { - QCOMPARE(m_db->metadata()->customIcons().size(), 1); + QCOMPARE(m_db->metadata()->customIconsOrder().size(), 1); Entry* entry = m_db->rootGroup()->children().at(1)->entries().at(0); diff --git a/tests/TestKeePass2Format.cpp b/tests/TestKeePass2Format.cpp index df414f5c0..f58d0a885 100644 --- a/tests/TestKeePass2Format.cpp +++ b/tests/TestKeePass2Format.cpp @@ -110,9 +110,9 @@ void TestKeePass2Format::testXmlMetadata() void TestKeePass2Format::testXmlCustomIcons() { - QCOMPARE(m_xmlDb->metadata()->customIcons().size(), 1); + QCOMPARE(m_xmlDb->metadata()->customIconsOrder().size(), 1); QUuid uuid = QUuid::fromRfc4122(QByteArray::fromBase64("++vyI+daLk6omox4a6kQGA==")); - QVERIFY(m_xmlDb->metadata()->customIcons().contains(uuid)); + QVERIFY(m_xmlDb->metadata()->hasCustomIcon(uuid)); QImage icon = m_xmlDb->metadata()->customIcon(uuid); QCOMPARE(icon.width(), 16); QCOMPARE(icon.height(), 16); diff --git a/tests/TestMerge.cpp b/tests/TestMerge.cpp index 4f96d3e6d..7c9c3cc65 100644 --- a/tests/TestMerge.cpp +++ b/tests/TestMerge.cpp @@ -1117,14 +1117,14 @@ void TestMerge::testMergeCustomIcons() dbSource->metadata()->addCustomIcon(customIconId, customIcon); // Sanity check. - QVERIFY(dbSource->metadata()->containsCustomIcon(customIconId)); + QVERIFY(dbSource->metadata()->hasCustomIcon(customIconId)); m_clock->advanceSecond(1); Merger merger(dbSource.data(), dbDestination.data()); merger.merge(); - QVERIFY(dbDestination->metadata()->containsCustomIcon(customIconId)); + QVERIFY(dbDestination->metadata()->hasCustomIcon(customIconId)); } /** @@ -1143,16 +1143,16 @@ void TestMerge::testMergeDuplicateCustomIcons() dbSource->metadata()->addCustomIcon(customIconId, customIcon); dbDestination->metadata()->addCustomIcon(customIconId, customIcon); // Sanity check. - QVERIFY(dbSource->metadata()->containsCustomIcon(customIconId)); - QVERIFY(dbDestination->metadata()->containsCustomIcon(customIconId)); + QVERIFY(dbSource->metadata()->hasCustomIcon(customIconId)); + QVERIFY(dbDestination->metadata()->hasCustomIcon(customIconId)); m_clock->advanceSecond(1); Merger merger(dbSource.data(), dbDestination.data()); merger.merge(); - QVERIFY(dbDestination->metadata()->containsCustomIcon(customIconId)); - QCOMPARE(dbDestination->metadata()->customIcons().count(), 1); + QVERIFY(dbDestination->metadata()->hasCustomIcon(customIconId)); + QCOMPARE(dbDestination->metadata()->customIconsOrder().count(), 1); } void TestMerge::testMetadata() diff --git a/tests/gui/TestGuiPixmaps.cpp b/tests/gui/TestGuiPixmaps.cpp index c5754ba84..a6644f547 100644 --- a/tests/gui/TestGuiPixmaps.cpp +++ b/tests/gui/TestGuiPixmaps.cpp @@ -28,117 +28,55 @@ void TestGuiPixmaps::initTestCase() void TestGuiPixmaps::testDatabaseIcons() { - QImage image; - QPixmap pixmap; - QPixmap pixmapCached; - - image = databaseIcons()->icon(0); - pixmap = databaseIcons()->iconPixmap(0); - compareImages(pixmap, image); // check if the cache works correctly - pixmapCached = databaseIcons()->iconPixmap(0); - compareImages(pixmapCached, image); - QCOMPARE(pixmapCached.cacheKey(), pixmap.cacheKey()); - - pixmap = databaseIcons()->iconPixmap(1); - image = databaseIcons()->icon(1); - compareImages(pixmap, image); - pixmapCached = databaseIcons()->iconPixmap(1); - compareImages(pixmapCached, image); + auto pixmap = databaseIcons()->icon(0); + auto pixmapCached = databaseIcons()->icon(0); QCOMPARE(pixmapCached.cacheKey(), pixmap.cacheKey()); } void TestGuiPixmaps::testEntryIcons() { - Database* db = new Database(); + QScopedPointer db(new Database()); Entry* entry = new Entry(); entry->setGroup(db->rootGroup()); - QImage icon; - QImage image; - QPixmap pixmap; - QPixmap pixmapCached1; - QPixmap pixmapCached2; - - icon = databaseIcons()->icon(10); + // Test setting standard icon entry->setIcon(10); - image = entry->icon(); - pixmap = entry->iconPixmap(); - QCOMPARE(image, icon); - compareImages(pixmap, icon); - pixmapCached1 = entry->iconPixmap(); - pixmapCached2 = databaseIcons()->iconPixmap(10); - compareImages(pixmapCached1, icon); - compareImages(pixmapCached2, icon); - QCOMPARE(pixmapCached1.cacheKey(), pixmap.cacheKey()); - QCOMPARE(pixmapCached2.cacheKey(), pixmap.cacheKey()); + auto pixmap = entry->iconPixmap(); + QCOMPARE(pixmap.cacheKey(), databaseIcons()->icon(10).cacheKey()); + // Test setting custom icon QUuid iconUuid = QUuid::createUuid(); - icon = QImage(2, 1, QImage::Format_RGB32); + QImage icon(2, 1, QImage::Format_RGB32); icon.setPixel(0, 0, qRgb(0, 0, 0)); icon.setPixel(1, 0, qRgb(0, 0, 50)); db->metadata()->addCustomIcon(iconUuid, icon); + entry->setIcon(iconUuid); - - image = entry->icon(); pixmap = entry->iconPixmap(); - - QCOMPARE(image, icon); - compareImages(pixmap, icon); - pixmapCached1 = entry->iconPixmap(); - compareImages(pixmapCached1, icon); - QCOMPARE(pixmapCached1.cacheKey(), pixmap.cacheKey()); - - delete db; + QCOMPARE(pixmap.cacheKey(), db->metadata()->customIconPixmap(iconUuid).cacheKey()); } void TestGuiPixmaps::testGroupIcons() { - Database* db = new Database(); + QScopedPointer db(new Database()); Group* group = db->rootGroup(); - QImage icon; - QImage image; - QPixmap pixmap; - QPixmap pixmapCached1; - QPixmap pixmapCached2; - - icon = databaseIcons()->icon(10); + // Test setting standard icon group->setIcon(10); - image = group->icon(); - pixmap = group->iconPixmap(); - QCOMPARE(image, icon); - compareImages(pixmap, icon); - pixmapCached1 = group->iconPixmap(); - pixmapCached2 = databaseIcons()->iconPixmap(10); - compareImages(pixmapCached1, icon); - compareImages(pixmapCached2, icon); - QCOMPARE(pixmapCached1.cacheKey(), pixmap.cacheKey()); - QCOMPARE(pixmapCached2.cacheKey(), pixmap.cacheKey()); + auto pixmap = group->iconPixmap(); + QCOMPARE(pixmap.cacheKey(), databaseIcons()->icon(10).cacheKey()); + // Test setting custom icon QUuid iconUuid = QUuid::createUuid(); - icon = QImage(2, 1, QImage::Format_RGB32); + QImage icon(2, 1, QImage::Format_RGB32); icon.setPixel(0, 0, qRgb(0, 0, 0)); icon.setPixel(1, 0, qRgb(0, 0, 50)); db->metadata()->addCustomIcon(iconUuid, icon); + group->setIcon(iconUuid); - - image = group->icon(); pixmap = group->iconPixmap(); - - QCOMPARE(image, icon); - compareImages(pixmap, icon); - pixmapCached1 = group->iconPixmap(); - compareImages(pixmapCached1, icon); - QCOMPARE(pixmapCached1.cacheKey(), pixmap.cacheKey()); - - delete db; -} - -void TestGuiPixmaps::compareImages(const QPixmap& pixmap, const QImage& image) -{ - QCOMPARE(pixmap.toImage().convertToFormat(QImage::Format_ARGB32_Premultiplied), - image.convertToFormat(QImage::Format_ARGB32_Premultiplied)); + QCOMPARE(pixmap.cacheKey(), db->metadata()->customIconPixmap(iconUuid).cacheKey()); } QTEST_MAIN(TestGuiPixmaps) diff --git a/tests/gui/TestGuiPixmaps.h b/tests/gui/TestGuiPixmaps.h index 6e649c0f7..da55643a4 100644 --- a/tests/gui/TestGuiPixmaps.h +++ b/tests/gui/TestGuiPixmaps.h @@ -31,9 +31,6 @@ private slots: void testDatabaseIcons(); void testEntryIcons(); void testGroupIcons(); - -private: - void compareImages(const QPixmap& pixmap, const QImage& image); }; #endif // KEEPASSX_TESTGUIPIXMAPS_H diff --git a/utils/makeicons.sh b/utils/makeappicons.sh similarity index 100% rename from utils/makeicons.sh rename to utils/makeappicons.sh diff --git a/utils/makedbicons.sh b/utils/makedbicons.sh new file mode 100644 index 000000000..2e49b9110 --- /dev/null +++ b/utils/makedbicons.sh @@ -0,0 +1,123 @@ +#!/bin/bash +# Assemble database icons from the icons8 collection +# by Wolfram Rösler 2020-04-30 + +NC='\033[0m' +RED='\033[0;31m' +YELLOW='\033[0;33m' + +# Check parameters +if [[ $# != 1 ]];then + echo "Usage: $0 ICONS8" + echo "ICONS8 is the directory containing the Icons8 flat-color-icons repository" + echo "(git clone https://github.com/icons8/flat-color-icons)". + exit +fi + +# Check source directory +SRCDIR="$1" +if [ ! -d "$SRCDIR" ];then + echo -e "${RED}icons8 directory doesn't exist: ${SRCDIR}${NC}" + exit 1 +fi + +# Check destination directory +DSTDIR=share/icons/database +if [ ! -d "$DSTDIR" ];then + echo -e "${RED}Please invoke this script from the KeePassXC source root directory.${NC}" + exit 1 +fi + +# Copy one icon from the icons8 collection. +# +# Usage: copy I8NAME Cnn +# I8NAME is the file name (without extender and without +# the "icon8-" prefix) in the icons8 directory. +# Cnn is C plus the number of the database icon. +# +# Example: copy key C00 +copy() { + # The source file is: + SRC="${SRCDIR}/svg/${1}.svg" + if [ ! -f "$SRC" ];then + echo -e "${RED}Cannot find source icon for ${2} (${SRC})${NC}" + return + fi + + # Copy the source file to the destination, keeping + # the source file's extension + DST="$DSTDIR/${2}.svg" + cp $SRC $DST + echo "Copied icon for ${1} to ${DST}" +} + +# Now do the actual work +#copy key C00_Password # Derivative work from key +copy globe C01_Package_Network +copy high_priority C02_MessageBox_Warning +copy data_protection C03_Server # No exact match +copy survey C04_Klipper +copy businessman C05_Edu_Languages +copy services C06_KCMDF +#copy notepad C07_Kate # Provided by paomedia/small-n-flat +copy external C08_Socket +copy business_contact C09_Identity +copy address_book C10_Kontact +copy old_time_camera C11_Camera +copy entering_heaven_alive C12_IRKickFlash # No exact match +#copy keys-holder C13_KGPG_Key3 # Derivative work from key +copy crystal_oscillator C14_Laptop_Power +copy video_projector C15_Scanner +copy bookmark C16_Mozilla_Firebird +#copy cd C17_CDROM_Unmount # Provided by paomedia/small-n-flat +#copy monitor C18_Display # Provided by paomedia/small-n-flat +#copy feedback C19_Mail_Generic # Derivative work from feedback +copy settings C20_Misc +copy inspection C21_KOrganizer +copy file C22_ASCII +copy template C23_Icons +copy flash_on C24_Connect_Established +copy safe C25_Folder_Mail # No exact match +#copy save C26_FileSave # Provided by paomedia/small-n-flat +#copy cloud-storage C27_NFS_Unmount # Provided by paomedia/small-n-flat +copy film_reel C28_QuickTime +#copy C29_KGPG_Term # Derivative work from command_line and key +#copy command_line C30_Konsole # Derivative work from command_line +copy print C31_FilePrint +copy org_unit C32_FSView +copy cloth C33_Run +copy support C34_Configure +#copy vpn C35_KRFB # Derivative work from paomedia/small-n-flat +#copy archive-folder C36_Ark # Derivative work from folder +#copy percentage C37_KPercentage # Original work +#copy windows-client C38_Samba_Unmount # Derivative work from paomedia/small-n-flat +copy clock C39_History +copy search C40_Mail_Find +copy landscape C41_VectorGfx +copy electronics C42_KCMMemory +copy empty_trash C43_EditTrash +#copy C44_KNotes # Provided by paomedia/small-n-flat +#copy C45_Cancel # Original work +#copy C46_Help # Original work +copy package C47_KPackage +copy folder C48_Folder +copy opened_folder C49_Folder_Blue_Open +copy data_encryption C50_Folder_Tar +#copy unlock C51_Decrypted # Provided by paomedia/small-n-flat +#copy lock C52_Encrypted # Provided by paomedia/small-n-flat +#copy C53_Apply # Original work +#copy pencil C54_Signature # Provided by paomedia/small-n-flat +copy image_file C55_Thumbnail +copy contacts C56_KAddressBook +copy data_sheet C57_View_Text +copy podium_with_speaker C58_KPGP # No exact match +#copy hammer C59_Package_Development # Provided by paomedia/small-n-flat +copy home C60_KFM_Home +#copy C61_Services # Original work +copy linux C62_Tux +copy android_os C63_Feather +#copy C64_Apple # Derivative work created from simple-icons apple.svg +copy wikipedia C65_W +#copy currency_exchange C66_Money # Provided by paomedia/small-n-flat +copy diploma_1 C67_Certificate +copy smartphone_tablet C68_Blackberry