summaryrefslogtreecommitdiff
path: root/raveos-app-installer
diff options
context:
space:
mode:
authorNippy <nippy@Nippy-Mac-mini.local>2026-10-09 10:49:26 +0200
committerNippy <nippy@Nippy-Mac-mini.local>2026-10-09 10:49:26 +0200
commit91978706279a19a3ac96393630876f3e50cbc518 (patch)
tree1355da60486a305aefeea4e55543bbf1008715b3 /raveos-app-installer
parent17a23f8a0cec5439d674d90c593497e4ceed2c68 (diff)
downloadRaveOS-PKGBUILD-91978706279a19a3ac96393630876f3e50cbc518.tar.gz
RaveOS-PKGBUILD-91978706279a19a3ac96393630876f3e50cbc518.zip
fix
Diffstat (limited to 'raveos-app-installer')
-rw-r--r--raveos-app-installer/PKGBUILD21
-rw-r--r--raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/000003.log0
-rw-r--r--raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/CURRENT1
-rw-r--r--raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/LOCK0
-rw-r--r--raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/LOG3
-rw-r--r--raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/LOG.old2
-rw-r--r--raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/MANIFEST-000001bin41 -> 0 bytes
-rw-r--r--raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/000004.logbin1175 -> 0 bytes
-rw-r--r--raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/000005.ldbbin14577 -> 0 bytes
-rw-r--r--raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/CURRENT1
-rw-r--r--raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/LOCK0
-rw-r--r--raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/LOG6
-rw-r--r--raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/LOG.old2
-rw-r--r--raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/MANIFEST-000001bin147 -> 0 bytes
-rw-r--r--raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sessions/Session_13430846059845116bin4132 -> 0 bytes
-rw-r--r--raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sessions/Session_13430846351425167bin33793 -> 0 bytes
-rw-r--r--raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sessions/Tabs_13430846351524548bin6096 -> 0 bytes
-rw-r--r--raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/000003.logbin99 -> 0 bytes
-rwxr-xr-xraveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/CURRENT1
-rwxr-xr-xraveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/LOCK0
-rw-r--r--raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/LOG3
-rw-r--r--raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/LOG.old1
-rwxr-xr-xraveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/MANIFEST-000001bin41 -> 0 bytes
-rw-r--r--raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Local State1
-rw-r--r--raveos-app-installer/raveos-app-installer.py295
-rw-r--r--raveos-app-installer/raveos-secureboot-setup313
-rw-r--r--raveos-app-installer/secureboot/KEK.pem20
-rw-r--r--raveos-app-installer/secureboot/PK.authbin0 -> 2201 bytes
-rw-r--r--raveos-app-installer/secureboot/PK.pem20
-rw-r--r--raveos-app-installer/secureboot/db.pem21
-rw-r--r--raveos-app-installer/secureboot/installed/raveos-sb-resume.service7
-rwxr-xr-xraveos-app-installer/secureboot/installed/raveos-sb-sign-local.sh50
-rw-r--r--raveos-app-installer/secureboot/installed/zz-raveos-sb-sign.hook17
-rw-r--r--raveos-app-installer/secureboot/ms/MicCorKEKCA2011_2011-06-24.pem34
-rw-r--r--raveos-app-installer/secureboot/ms/MicCorUEFCA2011_2011-06-27.pem35
-rw-r--r--raveos-app-installer/secureboot/ms/MicWinProPCA2011_2011-10-19.pem34
-rw-r--r--raveos-app-installer/secureboot/ms/microsoft corporation kek 2k ca 2023.pem33
-rw-r--r--raveos-app-installer/secureboot/ms/microsoft option rom uefi ca 2023.pem33
-rw-r--r--raveos-app-installer/secureboot/ms/microsoft uefi ca 2023.pem33
-rw-r--r--raveos-app-installer/secureboot/ms/windows uefi ca 2023.pem33
40 files changed, 931 insertions, 89 deletions
diff --git a/raveos-app-installer/PKGBUILD b/raveos-app-installer/PKGBUILD
index 4f36f0f..9371335 100644
--- a/raveos-app-installer/PKGBUILD
+++ b/raveos-app-installer/PKGBUILD
@@ -1,14 +1,8 @@
# Maintainer: nippy <nippy@tuta.io>
-#
-# raveos-app-installer
-# ---------------------
-# Egyetlen fájlos, letisztult PyQt6 alkalmazástelepítő (v3 architektúra):
-# USER-ként fut (nem root), saját beépített jelszó-dialógus SUDO_ASKPASS-szal,
-# NINCS pkexec/root-launcher. Váltja a régi, strukturált (src/) v2 architektúrát.
pkgname=raveos-app-installer
pkgver=3.1
-pkgrel=17
+pkgrel=18
pkgdesc="RaveOS graphical application installer"
arch=('any')
url="https://git.rp1.hu/RaveOS/raveos-app-installer"
@@ -17,6 +11,9 @@ depends=('python' 'python-pyqt6' 'pacman' 'sudo')
optdepends=(
'yay: AUR csomag támogatás'
'flatpak: flatpak alkalmazás támogatás'
+ 'sbsigntools: Secure Boot aláírás'
+ 'efitools: Secure Boot kulcs telepítés'
+ 'zstd: Secure Boot modul-aláírás'
)
source=()
sha256sums=()
@@ -43,6 +40,16 @@ package() {
install -Dm644 "${startdir}/raveos-app-installer.png" \
"${pkgdir}/usr/share/icons/hicolor/512x512/apps/raveos-app-installer.png"
+ install -Dm755 "${startdir}/raveos-secureboot-setup" \
+ "${pkgdir}/usr/bin/raveos-secureboot-setup"
+
+ install -d -m 755 "${pkgdir}/usr/share/raveos"
+ cp -r --no-preserve=ownership "${startdir}/secureboot" \
+ "${pkgdir}/usr/share/raveos/"
+ find "${pkgdir}/usr/share/raveos/secureboot" -type d -exec chmod 755 {} +
+ find "${pkgdir}/usr/share/raveos/secureboot" -type f -exec chmod 644 {} +
+ chmod 755 "${pkgdir}/usr/share/raveos/secureboot/installed/"*.sh
+
cp -r --no-preserve=ownership "${startdir}/data" \
"${pkgdir}/usr/lib/raveos-app-installer/"
find "${pkgdir}/usr/lib/raveos-app-installer/data" -type d -exec chmod 755 {} +
diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/000003.log b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/000003.log
deleted file mode 100644
index e69de29..0000000
--- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/000003.log
+++ /dev/null
diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/CURRENT b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/CURRENT
deleted file mode 100644
index 7ed683d..0000000
--- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/CURRENT
+++ /dev/null
@@ -1 +0,0 @@
-MANIFEST-000001
diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/LOCK b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/LOCK
deleted file mode 100644
index e69de29..0000000
--- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/LOCK
+++ /dev/null
diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/LOG b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/LOG
deleted file mode 100644
index 9003b5b..0000000
--- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/LOG
+++ /dev/null
@@ -1,3 +0,0 @@
-2026/08/10-16:39:11.004 4839 Reusing MANIFEST /home/nippy/.config/BraveSoftware/Brave-Origin/Default/GCM Store/Encryption/MANIFEST-000001
-2026/08/10-16:39:11.004 4839 Recovering log #3
-2026/08/10-16:39:11.004 4839 Reusing old log /home/nippy/.config/BraveSoftware/Brave-Origin/Default/GCM Store/Encryption/000003.log
diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/LOG.old b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/LOG.old
deleted file mode 100644
index 70faec8..0000000
--- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/LOG.old
+++ /dev/null
@@ -1,2 +0,0 @@
-2026/08/10-16:34:19.532 3c24 Creating DB /home/nippy/.config/BraveSoftware/Brave-Origin/Default/GCM Store/Encryption since it was missing.
-2026/08/10-16:34:19.547 3c24 Reusing MANIFEST /home/nippy/.config/BraveSoftware/Brave-Origin/Default/GCM Store/Encryption/MANIFEST-000001
diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/MANIFEST-000001 b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/MANIFEST-000001
deleted file mode 100644
index 18e5cab..0000000
--- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/MANIFEST-000001
+++ /dev/null
Binary files differ
diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/000004.log b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/000004.log
deleted file mode 100644
index 85386dc..0000000
--- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/000004.log
+++ /dev/null
Binary files differ
diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/000005.ldb b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/000005.ldb
deleted file mode 100644
index c0a88d6..0000000
--- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/000005.ldb
+++ /dev/null
Binary files differ
diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/CURRENT b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/CURRENT
deleted file mode 100644
index 7ed683d..0000000
--- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/CURRENT
+++ /dev/null
@@ -1 +0,0 @@
-MANIFEST-000001
diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/LOCK b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/LOCK
deleted file mode 100644
index e69de29..0000000
--- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/LOCK
+++ /dev/null
diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/LOG b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/LOG
deleted file mode 100644
index fb6f1ba..0000000
--- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/LOG
+++ /dev/null
@@ -1,6 +0,0 @@
-2026/08/10-16:39:08.930 5 Reusing MANIFEST /home/nippy/.config/BraveSoftware/Brave-Origin/Default/Local Storage/leveldb/MANIFEST-000001
-2026/08/10-16:39:08.933 5 Recovering log #3
-2026/08/10-16:39:08.933 5 Reusing old log /home/nippy/.config/BraveSoftware/Brave-Origin/Default/Local Storage/leveldb/000003.log
-2026/08/10-16:43:17.304 5 Level-0 table #5: started
-2026/08/10-16:43:17.311 5 Level-0 table #5: 14577 bytes OK
-2026/08/10-16:43:17.319 5 Delete type=0 #3
diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/LOG.old b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/LOG.old
deleted file mode 100644
index b6dd490..0000000
--- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/LOG.old
+++ /dev/null
@@ -1,2 +0,0 @@
-2026/08/10-16:34:17.347 5 Creating DB /home/nippy/.config/BraveSoftware/Brave-Origin/Default/Local Storage/leveldb since it was missing.
-2026/08/10-16:34:17.368 5 Reusing MANIFEST /home/nippy/.config/BraveSoftware/Brave-Origin/Default/Local Storage/leveldb/MANIFEST-000001
diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/MANIFEST-000001 b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/MANIFEST-000001
deleted file mode 100644
index 3ee7649..0000000
--- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/MANIFEST-000001
+++ /dev/null
Binary files differ
diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sessions/Session_13430846059845116 b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sessions/Session_13430846059845116
deleted file mode 100644
index dec2925..0000000
--- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sessions/Session_13430846059845116
+++ /dev/null
Binary files differ
diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sessions/Session_13430846351425167 b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sessions/Session_13430846351425167
deleted file mode 100644
index d6b6802..0000000
--- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sessions/Session_13430846351425167
+++ /dev/null
Binary files differ
diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sessions/Tabs_13430846351524548 b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sessions/Tabs_13430846351524548
deleted file mode 100644
index 9338aab..0000000
--- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sessions/Tabs_13430846351524548
+++ /dev/null
Binary files differ
diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/000003.log b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/000003.log
deleted file mode 100644
index 4a8e04e..0000000
--- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/000003.log
+++ /dev/null
Binary files differ
diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/CURRENT b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/CURRENT
deleted file mode 100755
index 7ed683d..0000000
--- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/CURRENT
+++ /dev/null
@@ -1 +0,0 @@
-MANIFEST-000001
diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/LOCK b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/LOCK
deleted file mode 100755
index e69de29..0000000
--- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/LOCK
+++ /dev/null
diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/LOG b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/LOG
deleted file mode 100644
index 5955bbb..0000000
--- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/LOG
+++ /dev/null
@@ -1,3 +0,0 @@
-2026/08/10-16:39:08.921 4825 Reusing MANIFEST /home/nippy/.config/BraveSoftware/Brave-Origin/Default/Sync Data/LevelDB/MANIFEST-000001
-2026/08/10-16:39:08.921 4825 Recovering log #3
-2026/08/10-16:39:08.922 4825 Reusing old log /home/nippy/.config/BraveSoftware/Brave-Origin/Default/Sync Data/LevelDB/000003.log
diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/LOG.old b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/LOG.old
deleted file mode 100644
index 2a0eaa5..0000000
--- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/LOG.old
+++ /dev/null
@@ -1 +0,0 @@
-2026/08/10-16:34:17.339 3c10 Reusing MANIFEST /home/nippy/.config/BraveSoftware/Brave-Origin/Default/Sync Data/LevelDB/MANIFEST-000001
diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/MANIFEST-000001 b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/MANIFEST-000001
deleted file mode 100755
index 18e5cab..0000000
--- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/MANIFEST-000001
+++ /dev/null
Binary files differ
diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Local State b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Local State
deleted file mode 100644
index 6221116..0000000
--- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Local State
+++ /dev/null
@@ -1 +0,0 @@
-{"autofill":{"ablation_seed":"AZXVsIGW7us="},"brave":{"ad_block":{"checked_all_default_regions":true},"brave_search_conversion":{"already_churned":true},"core_metrics":{"pages_loaded":[{"day":1786312800.0,"value":2.0},{"day":1786226400.0,"value":0.0},{"day":1786140000.0,"value":0.0},{"day":1786053600.0,"value":0.0},{"day":1785967200.0,"value":0.0},{"day":1785880800.0,"value":0.0},{"day":1785794400.0,"value":0.0}]},"enable_search_suggestions_by_default":true,"migrated_adblock_social_media_blocking_settings":true,"misc_metrics":{"brave_search_query_counts":{"any_navigation":true},"brave_search_report_frame_start_time":"13430846057347621","combined_search_study_frame_start_time":"13430846057347632","combined_search_study_search_made":true,"failed_https_upgrade_metric_added_time":"13426552800000000","last_doh_fallback":0,"media_session_active_process_time":"450000000","media_session_frame_start_time":"13430846057232046","media_session_playing_time":"0","menu_dismiss_storage":[{"day":1786312800.0,"value":2.0}],"menu_group_actions":{"browser_views":4.0},"menu_shown_storage":[{"day":1786312800.0,"value":6.0},{"day":1786226400.0,"value":0.0},{"day":1786140000.0,"value":0.0},{"day":1786053600.0,"value":0.0},{"day":1785967200.0,"value":0.0},{"day":1785880800.0,"value":0.0},{"day":1785794400.0,"value":0.0}],"nav_source_counts":{"top_sites_favorites":1,"total":2},"nav_source_report_frame_start_time":"13430846057347627","total_dns_requests":[{"day":1786312800.0,"value":32.0},{"day":1786226400.0,"value":0.0},{"day":1786140000.0,"value":0.0},{"day":1786053600.0,"value":0.0},{"day":1785967200.0,"value":0.0},{"day":1785880800.0,"value":0.0},{"day":1785794400.0,"value":0.0}],"uptime_frame_start_time_v2":"13430846057427398","uptime_sum":"414342363","weekly_uptime_storage":[{"day":1786312800.0,"value":408.0},{"day":1786226400.0,"value":0.0},{"day":1786140000.0,"value":0.0},{"day":1786053600.0,"value":0.0},{"day":1785967200.0,"value":0.0},{"day":1785880800.0,"value":0.0},{"day":1785794400.0,"value":0.0}]},"new_tab_page":{"customize_p3a_usage":0,"p3a_new_tabs_created":[{"day":1786312800.0,"value":9.0},{"day":1786226400.0,"value":0.0},{"day":1786140000.0,"value":0.0},{"day":1786053600.0,"value":0.0},{"day":1785967200.0,"value":0.0},{"day":1785880800.0,"value":0.0},{"day":1785794400.0,"value":0.0}]},"onboarding":{"last_shields_icon_highlighted_time":"13430846567528190"},"origin":{"free_tier_accepted":true,"policies_were_enforced":true,"purchase_validated":true},"p3a":{"notice_acknowledged":true},"referral":{"initialization":true,"promo_code":"BRV001"},"search":{"backup_results":{"last_view_height":921,"last_view_width":1608},"last_switch_report":"13430846922639013"},"sidebar":{"target_user_for_sidebar_enabled_test":false}},"brave_shields":{"p3a_usage":0},"breadcrumbs":{"enabled":false,"enabled_time":"13430846057297325"},"browser":{"first_run_finished":true,"whats_new":{"enabled_order":[]}},"hardware_acceleration_mode_previous":true,"legacy":{"profile":{"name":{"migrated":true}}},"local":{"password_hash_data_list":[]},"management":{"platform":{"last_log_time":"13430846057341258"}},"network_time":{"network_time_mapping":{"local":1.786372749129309e+12,"network":1.78637275e+12,"ticks":1760881923.0,"uncertainty":1223261.0}},"optimization_guide":{"model_execution":{"last_usage_by_feature":{}},"model_store_metadata":{},"on_device":{"last_version":"151.1.93.135","model_crash_count":0}},"os_crypt":{"portal":{"prev_desktop":"GNOME","prev_init_success":true}},"p3a":{"activation_dates":{},"custom_attributes":{"media_session_usage":"0","search_default":"other"}},"performance_intervention":{"last_daily_sample":"13430846057426803"},"policy":{"last_statistics_update":"13430846057296519"},"profile":{"info_cache":{"Default":{"active_time":1786372457.423897,"ai_subscription_tier":0,"avatar_icon":"chrome://theme/IDR_PROFILE_AVATAR_26","background_apps":false,"default_avatar_fill_color":-14737629,"default_avatar_stroke_color":-526345,"enterprise_label":"","force_signin_profile_locked":false,"gaia_id":"","is_consented_primary_account":false,"is_ephemeral":false,"is_using_default_avatar":true,"is_using_default_name":true,"managed_user_id":"","metrics_bucket_index":1,"name":"Personal","profile_color_seed":-4078337,"profile_highlight_color":-14737629,"serp_metrics":{"brave_search_engine":[{"day":1782086400.0,"value":1.0}],"google_search_engine":[],"other_search_engine":[]},"signin.with_credential_provider":false,"user_name":""}},"last_active_profiles":["Default"],"metrics":{"next_bucket_index":2},"profile_counts_reported":"13430846057298079","profiles_order":["Default"]},"session_id_generator_last_value":"744144003","signin":{"active_accounts_last_emitted":"13430846057231733"},"subresource_filter":{"ruleset_version":{"checksum":0,"content":"","format":0}},"tab_stats":{"discards_external":0,"discards_frozen":0,"discards_proactive":0,"discards_suggested":0,"discards_urgent":0,"last_daily_sample":"13430846057293858","max_tabs_per_window":2,"reloads_external":0,"reloads_frozen":0,"reloads_proactive":0,"reloads_suggested":0,"reloads_urgent":0,"total_tab_count_max":2,"window_count_max":1},"ukm":{"persisted_logs":[]},"uninstall_metrics":{"installation_date2":"1782154367"},"updateclientdata":{"apps":{"adcocjohghhfpidemphmcmlmhnfgikei":{"dlrc":7161,"fp":"","installdate":7112,"max_pv":"1.0.469","pf":"53c03b89-69c8-4e01-a7c7-3e2d264931b6","pv":"1.0.475"},"afalakplffnnnlkncjhbmahjfjhmlkal":{"dlrc":7161,"fp":"","installdate":7112,"max_pv":"1.0.1468","pf":"0b6666c5-d270-441f-9da0-502be3538c5a","pv":"1.0.1503"},"aoojcmojmmcbpfgoecoadbdpnagfchel":{"dlrc":7161,"fp":"","installdate":7112,"max_pv":"1.0.23","pf":"26e5e602-358c-4152-8cc2-c19180622adb","pv":"1.0.24"},"bfpgedeaaibpoidldhjcknekahbikncb":{"dlrc":7161,"fp":"","installdate":7112,"max_pv":"1.0.16863","pf":"a55c4105-9171-4c4d-9ffb-dd77a5ecad08","pv":"1.0.16874"},"cdbbhgbmjhfnhnmgeddbliobbofkgdhe":{"dlrc":7161,"fp":"","installdate":7112,"max_pv":"1.0.19761","pf":"3b563fca-6ed0-4214-955e-2cde31e60990","pv":"1.0.19908"},"cemdlagocoimleflkfkjoihojfainiho":{"dlrc":7161,"fp":"","installdate":7161,"max_pv":"0.0.0.0","pf":"045b2476-4387-4d4a-a4a7-a927f432cdd7","pv":"1.0.119"},"dkpggglmbjhgjhachikgmohmecomjndo":{"dlrc":7161,"fp":"","installdate":7161,"max_pv":"0.0.0.0","pf":"11f5d842-511c-4b29-b3a7-c745e12eca8c","pv":"1.0.0"},"efniojlnjndmcbiieegkicadnoecjjef":{"cohort":"1:18ql:","cohortname":"Auto Stage3","dlrc":7161,"fp":"","installdate":7112,"max_pv":"0.0.0.0","pf":"529f8cdb-e88a-4c05-a107-7b32c7ede605","pv":"1738"},"ggkkehgbnfjpeggfpleeakpidbkibbmn":{"cohort":"1:ut9/1a0f:","cohortname":"M108 and Above","dlrc":7161,"fp":"","installdate":7112,"max_pv":"0.0.0.0","pf":"a966c7a8-01ad-4d44-b2bc-499dd8d0379e","pv":"2026.8.10.62"},"giekcmmlnklenlaomppkphknjmnnpneh":{"cohort":"1:j5l:","cohortname":"Auto","dlrc":7161,"fp":"","installdate":7112,"max_pv":"0.0.0.0","pf":"68e29660-4e5c-476a-9df2-4ab5609a6837","pv":"7"},"gkboaolpopklhgplhaaiboijnklogmbc":{"dlrc":7161,"fp":"","installdate":7112,"max_pv":"1.0.92","pf":"637e0dec-18ab-4c68-8b8e-673923451f03","pv":"1.0.95"},"hfnkpimlhhgieaddgfemjhofmfblmnib":{"cohort":"1:287f:","cohortname":"Auto full","dlrc":7161,"fp":"","installdate":7112,"max_pv":"0.0.0.0","pf":"08755607-b47c-4507-b276-7e0d20b4c6d1","pv":"10706"},"iodkpdagapdfkphljnddpjlldadblomo":{"dlrc":7161,"fp":"","installdate":7112,"max_pv":"1.0.20458","pf":"4b5131c9-5159-4342-85b8-9cac7d2cb47b","pv":"1.0.21487"},"jamhcnnkihinmdlkakkaopbjbbcngflc":{"cohort":"1:wvr:","cohortname":"Auto","dlrc":7161,"fp":"","installdate":7112,"max_pv":"0.0.0.0","pf":"83349149-1b15-47a7-98cc-423150c9f434","pv":"120.0.6050.0"},"jflookgnkcckhobaglndicnbbgbonegd":{"cohort":"1:s7x:","cohortname":"Auto","dlrc":7161,"fp":"","installdate":7112,"max_pv":"0.0.0.0","pf":"7f7dbae9-cedd-47ef-8436-09b0b1043ab0","pv":"3091"},"jmfhneobcdckobmonkfjkbknnjjnegoh":{"dlrc":7161,"fp":"","installdate":7161,"max_pv":"0.0.0.0","pf":"96e0b450-03c8-4c9d-9794-8f30e89125ed","pv":"1.0.0"},"khaoiebndkojlmppeemjhbpbandiljpe":{"cohort":"1:cux:","cohortname":"Auto","dlrc":7161,"fp":"","installdate":7112,"max_pv":"0.0.0.0","pf":"1f6c2599-ba72-4da7-ac54-c3d124fc5abd","pv":"145.0.7584.0"},"kihnoaefogbkmblfimmibknnmkllbhlf":{"dlrc":7161,"fp":"","installdate":7112,"max_pv":"1.0.6038","pf":"3a6c7af8-9f85-4261-9931-2a6017fc3677","pv":"1.0.7064"},"laoigpblnllgcgjnjnllmfolckpjlhki":{"cohort":"1:10zr:","cohortname":"Auto","dlrc":7161,"fp":"","installdate":7112,"max_pv":"1.0.7.1652906823","pf":"486a20ef-2770-47a7-8e84-d3885356fd6b","pv":"1.1.0.3"},"mfddibmblmbccpadfndgakiopmmhebop":{"dlrc":7161,"fp":"","installdate":7112,"max_pv":"1.0.146","pf":"ecb74f41-79cb-4d47-b13f-7266767415ff","pv":"1.0.151"},"nlpaeekllejnmhoonlpcefpfnpbajbpe":{"dlrc":7161,"fp":"","installdate":7112,"max_pv":"1.0.474","pf":"fdf405e3-c653-4583-8419-ddcebe0c86ef","pv":"1.0.523"},"obedbbhbpmojnkanicioggnmelmoomoc":{"cohort":"1:s6f:3cr3@0.025","cohortname":"Auto","dlrc":7161,"fp":"","installdate":7112,"max_pv":"0.0.0.0","pf":"ae14957e-6c26-4a07-979c-56bab97c3079","pv":"20251024.824731831.14"},"ojhpjlocmbogdgmfpkhlaaeamibhnphh":{"cohort":"1:w0x:","cohortname":"All users","dlrc":7161,"fp":"","installdate":7112,"max_pv":"0.0.0.0","pf":"04c2193a-f501-4e3a-8820-33ce4ce897bd","pv":"3"}}},"user_experience_metrics":{"consent_restructure_feature_state":false,"limited_entropy_randomization_source":"FE1EA34EA9F364323DD20A35BACD50D5","low_entropy_source3":7377,"pseudo_low_entropy_source":4436,"reporting_enabled":false,"session_id":2,"stability":{"browser_last_live_timestamp":"13430847055374029","exited_cleanly":true,"stats_buildtime":"1786293927","stats_version":"151.1.93.135-64-devel"}},"variations_compressed_seed":"safe_seed_content","variations_country":"hu","variations_crash_streak":0,"variations_failed_to_fetch_seed_streak":0,"variations_geo_level1":"","variations_last_fetch_time":"13430846349237474","variations_permanent_consistency_country":["151.1.93.135","hu"],"variations_safe_compressed_seed":"H4sIAAAAAAAAAN08WW8cyXnqkbirLVIS1RJ1UNfoXK0ktqd7bjsbZzgkV+SK5LiHFHcFI63q7uJMLXu6Z6t7SFFYOz6wycZxAjgHHNhIYDtBXhzAMJAAAfKaBMhDnvySf5C8BnnLU1LV1T3VMz0ccVdaLwIBu5yZ76qvqr76riqQ1fJ2uWRvqznNKue21aoNzUq5WjCtogaLebgtE3C+tlxvw6Du2WjxGbJ6AfbcDc9zKtJKCby+6ELTQfa0rZ0Er1ltSAJfPhaQHjIvjsRcmQSvL6Bt2HOC6SP6yeyRbCZ79O6Ru9LdzN1jTyV5A8gh5gJCXR35CBKrXZFWrgvszLNpQEnKIHtEoPrHErgeYqwt1vRVz0aO3wx69r6xhlvtwNmfRwGsSCtr4qBkAJBrkf0ulT0cmHYRnO5/Z4SM+ZhlMD3IIinSFB3s3WOhWE8l+UcSuJIulI4cBH2UFGjiJQtk6BfkKbWoKqpSzSuqVskeFYTbBtkQuQFbqO65AXKDxWcBgRZlxMSsSCuaOCu3wc1oVgKIHWSnog7MzB5QazbsBngXzfeCwHOX3Q2vS1eKCUm95wdeBz+HFPGxFk1WRVqpiIzvg7demIZ+LHuEMf62BJQX58zXx6dne1qeVAuaoiqVolIpZ8PBfywdZvT9VfHpxZDlKbWQD8VQVZVO+VNJ/p4EztZs0/GsnXXX2adrJZrhh+KOuAtudonX6QYG3A4QMfw2Ro7tGzb2GYhheT03kKW8eRqcGiCY3AvnqTqYHCWlWspmojXxVJI/+dyFmaHCFKkwFSrM0ViUAFyuOY63V0ckgNitOxi5wUPsBn4k0R1xJqjVSwdP8rskT6q5gqIqhYJSrGaP9ofPZuMJyNZcm3jYnveCwOvwqWRrkG6BcAfcFDmfA2fTUPQT8oSaryr3QsvzVJIhuJxKu7+2XoRucjiTEZNwMX0Izs9vrL7jeS0H1XpBe8sjO5B4PdeuSCuKOIMXwemA4FYLEey2jNA8yMdcz0Xma+DYwnKjOThPE2ohF44mcWj8rgSuzxO4i6JDx91FxGdrvtZYfqyNnK108CTXu3R1lOjqqCoVdXZSLVSoyVSVvCpO3N2JcEO/OkHepHu3HAqi5rWkJEcTcvyrBCqCHJwGOwPCE2bdsRF5jIiPPdc3tnDQ9npB03NdFFSkla+DKY7yyIEdOG1rl8AJO/zG6FAqMrDaMJgzoY8t7SaYiX7sEtTBvc4wkHkcvBYKo9+Xp1SNmsJSXlFLVKMa3QylslIsJjcDG8uvJFA85FjigXwAZHEg4ffjhnN/1HBkBmQ5sGejOZ/REoZ1TxYGUpqdVPPUvpXLilpJGdUvMuDNA0f1tT3kjhnHk1cxjpU2OM159UWYBtrsIKs3GJUP95D7WTQWK6lKNcZWd04paSka+3kG3H9BjRl4vfn/Vms3ZEFReWoFCuHRlY+0RrXVBhdDZYUH30Jtow6tdnySXhUNUP98jMCShmeWGh5uatSSNnBcfU8Cd0VWi8+6iOAOcgPoPMJ+NFGjXMYXQE1Kc5HuM7pqSiWlmB8Q5hMJ3BMprnomdtCaF+BtbDHD6guEK9JKVRTnwWGQByOZwWN8D9wWiTXb3t5DbNvIrXudruciwYv4kijEDZAdhzcYVyQZ/1wCZzkFv2Yv7iI3Vr4lHr83wRUbmV7PtZBhOdjaQbYBbQNRBGPbI3JG9bU7IGsju9d1qAZGw5lvgNc5r6RwV6JtXa4qRTV5crOF+okELkTS8gOQKjqS+DdEibPgkkUQpK6u4aPAsGJ4w4JdWcqZJ8CkQOSQovxcApciURafWU6PEtF7Doql+boozdug4re9nmMbiALbiGoFbxsJEdEzCyHbTxF1GpxMMjmktN+VwGwk7Rra24AmjbdqdixsURT2PDjdwS7u9DrGHsSBEeAOkjNqxzwFTiSwDynFv42T4luSKEYBPOA683vdrkfYHG5j0gm3F11Ohuu5BkF7kNg8naA9ALc41jZBH/aQa+1TLaZDjxnRJcF85tmIEuP58bjx6J95OGMEpFF5vhIKqGpawtH9s1+7dHJCOup3ToRnQCzXuungXez1/IdB0I3k+k1RrnPgZFIuIWs0gL+EYNAjaHgKw3itrJTKQ1P4ySGE0T6jMBo7jgRhkrvjp1J8CPg6shHq6EzXdWEeUoPba+DiNgqsttGF+/Q8NAJvB7lhpCtn8r45Cy6MIpiyg5mTVVTyhZQd/LcSyEUybqBnQd2Bvh+feHQRNIhnQhM7OMB9U5gQ9za41oUtZHRFSKON/cAj+4aPn1NbU6R5u2EOhzQ4fyBFjnOrRZDv411EfUAdBZigDks1RU5ERVpRwfEFng+Yts2bchid0TO1GRBsBUvYbSHSJdgNsNsaTg1cprFKjscqam4o8vwmOB8K0wu8DQJd34EB6hvgmcT3giSzcnjohSpMQKXkCqg+CmVurhL8vxP5O3UHQbfXbVKNeG7d83Yw8tdd/llHdCZoeP/lhEIeyIfA1s/KQFVpvrCYU3Lc35GeSnIXnAqpeC7NeyDiV6SVi6JPMwVA/8eVWUGGI+aULP42nJgp8xi3kj1yN3NXunvklXOsxBwzMcc/ktJYJpLgl4CMwg+GuW9w116e2IaOjz6tPOdoipauv6qmqPlc9mgskA+ucHm6+2z6HmF3Z4l4nZV4i74pKmSWu1kp8AecP2oyN/fhoZhefFGm77Jxikz7OTgYsWSZzCZLcC+6LeyiMeMchk+O87U4Kbb9qljQzFihnxn7z8jVXYD7TxDxGHGeX6tIK4/Bcc6jNn1EmwKv70KCIU1h1swvg3MiZt/G8WBhiSC/vRZ0a/SAWLYd1IcQ6M5P2wm685+J7vBQS/FQvwnkkC4PMCI9Xhb1eAqcSACtXElsi1PywM8DQSmo0sA3rylacSj4+lgCM+EAoOOY0NpZ8B5GMjwBoO54PXvbgQRN25oSjbUP2iDeLrYRWXTtrofdQAZWjBFPfwo8r/H05djkodgSQvZm1xYOhxuiJmbAGQa2hvb8PmhywMeFTfFXErgc0vVICwVLmPhBA5Jgvxl4BLaoob8v0r96MPjKg4Tir8oHQw9l8lU6EcW8UsknBv+zL46U5+jRRZO4xTI9ugQhv2iqpInRIpUzsZ7/RuKLNMyrN3HLXXYbiHQwO6GjRXVPlPQKj2bTUVbuJwS9Ih8IPHBCRH6AqhQHFvxff5EEPZcQVJx1yP3yhx7Bz+nZ62xA0w+3HRcsEvWuKOolnlZLw6OVzUgXTyXZeQUsRluEb/BM2iPPgk7b84OaZSHfH9b8nMgrC64ejJWiTxrrFIt04gV9/r3Ez9C1jcY8ga6N7C3oOF3YRSTi/KHoLL0JbmAXBxg6YZ3OCDzDDBGNvQhTllTtGpg9CECLzXEK56T00ynRxE8lnlROk7tHdtF+A7rIwX6QllUx74I7L4adlIQlvpm3Qx0emsKli7SSV8rlFBn/UgJKxKXZ6yKio21ECHRiXmuwEwUX/TSr6Offkm+MpzBYbQJqntr1ckmhIsbyVoaCEJ/v337aQEfb1HGIhHkg6uxatFIGoTnIsEMestaUak5wRV8100KOT0lV2NPBK2RKXeBoHai5srC3ET9yGvla3XP9ADkOi5w5mYq0cktke567PoPg41pvnD6bleb62nrQRmQBdQkK4/RRB2EjX2OgFEcAH8WNrmoaNGJu5hr52hoyew5MduKMYrWAt7cRQS61HE3Y6TrYbaWwSmwgq6+QkFW/2v3p2UwN7NJ9bu4b+drGfhdb0BlQSH+2Uk3wSLzxRuwTCWghDWzRBNWyy/9Y8sj7Xm+jZ6LH2EbeUHdRQRTkzWgAY4ik+P252O8P+Gh0mqb1g2V329t08Yc91AjIgaddGsKAdzQ7ybuVioqaT5w+T5Nc1zf0DWjqnuPQojbnOthANoww1EAmbPxdnmYJs20+a/NoImebhYD2fuT/x/FiqmbHIafsScRNCEddQ3v8r83lA0PTFPiDhvfBq2JzivaG5NnyGAzoXzqvfkDvvCoWtIsrXwwr1tUiX/P74C0Ru+HAYNsjnTotA3lkAQUo0TOXFznfAbdeBHdwoBnexObx84ijbyFzEzOXI2J2W2R2gQf7AvQygx5273M0Y1zIK1VxRbJ9wLcr7efZwB3UDGCnGy/7Wwmv45x8Ng04ye2GPKFqReUedTHokVvWlHIxJc8abqGmRRByk1nbeVom7buZqdaVwaQhDx/8Oept0BxgVfA2Pkf+UYa1mhc26K+Hf3/e/0PiFjPMdtXi0OVnYnnP/FMJ3Gmyasoj2HOtdlyG9pfdBvFobNFEZBdbCFwN4WrOHtz39Z4bgUa/Xw5/b4ZFmZCtjvyeE9RsHzwQsTfCJjJBvgiQFaQHC4B0pdFUQLmiVIYz6v80aqT74kCdX5/8tP8jbJ8qKqwLbGgw1Cf4xwy3gSHBeWjt9Loh2Xi3/k+iNHsSHN+GxKSejpyZU7UZMBUXcBCyeSJbOw3eeI6IFxZ1wvLsZTDtQLfVgy1a9EHQRkQ+7hHcwi50tKtAJsi1EUHEiMGE32fACUhPRIMVvFBU870JLoVf91yL14uQbZDwwI6AroCZEMjy/A4KsGVA30dxG3pk11N0kNKaLSz3f8+AawJmg3gdj9rheei6/Z22AE6Y7Asj2O8iY376ujYDJoWv5NfCHwYEWe+42PSehcQGqdRHUakfhsrC9I10KgsHUdENuv9pwaWUUwpCe6OeWVjUM0u6ntls6pnahp5ZbOqZ1ff0zLyuZ2q6nlle0zM20jPbRM/0fD0DAz2DfD3TeaZnTKJnINEz2P2/uO2/o8a30apdd5sBXZVpKs68FBWPoHJIFY+gcqCKxXX32zpK6vtopO16ra/xd+ZHa9yCfa23zAO0/ofSiAXNOsajBZ0TTdxN3so6gBGNhiEOpgwm1Tw9PcoFRcuJq4eOh46DytsyWXPUVV6JZU3b/JZAEwX0TPKXWfte6kE2EiElgs+HVflyOXuUuYYTrHJ4Oy4Bhw11y263F6y7/SB9VI7yAJRB3zpZMzvHORJk8xaCEcmk00OAvC7AvmKdeQswgCkuNovA4ua/pwewzIosz6SwTFI/I/cbDMvl2PE0Xh4HOdHWnOdO9e/wkQ8V1QdWxZlNHyUB3/HAGyOK6Xfjxvu8UizMTqo5enQWikqhMOQHvM9HGJPC682+m5uSbokBU7M7x4U1+A6YYhibtVEqiwa16SNSaw0V247xQ97lm4Km8VBQc3fIPHSgayG/n2wQWs2P0KaWEQgiA1s/Q53ygU57tq5CI7KFzMcY7TG/Htl1j7hC6Du4bU2KMbeHzLldjPbmSIg0Z4VYA4Ho/iE5nBrPQRzZZphliy/A5ITBfRKlgreQaXmdLgwWn1mI3auKnDqeOYnkEC8zmNf7ko/AHi6zazTUKFUVtZgb7Oq4NYbYS5GBtdJSGco5pVQaqOT8F22j6mEnWHZry7XGsh9FdhHrX0iJaO8nkjwlwsuTteUGu6BDP8wKH1Z7ToA7ng0dZkjlE7VlHe0RHCBCQeXacrPX6UDCry1xWlsxwNlH3I2M42P67cloA/LPpxlHb5sgaGO3VWssD2bShnvMvyMBuQ7dXei/ix2nuYeZR1qRVr4GLkdDNRY7iLRoD2IfZto2vySfCTG1hYfYRMRlgsgXFncxE3HTpSGYryPf6xEL+frMbBj4DlmeD8HVugM73SgZwK829K8TsWkXVZ+Vx2CwNqKwSqsp5cpQufzvJDBXd3B30WEtVI+xj00HzdON5C+7rDqke17QH3BFWoGgFKvkULi071u++QIo+mV+s2h2gmbGhzVlgqm64/loC9J5IsyDGTdPJ+UEDuNBTR2dDS2Fx/clcLvuOQ6ygi1kvtPY5BHdKqINZH5CJe+AW32VjMah7oR86QAA/Zw8oarhwNVqLBS3UtfrPNhZwk7A7k7V29ixlwjs9BtWyqJduJfs0D8If9hAhGdkSVELA4vmWxKYqRPPj7NWjxtrEfsvi+znwHHG/nFjjfuUjxtrtBOo2TN9i2BmoXgfzGDGjd49UGleqFBVVE1swKMiPAYXOSgjW/c6Hej2u2FTu00ioIPyoTvgpkiX+7yrHkEPw5B4VBqR/0whxUj+QGb41TITq8S/ksBt/ksD+n7QJl6v1eYaWUCWZ/ej299LZAfmwTTLIdELEPPsDqUjK83VueWSmvuI///hR7pnYjf7nv4Rn83se3q20bN2Pqr1CDRLIDuOOZDf6fYa1Hz51L9PuYxC3d1CJd4TPDn4ooPKJezmDXmsQIO+Kk9WTlCXNSp6rICzERkH7ovF4vPijAFwPPp9cIaOCJn4LBew7sIO2nQtx4M72G0teaTfKnY/MYyoJSLa3knEIV6x3nwww6noyO5ZKDpWw+6kGMeckc/wvLEIld7BlIRJqWg8AacXOxA7NQdDv2+vLonEToIpESbl6nA1vLWu5RM76bsSmFnstlEHEejwFpuIwTWRgQymB+FWsok2E1kehhjshaABi6KpSjmfGOHHn6MUFxJSJB24D8DFxWcBctlVmFXo4m3kB/07qIMXfdNghzWv0epHqUJ77kTNeyA7ktfou8XjWc4kWfYt2ccSuLPkESt8YOBZsIrc3rrbbOPtQKeF5Dq9qDQqrzEWcdhV70eo5UR0/91PKcfFQ8sRNsmKcvS18X0JTD6EbqvvCFngnPBFyHWh1+n607Z2AZzpYSNoU8/YcLyW4aBd5MiSRn/BXtovNCgNiQhUaUN4lcqTZ94BXw/MsMw+RLDbIN42pvnkVWgl/KTqWC/tvDzTp0D7Vah3hN0W84yon5Z0ninTX0rgMj8RFzsmsqnT7zcggZ3YyNhgYqPn0p2lXQezWx6xV+lIVrEbYzQtjyD5aE4pJEBooRgTZG8g0tGpZ09BKuaZ2dNDLJOR9Gw0Z/TuZPICATu5rsSFkYECQuoFuDPghB9AEvS6ho0cuC9ncuwqyCgi4VUZ3lRSKQ8Z4x64vEyzkg83Vh81IPERWYJ+0IVB3NAyeFN9BPjArYnZqTjaqFarQ2z/RAKXVqFV9wjrPAvTv9YOcuPYcrBumQ69cidhLS/Io+AS0tFVS1WilZRyQbjGsAnOc/+75tp1Av121PmRYrgjTz1amKNPWRtcWPXsnoOW6GVS2EENuqBGtQGngA4n5KIm0Uo13HTMibw2ikvf/t4QEyfjmW2yerfA7Chj9X0JqGtwF7eYijfaPMBe7wY4emnEr7P0w7pjR/fy03yvcUQGpm0WqDkqS76qiHkbDK6toWDPIzt1elWaBdvLboBaBAex6/wlMQt2A2S3kPkuDmr2Lk1+2Q2Cd6FFGzF4PmFgEx/jedUtcHoN7eH1JjXWo3sJqHdM3Hni7fmIUNCxGcE1MBMSjhzEPvHBGGYN7fWB0hogJtgrSmdDehvQ3CBwv09u8AgOZeVgqXK+JqSVXx5VWex2oy8kMA4/kMAs7Y/GLCJ0HM9aIgixJx3wc7qC3xKu7pmXDwJeuScsN828LB8Em35rI0x1t8eIdC+xrA/B50TEJ7IUP5DAWzEyTYoEyKZhMs35m9APySBnm37npzwD9MK4w0F+2OlZph38SSfyhxJQX5juAU8UfUrZzidlEw8RG8gxUZoiZnfWUhq9hoGGLpLEz5EMX/DD4HrD84MlfXEJPxt9PLwlMqXrchDnBQ6Kb0vgfIOgINhv0OYM1gboWT1+k/ErY32mi/IodP22/AatM+bov1lAc0qqUlJThvvPErjKrGGAuFENO8IpIz9y374lgTdjWUZBx2I15RtpMEse6dt/X54bD7MFiUuPCNfZD7N2+UE3sD+OZ+CqDn16Z8m1exbz64jnOAkvtDJWo+fks2lU9As0L6ky7vky28BHwt5WVsE4qbN2B2HuyuDkI+pIG82euU3TbNO2dhpMhM71cZ9/SV8ESKLq96iVZK+GFRS1oM5O8VpcWVHVPD8/Egm56zpvtWC2BwbIX+7QfovEwL8a5xhsYwR8uJxG/JhwwgsJJ7wFrtEyqViqXWZ3iGljZ3RavCUexpfB7GiM5DEs5kk+AlebHezQm7PNnt9Frr3uPoKtw09wGhW2vNRKOMC0B6e2wKlmFyGbsGaX7MZGc8AN0CbB0SDuQzkBJgXwlFxgSJyVp89tujZiD/pRUjQvtecR20+xMc0d3E0HHk6hauUwhqaN5ckQZBWc3ey2CLTRVhu59IrfqDdiBsDCJ+1y4eKsFLgT/Q3w1qZPrw0iG/k7gddtIoug4F0Ut7kmpkgUdKCWJV8bQyisfBcT6fEmOLnpo/UObMNCNI4rItlpcDKqrIZQww2eQt9AOKYxRC8eTPTdQaIZRvQDVuVlRa0GfoYc//3Nx6w7dDZes0O/0+KwPIw21hp+kmHMSM0K8K7gFf+LBI7z5jOaF/iOBI7zB9l8eTe3kJtXC6o66v9vz6lK7ivxt2X6j39XTnyaV4uq9nZOKYZ/5vt/FsI/S28zOPZJOw0m6dskxh52bW9PzqhtbRq8QVMSfttzbBp3F2mCUBxPStGiEl6ZD5NiwnL/iQTuP64st1zmEiw62GYpS9eGbrBhP6+3kbWTtJZrY63IA/ne48qSA1sG5nQNRAkbJKJsBPZzw2K09SvUthTCwyN6mo9P1Z9LUvgMzUsWceJwIiZfCb00IO/RpLT74PrjCs1NIvafRQd3cFj7HEj5nIlFTCgvK1/lkgU9YnoGe2qACheRYYXSfCVlWf9IAne2kLmAfcvbRWR/jT27E15y4Lny/ouhj0TrfAuc6MIgQMT1DZq+kM9EH+dgiKi0nve7JYZ4pHSFF8ImzILGw4YfSuDmGOH4VZfPRbKyUtGyL6y2vh//uQhXYjVpJtzvS+A2LYk+4o0pdrJduR+ip1yyeCG8YVsRvq+QV4raUAL9xFYbBvQ+QFommbaoBpDe6zU68AOPGNEDTz47jeVjtEV3+I5X6HzTZw4Kgl36Cwlc6L+UuYb2tpj9W3Kg3x51r2wU/MpcIi12TR4DPpRfYt5COacU+vmlH39R5DudlC9MSf2DBB48qUN+D8/gorC4krmULGxYQ3tCNup9cDYNbNrW7oObzy3ot/mLssg2AtpZEr5P6hv8jY/+I8tCRxWTYfgFmXw1vDupatUhp90HWUHySC3rbjJ3lk0kGWR5HNNZkWlliOkTcBKvN8NmRnYNZOQL2+zX1AzOWRqblMLOQPoSVJR7eu8l0JZF2qzSMcEuQ13A6816m3j0sUTeIuaPyqRu+mgQdHgA0Utgai4fp7msl8tGFhdAvsDHsgPO4PVmOIFMDyM6J8R+PQYXNYbKwg91SGzoesKUVNkrKtGU/FICcyncjCd0maftgs9xf4ySefcVKOiAxtNCNDG/+ALrKlXiG3MdiN3f0mDRKtnVIoKwWKxUy6hiV1AV5orbdhEVYbls2aVyXqv8L2JulED4XwAA","variations_safe_seed_date":"13430846058000000","variations_safe_seed_fetch_time":"13430846349237474","variations_safe_seed_locale":"hu","variations_safe_seed_milestone":151,"variations_safe_seed_permanent_consistency_country":"hu","variations_safe_seed_session_consistency_country":"hu","variations_safe_seed_signature":"MEQCH06dZwKnrjD5NL4zslyMi59lH20U7fqZSfZJH2VPfOwCIQCG/LHBShHWAfuJsuTlUbaiyJabmlDZE+AeUtyI3q/k3Q==","variations_seed_date":"13430846350000000","variations_seed_milestone":151,"variations_seed_serial_number":"23d76df102c70f19dab8794bc52a53af","variations_seed_signature":"MEQCH06dZwKnrjD5NL4zslyMi59lH20U7fqZSfZJH2VPfOwCIQCG/LHBShHWAfuJsuTlUbaiyJabmlDZE+AeUtyI3q/k3Q==","variations_sticky_studies":"","was":{"restarted":false}} \ No newline at end of file
diff --git a/raveos-app-installer/raveos-app-installer.py b/raveos-app-installer/raveos-app-installer.py
index d5a9149..d696a58 100644
--- a/raveos-app-installer/raveos-app-installer.py
+++ b/raveos-app-installer/raveos-app-installer.py
@@ -31,15 +31,11 @@ import subprocess
import sys
from pathlib import Path
-# ─────────────────────────────────────────────────────────────────────────────
-# Konstansok / útvonalak
-# ─────────────────────────────────────────────────────────────────────────────
APP_NAME = "RaveOS App Installer"
APP_ID = "raveos-app-installer" # Wayland app_id (Hyprland window rule-okhoz)
APP_VERSION = "3.1"
-# app-list.json keresési sorrend: a script mellett -> /usr/share -> ~/.config
_SCRIPT_DIR = Path(__file__).resolve().parent
APP_LIST_CANDIDATES = [
_SCRIPT_DIR / "app-list.json",
@@ -47,9 +43,6 @@ APP_LIST_CANDIDATES = [
Path.home() / ".config" / "raveos" / "app-list.json",
]
-# ─────────────────────────────────────────────────────────────────────────────
-# Téma (a welcome app stílusa)
-# ─────────────────────────────────────────────────────────────────────────────
C = {
"bg": "#232427",
@@ -68,7 +61,6 @@ C = {
"danger_hi": "#c56458",
}
-# Per-type kis badge színek (visszafogottak)
TYPE_LABEL = {
"pacman": "pacman",
"aur": "AUR",
@@ -79,9 +71,6 @@ TYPE_LABEL = {
}
-# ─────────────────────────────────────────────────────────────────────────────
-# Nyelv (hu/en) - session-szintű, alapértelmezett hu, a welcome app mintájára
-# ─────────────────────────────────────────────────────────────────────────────
_current_lang = "hu"
@@ -90,6 +79,30 @@ T = {
"header_backup": {"hu": " · MENTÉS / VISSZAÁLLÍTÁS", "en": " · BACKUP / RESTORE"},
"nav_backup": {"hu": "Mentés / Visszaállítás", "en": "Backup / Restore"},
"nav_back": {"hu": "← Vissza", "en": "← Back"},
+ "nav_sb": {"hu": "Secure Boot", "en": "Secure Boot"},
+ "header_sb": {"hu": " · SECURE BOOT", "en": " · SECURE BOOT"},
+ "sb_desc": {"hu": "A telepített rendszer aláírása és a kulcsok telepítése a firmware-be.\nWindows dual-boot mellett is biztonságos (Microsoft kulcsok megőrizve).", "en": "Sign the installed system and enroll the keys into the firmware.\nSafe with dual-boot Windows (Microsoft keys preserved)."},
+ "sb_lbl_sb": {"hu": "Secure Boot", "en": "Secure Boot"},
+ "sb_lbl_setup": {"hu": "Setup Mode", "en": "Setup Mode"},
+ "sb_lbl_keys": {"hu": "Gépkulcs", "en": "Machine key"},
+ "sb_lbl_signed": {"hu": "Aláírások", "en": "Signatures"},
+ "sb_val_on": {"hu": "bekapcsolva", "en": "enabled"},
+ "sb_val_off": {"hu": "kikapcsolva", "en": "disabled"},
+ "sb_val_yes": {"hu": "igen", "en": "yes"},
+ "sb_val_no": {"hu": "nem", "en": "no"},
+ "sb_val_ok": {"hu": "rendben", "en": "ok"},
+ "sb_val_missing": {"hu": "hiányzik", "en": "missing"},
+ "sb_btn_refresh": {"hu": "Állapot frissítése", "en": "Refresh status"},
+ "sb_btn_setup": {"hu": "Secure Boot beállítása", "en": "Set up Secure Boot"},
+ "sb_btn_resign": {"hu": "Újra-aláírás", "en": "Re-sign"},
+ "sb_pending": {"hu": "Újraindítás szükséges a befejezéshez!", "en": "Reboot required to finish!"},
+ "sb_bl_warn": {"hu": "BitLocker: ha Windows-on be van kapcsolva, előbb indítsd el a Windowst és futtasd: manage-bde -protectors -disable C: -rebootcount 2 — vagy legyen kéznél a helyreállítási kulcs.", "en": "BitLocker: if enabled on Windows, boot Windows first and run: manage-bde -protectors -disable C: -rebootcount 2 — or have the recovery key ready."},
+ "sb_done_title": {"hu": "Secure Boot beállítva", "en": "Secure Boot configured"},
+ "sb_done_msg": {"hu": "Az aláírások és a kulcsok készen vannak.\n\nA BIOS-ban állítsd: Secure Boot → Enabled, majd indítsd újra a gépet.", "en": "Signatures and keys are ready.\n\nIn the BIOS set: Secure Boot → Enabled, then reboot."},
+ "sb_reboot_title": {"hu": "Újraindítás szükséges", "en": "Reboot required"},
+ "sb_reboot_msg": {"hu": "A BIOS-ban töröld a Secure Boot kulcsokat (Clear Secure Boot keys → Setup Mode).\nMentés után indítsd újra a gépet — a beállítás boot után automatikusan befejeződik.\n\nÚjraindítsam most?", "en": "In the BIOS clear the Secure Boot keys (Clear Secure Boot keys → Setup Mode).\nSave and reboot — the setup finishes automatically after boot.\n\nReboot now?"},
+ "sb_err_title": {"hu": "Secure Boot hiba", "en": "Secure Boot error"},
+ "sb_err_msg": {"hu": "A művelet nem sikerült — a részletek a naplóban láthatók.", "en": "The operation failed — details are in the log."},
"tab_all": {"hu": "Összes", "en": "All"},
"tab_installed": {"hu": "Telepített", "en": "Installed"},
"search_placeholder": {"hu": "Keresés…", "en": "Search…"},
@@ -296,9 +309,6 @@ def build_qss() -> str:
"""
-# ─────────────────────────────────────────────────────────────────────────────
-# Adat: katalógus betöltés + telepítettség detektálás
-# ─────────────────────────────────────────────────────────────────────────────
def load_catalog() -> list:
"""app-list.json beolvasása az első létező útvonalról."""
@@ -368,9 +378,6 @@ def is_installed(app: dict, idx: dict) -> bool:
return False
-# ─────────────────────────────────────────────────────────────────────────────
-# Parancs-építés (telepítés / eltávolítás), batch-elve backendenként
-# ─────────────────────────────────────────────────────────────────────────────
def _root_prefix(gui: bool) -> list:
"""GUI -> sudo -S (jelszó stdin-ről), terminál -> sudo, ha már root -> semmi."""
@@ -419,8 +426,6 @@ def plan_commands(apps: list, install: bool, gui: bool) -> list:
if aur:
if install:
- # --answer* nelkul a yay a PKGBUILD-diff/edit prompt-nal orokre
- # varakozik (nincs csatolt terminal a stream_command-hoz)
steps.append((f"AUR: {', '.join(aur)}",
["yay", "-S", "--needed", "--noconfirm",
"--answerclean", "None", "--answerdiff", "None",
@@ -447,10 +452,6 @@ def plan_commands(apps: list, install: bool, gui: bool) -> list:
steps.append((f"flatpak uninstall: {fid}",
["flatpak", "uninstall", "--user", "-y", fid]))
- # Config seedelés: pacman/aur/flatpak-user tipusu appoknal a config_dir/
- # config_dest mezok alapjan bemasoljuk az elore elkeszitett configot a
- # user home-jaba, telepites utan. (script tipusnal ezt a sajat bash
- # script intezi, azoknal nem kell ez a lepes.)
if install:
_home = os.path.expanduser("~")
for a in apps:
@@ -471,10 +472,6 @@ def plan_commands(apps: list, install: bool, gui: bool) -> list:
f"cp {cp_flag} {shlex.quote(str(src))}/. {shlex.quote(dest)}/ && "
f"rm -f {shlex.quote(dest)}/Singleton*"]))
- # Config seedelés (több-utas változat): olyan appoknal, ahol tobb kulon
- # forras/cel par van (pl. PhotoGIMP: GIMP config + .desktop + ikonok
- # kulon-kulon helyre), a "config_mappings" listat hasznaljuk a fenti
- # egyszeru config_dir/config_dest helyett.
if install:
_home = os.path.expanduser("~")
for a in apps:
@@ -496,7 +493,6 @@ def plan_commands(apps: list, install: bool, gui: bool) -> list:
f"cp {cp_flag} {shlex.quote(str(src))}/. {shlex.quote(dest)}/ && "
f"rm -f {shlex.quote(dest)}/Singleton*"]))
- # Script env: a szkript tudja ki a tényleges user (sudo után root fut)
_caller = os.environ.get("USER") or os.environ.get("LOGNAME") or ""
_caller_home = os.path.expanduser("~")
_caller_uid = str(os.getuid())
@@ -547,9 +543,6 @@ def stream_command(label: str, cmd: list, emit, password: str = "") -> bool:
return ok
-# ─────────────────────────────────────────────────────────────────────────────
-# GUI rész (csak ha van PyQt6 / display)
-# ─────────────────────────────────────────────────────────────────────────────
BACKUP_LIST_CANDIDATES = [
_SCRIPT_DIR / "data/backup/backup-paths.json",
@@ -578,7 +571,6 @@ def run_gui() -> int:
from PyQt6.QtCore import Qt, QThread, pyqtSignal
from PyQt6.QtGui import QFont, QFontDatabase
- # ── display font helper (Bebas Neue, fallbackkel) ────────────────────────
def display_font(size: int, weight=QFont.Weight.Normal) -> QFont:
for fam in ("Bebas Neue", "Oswald", "Anton"):
if fam in QFontDatabase.families():
@@ -591,7 +583,6 @@ def run_gui() -> int:
f.setLetterSpacing(QFont.SpacingType.PercentageSpacing, 102)
return f
- # ── háttér worker ────────────────────────────────────────────────────────
class Worker(QThread):
log = pyqtSignal(str)
progress = pyqtSignal(int) # 0..100
@@ -613,7 +604,6 @@ def run_gui() -> int:
self.progress.emit(int((i + 1) / total * 100))
self.done.emit(ok, total)
- # ── egy app sor widget ───────────────────────────────────────────────────
class Row(QFrame):
def __init__(self, app, installed):
super().__init__()
@@ -652,7 +642,6 @@ def run_gui() -> int:
f"color:{C['accent_hi'] if installed else C['text_mut']}; font-size:12px;")
lay.addWidget(status)
- # sorra kattintás is váltja a checkboxot (message tipusnal dialogot mutat)
self.setCursor(Qt.CursorShape.PointingHandCursor)
def mousePressEvent(self, e):
@@ -664,7 +653,34 @@ def run_gui() -> int:
self.cb.toggle()
super().mousePressEvent(e)
- # ── backup worker ────────────────────────────────────────────────────────
+ class SbWorker(QThread):
+ log = pyqtSignal(str)
+ done = pyqtSignal(int)
+
+ def __init__(self, mode, password):
+ super().__init__()
+ self.mode = mode
+ self.password = password
+
+ def run(self):
+ cmd = ["sudo", "-S", "-p", "", "raveos-secureboot-setup", self.mode]
+ self.log.emit(f"$ {' '.join(cmd)}")
+ try:
+ proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
+ stdin=subprocess.PIPE, text=True, bufsize=1)
+ if self.password:
+ proc.stdin.write(self.password + "\n")
+ proc.stdin.flush()
+ proc.stdin.close()
+ except OSError as exc:
+ self.log.emit(f"[HIBA] {exc}")
+ self.done.emit(1)
+ return
+ for line in proc.stdout:
+ self.log.emit(line.rstrip("\n"))
+ proc.wait()
+ self.done.emit(proc.returncode)
+
class BackupWorker(QThread):
log = pyqtSignal(str)
progress = pyqtSignal(int)
@@ -792,7 +808,6 @@ def run_gui() -> int:
except Exception as exc:
self.done.emit(False, str(exc))
- # ── fő ablak ─────────────────────────────────────────────────────────────
class Main(QMainWindow):
def __init__(self, catalog):
super().__init__()
@@ -801,6 +816,7 @@ def run_gui() -> int:
self.idx = installed_index()
self.rows = []
self.worker = None
+ self.sb_worker = None
self.backup_worker = None
self.backup_checkboxes = {} # item_id -> (QCheckBox, abs_path, label, requires_root)
self._sudo_pw = ""
@@ -815,7 +831,6 @@ def run_gui() -> int:
outer.setContentsMargins(0, 0, 0, 0)
outer.setSpacing(0)
- # ── Header ───────────────────────────────────────────────────────
header = QFrame()
header.setObjectName("Header")
hl = QHBoxLayout(header)
@@ -852,6 +867,11 @@ def run_gui() -> int:
self._style_lang_btns()
hl.addSpacing(12)
+ self.btn_sb = QPushButton(tr("nav_sb"))
+ self.btn_sb.clicked.connect(self._go_sb)
+ hl.addWidget(self.btn_sb)
+ hl.addSpacing(8)
+
self.btn_nav = QPushButton(tr("nav_backup"))
self.btn_nav.clicked.connect(self._go_backup)
hl.addWidget(self.btn_nav)
@@ -861,11 +881,9 @@ def run_gui() -> int:
hl.addWidget(ver)
outer.addWidget(header)
- # ── Stack ─────────────────────────────────────────────────────────
self.stack = QStackedWidget()
outer.addWidget(self.stack, 1)
- # ── Oldal 0: Apps ─────────────────────────────────────────────────
apps_page = QWidget()
bl = QVBoxLayout(apps_page)
bl.setContentsMargins(20, 16, 20, 16)
@@ -935,7 +953,6 @@ def run_gui() -> int:
self.stack.addWidget(apps_page)
- # ── Oldal 1: Backup / Restore ─────────────────────────────────────
bk_page = QWidget()
bbl = QVBoxLayout(bk_page)
bbl.setContentsMargins(20, 16, 20, 16)
@@ -987,10 +1004,75 @@ def run_gui() -> int:
self.stack.addWidget(bk_page)
+ sb_page = QWidget()
+ sbl = QVBoxLayout(sb_page)
+ sbl.setContentsMargins(20, 16, 20, 16)
+ sbl.setSpacing(12)
+
+ self.sb_desc = QLabel(tr("sb_desc"))
+ self.sb_desc.setWordWrap(True)
+ self.sb_desc.setStyleSheet(f"color:{C['text_dim']};")
+ sbl.addWidget(self.sb_desc)
+
+ self.sb_lbls = {}
+ self.sb_vals = {}
+ srow1 = QHBoxLayout()
+ srow1.setSpacing(8)
+ srow2 = QHBoxLayout()
+ srow2.setSpacing(8)
+ for i, key in enumerate(("sb_lbl_sb", "sb_lbl_setup", "sb_lbl_keys", "sb_lbl_signed")):
+ lbl = QLabel(tr(key))
+ lbl.setStyleSheet(f"color:{C['text_dim']};")
+ val = QLabel("-")
+ val.setStyleSheet(f"color:{C['text']}; font-weight:600;")
+ self.sb_lbls[key] = lbl
+ self.sb_vals[key] = val
+ box = QHBoxLayout()
+ box.setSpacing(6)
+ box.addWidget(lbl)
+ box.addWidget(val)
+ (srow1 if i < 2 else srow2).addLayout(box)
+ (srow1 if i < 2 else srow2).addSpacing(24)
+ srow1.addStretch(1)
+ srow2.addStretch(1)
+ sbl.addLayout(srow1)
+ sbl.addLayout(srow2)
+
+ self.sb_warn = QLabel(tr("sb_bl_warn"))
+ self.sb_warn.setWordWrap(True)
+ self.sb_warn.setStyleSheet("color:#d0a24c;")
+ sbl.addWidget(self.sb_warn)
+
+ self.sb_pending = QLabel(tr("sb_pending"))
+ self.sb_pending.setStyleSheet("color:#d0a24c; font-weight:700;")
+ self.sb_pending.hide()
+ sbl.addWidget(self.sb_pending)
+
+ sb_row = QHBoxLayout()
+ sb_row.setSpacing(8)
+ self.btn_sb_refresh = QPushButton(tr("sb_btn_refresh"))
+ self.btn_sb_refresh.clicked.connect(self._sb_refresh)
+ self.btn_sb_setup = QPushButton(tr("sb_btn_setup"))
+ self.btn_sb_setup.setObjectName("Primary")
+ self.btn_sb_setup.clicked.connect(self._sb_setup)
+ self.btn_sb_resign = QPushButton(tr("sb_btn_resign"))
+ self.btn_sb_resign.clicked.connect(self._sb_resign)
+ sb_row.addWidget(self.btn_sb_refresh)
+ sb_row.addWidget(self.btn_sb_setup)
+ sb_row.addWidget(self.btn_sb_resign)
+ sb_row.addStretch(1)
+ sbl.addLayout(sb_row)
+
+ self.sb_log = QPlainTextEdit()
+ self.sb_log.setObjectName("Log")
+ self.sb_log.setReadOnly(True)
+ sbl.addWidget(self.sb_log, 1)
+
+ self.stack.addWidget(sb_page)
+
self.build_rows()
self.apply_filter()
- # ── nyelv ─────────────────────────────────────────────────────────────
def _style_lang_btns(self):
active = (
f"QPushButton {{ background: {C['accent']}; color: #15240f;"
@@ -1016,9 +1098,23 @@ def run_gui() -> int:
self._retranslate_all()
def _retranslate_all(self):
- on_backup = self.stack.currentIndex() == 1
- self.header_sep.setText(tr("header_backup") if on_backup else tr("header_installer"))
- self.btn_nav.setText(tr("nav_back") if on_backup else tr("nav_backup"))
+ idx = self.stack.currentIndex()
+ if idx == 1:
+ self.header_sep.setText(tr("header_backup"))
+ elif idx == 2:
+ self.header_sep.setText(tr("header_sb"))
+ else:
+ self.header_sep.setText(tr("header_installer"))
+ self.btn_nav.setText(tr("nav_back") if idx != 0 else tr("nav_backup"))
+ self.btn_sb.setText(tr("nav_sb"))
+ self.sb_desc.setText(tr("sb_desc"))
+ for key, lbl in self.sb_lbls.items():
+ lbl.setText(tr(key))
+ self.sb_warn.setText(tr("sb_bl_warn"))
+ self.sb_pending.setText(tr("sb_pending"))
+ self.btn_sb_refresh.setText(tr("sb_btn_refresh"))
+ self.btn_sb_setup.setText(tr("sb_btn_setup"))
+ self.btn_sb_resign.setText(tr("sb_btn_resign"))
self.tab_all.setText(tr("tab_all"))
self.tab_inst.setText(tr("tab_installed"))
self.search.setPlaceholderText(tr("search_placeholder"))
@@ -1042,7 +1138,6 @@ def run_gui() -> int:
self.scroll.verticalScrollBar().setValue(keep_scroll)
self.build_backup_items()
- # ── backup lista építés (nyelvváltáskor is újraépül) ────────────────────
def build_backup_items(self):
prev_checked = {iid: cb.isChecked() for iid, (cb, _, _, _) in self.backup_checkboxes.items()}
while self.bk_vl.count():
@@ -1098,13 +1193,11 @@ def run_gui() -> int:
self.bk_vl.addWidget(brow)
self.bk_vl.addStretch(1)
- # ── frissítés ─────────────────────────────────────────────────────────
def _refresh_and_filter(self):
self.idx = installed_index()
self.build_rows()
self.apply_filter()
- # ── navigáció ─────────────────────────────────────────────────────────
def _go_backup(self):
self.stack.setCurrentIndex(1)
self.header_sep.setText(tr("header_backup"))
@@ -1119,7 +1212,99 @@ def run_gui() -> int:
self.btn_nav.clicked.disconnect()
self.btn_nav.clicked.connect(self._go_backup)
- # ── lista építés ──────────────────────────────────────────────────────
+ def _go_sb(self):
+ self.stack.setCurrentIndex(2)
+ self.header_sep.setText(tr("header_sb"))
+ self.btn_nav.setText(tr("nav_back"))
+ self.btn_nav.clicked.disconnect()
+ self.btn_nav.clicked.connect(self._go_apps)
+ self._sb_refresh()
+
+ def _sb_refresh(self):
+ self.sb_log.clear()
+ import time
+ out = ""
+ cached = self._sudo_pw if (self._sudo_pw and (time.time() - self._sudo_pw_ts) < 300) else ""
+ try:
+ for cmd in (["raveos-secureboot-setup", "--status"],
+ ["sudo", "-n", "raveos-secureboot-setup", "--status"]):
+ res = subprocess.run(cmd, capture_output=True, text=True, timeout=15)
+ out = res.stdout
+ if out.strip():
+ break
+ if not out.strip() and cached:
+ res = subprocess.run(["sudo", "-S", "-p", "", "raveos-secureboot-setup", "--status"],
+ input=cached + "\n", capture_output=True, text=True, timeout=15)
+ out = res.stdout
+ except (OSError, subprocess.TimeoutExpired) as exc:
+ self.sb_log.appendPlainText(f"[HIBA] {exc}")
+ return
+ data = {}
+ for line in out.splitlines():
+ if "=" in line and not line.startswith("["):
+ k, _, val = line.partition("=")
+ data[k.strip()] = val.strip()
+ elif line.strip():
+ self.sb_log.appendPlainText(line)
+ if not data:
+ if not out.strip():
+ self.sb_log.appendPlainText("[raveos-sb] Az allapot nem olvashato.")
+ return
+ on = lambda x: tr("sb_val_on") if x == "1" else tr("sb_val_off")
+ yes = lambda x: tr("sb_val_yes") if x == "1" else tr("sb_val_no")
+ ok = lambda x: tr("sb_val_ok") if x == "1" else tr("sb_val_missing")
+ self.sb_vals["sb_lbl_sb"].setText(on(data.get("secureboot", "?")))
+ self.sb_vals["sb_lbl_setup"].setText(yes(data.get("setupmode", "?")))
+ self.sb_vals["sb_lbl_keys"].setText(ok(data.get("keys", "0")))
+ self.sb_vals["sb_lbl_signed"].setText(ok(data.get("signed", "0")))
+ self.sb_pending.setVisible(data.get("pending") == "1")
+
+ def _sb_run(self, mode):
+ if self.sb_worker and self.sb_worker.isRunning():
+ return
+ import time
+ if os.geteuid() != 0:
+ if self._sudo_pw and (time.time() - self._sudo_pw_ts) < 300:
+ password = self._sudo_pw
+ else:
+ password = self._ask_password()
+ if not password:
+ return
+ self._sudo_pw = password
+ self._sudo_pw_ts = time.time()
+ else:
+ password = ""
+ self.sb_log.clear()
+ self.btn_sb_setup.setEnabled(False)
+ self.btn_sb_resign.setEnabled(False)
+ self.btn_sb_refresh.setEnabled(False)
+ self.sb_worker = SbWorker(mode, password)
+ self.sb_worker.log.connect(self.sb_log.appendPlainText)
+ self.sb_worker.done.connect(self._sb_finished)
+ self.sb_worker.start()
+
+ def _sb_setup(self):
+ self._sb_run("--setup")
+
+ def _sb_resign(self):
+ self._sb_run("--resign")
+
+ def _sb_finished(self, rc):
+ self.btn_sb_setup.setEnabled(True)
+ self.btn_sb_resign.setEnabled(True)
+ self.btn_sb_refresh.setEnabled(True)
+ self._sb_refresh()
+ if rc == 0:
+ QMessageBox.information(self, tr("sb_done_title"), tr("sb_done_msg"))
+ elif rc == 10:
+ answer = QMessageBox.question(
+ self, tr("sb_reboot_title"), tr("sb_reboot_msg"),
+ QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No)
+ if answer == QMessageBox.StandardButton.Yes:
+ subprocess.Popen(["systemctl", "reboot"])
+ else:
+ QMessageBox.critical(self, tr("sb_err_title"), tr("sb_err_msg"))
+
def build_rows(self):
for r in self.rows:
r.setParent(None)
@@ -1154,7 +1339,6 @@ def run_gui() -> int:
return [r.app for r in self.rows
if r.cb.isChecked() and r.isVisible() and not r.is_message]
- # ── app akció ─────────────────────────────────────────────────────────
def _ask_password(self) -> str:
"""Jelszó dialog - egyszer fut az akció elején. Üres string = megszakítva."""
err_msg = ""
@@ -1221,7 +1405,6 @@ def run_gui() -> int:
return pw
err_msg = tr("dlg_pw_wrong_err")
except Exception:
- # Ha az ellenőrzés nem sikerül, elfogadjuk és hagyjuk a parancsot hibázni
return pw
def run_action(self, install: bool):
@@ -1236,7 +1419,6 @@ def run_gui() -> int:
self.log.appendPlainText(tr("log_nothing_to_do"))
return
- # Jelszó - 5 percen belül megjegyzett jelszót újra felhasználjuk
import time
if os.geteuid() != 0:
if self._sudo_pw and (time.time() - self._sudo_pw_ts) < 300:
@@ -1281,7 +1463,6 @@ def run_gui() -> int:
self.search.setEnabled(not busy)
self.cat.setEnabled(not busy)
- # ── backup akciók ─────────────────────────────────────────────────────
def _bk_browse(self):
path, _ = QFileDialog.getSaveFileName(
self, tr("filedialog_caption"), str(Path.home()), "Tar archive (*.tar.gz)")
@@ -1365,7 +1546,6 @@ def run_gui() -> int:
self.bk_log.appendPlainText(f"\n{tr('bk_result_ok') if ok else tr('bk_result_err')}: {msg}")
self._bk_set_busy(False)
- # ── alkalmazás bootstrap ─────────────────────────────────────────────────
if shutil.which("hyprctl"):
subprocess.run(
["hyprctl", "keyword", "windowrulev2",
@@ -1390,9 +1570,6 @@ def run_gui() -> int:
return app.exec()
-# ─────────────────────────────────────────────────────────────────────────────
-# CLI rész
-# ─────────────────────────────────────────────────────────────────────────────
def _resolve(names, catalog):
by = {a["name"].lower(): a for a in catalog}
@@ -1425,9 +1602,6 @@ def cli_action(names, catalog, install: bool):
print("Nincs végrehajtható lépés.")
return 1
- # sudo -S jelszo nelkul a stdin pipe nyitva marad iras/EOF nelkul,
- # es a folyamat orokre lefagy - a GUI-nak van jelszo dialogja, a
- # CLI-nek eddig nem volt.
password = ""
if os.geteuid() != 0 and any(
len(cmd) >= 2 and cmd[0] == "sudo" and cmd[1] == "-S" for _, cmd in steps
@@ -1457,7 +1631,6 @@ def main():
cli_mode = args.list or args.installed or args.install or args.remove
if not cli_mode:
- # GUI-t user-ként indítsd (Wayland) - root GUI ne!
if os.geteuid() == 0:
print("Figyelem: a GUI-t NE rootként indítsd. "
"Futtasd sima userként, a jogot pkexec kéri majd.")
diff --git a/raveos-app-installer/raveos-secureboot-setup b/raveos-app-installer/raveos-secureboot-setup
new file mode 100644
index 0000000..a02b046
--- /dev/null
+++ b/raveos-app-installer/raveos-secureboot-setup
@@ -0,0 +1,313 @@
+#!/bin/bash
+set -u
+
+GLOBAL_GUID="8be4df61-93ca-11d2-aa0d-00e098032b8c"
+DB_GUID="d719b2cb-3d3a-4596-a3bc-dad00e67656f"
+
+SB_DIR=/usr/share/raveos/secureboot
+MS="$SB_DIR/ms"
+MACHINE_DIR=/etc/raveos/secureboot
+STATE=/var/lib/raveos-sb
+RESUME_UNIT=raveos-sb-resume.service
+WORK=""
+
+log() { echo "[raveos-sb] $*"; }
+
+cleanup() { [ -n "$WORK" ] && rm -rf "$WORK"; }
+trap cleanup EXIT
+
+efi_var() {
+ od -An -t u1 /sys/firmware/efi/efivars/"$1"-* 2>/dev/null | awk '{print $5}'
+}
+
+status_cmd() {
+ if [ ! -d /sys/firmware/efi/efivars ]; then
+ log "Nem UEFI rendszer - Secure Boot nem elerheto."
+ return 1
+ fi
+ local sb sm keys tools signed
+ sb=$(efi_var SecureBoot)
+ sm=$(efi_var SetupMode)
+ keys=0
+ [ -f "$MACHINE_DIR/machine.pem" ] && keys=1
+ tools=0
+ command -v sbsign >/dev/null 2>&1 && tools=1
+ signed=0
+ if [ "$keys" = "1" ] && command -v sbverify >/dev/null 2>&1; then
+ signed=1
+ for f in /boot/EFI/systemd/systemd-bootx64.efi /boot/EFI/BOOT/BOOTX64.EFI /boot/vmlinuz-*; do
+ [ -f "$f" ] || continue
+ sbverify --cert "$MACHINE_DIR/machine.pem" "$f" >/dev/null 2>&1 || signed=0
+ done
+ fi
+ echo "uefi=1"
+ echo "secureboot=${sb:-?}"
+ echo "setupmode=${sm:-?}"
+ echo "keys=$keys"
+ echo "tools=$tools"
+ echo "signed=$signed"
+ if [ -f "$STATE/pending" ]; then echo "pending=1"; else echo "pending=0"; fi
+ log "SecureBoot=${sb:-?} SetupMode=${sm:-?} gepkulcs=$keys alairasok=$signed"
+}
+
+deps_cmd() {
+ local need=()
+ local p
+ for p in sbsigntools efitools openssl zstd; do
+ pacman -Qq "$p" >/dev/null 2>&1 || need+=("$p")
+ done
+ if [ "${#need[@]}" -gt 0 ]; then
+ log "Hianyzo eszkozok telepitese: ${need[*]}"
+ pacman -S --noconfirm "${need[@]}" || return 1
+ fi
+}
+
+keygen_cmd() {
+ if [ -f "$MACHINE_DIR/machine.key" ]; then
+ log "A gepkulcs mar letezik."
+ return 0
+ fi
+ install -d -m 711 "$MACHINE_DIR"
+ openssl req -newkey rsa:2048 -nodes -keyout "$MACHINE_DIR/machine.key" -x509 -days 3650 \
+ -out "$MACHINE_DIR/machine.pem" \
+ -subj "/O=RaveOS/CN=RaveOS Machine Key" \
+ -addext "basicConstraints=critical,CA:TRUE" \
+ -addext "keyUsage=critical,digitalSignature,keyCertSign,cRLSign" \
+ -addext "extendedKeyUsage=codeSigning" 2>/dev/null || {
+ log "HIBA: gepkulcs generalas sikertelen"
+ return 1
+ }
+ chmod 600 "$MACHINE_DIR/machine.key"
+ chmod 644 "$MACHINE_DIR/machine.pem"
+ log "Gepkulcs generalva: CN=RaveOS Machine Key"
+}
+
+signfile_path() {
+ local c
+ for c in /usr/lib/modules/*/build/scripts/sign-file /usr/src/linux/scripts/sign-file; do
+ [ -x "$c" ] && { echo "$c"; return 0; }
+ done
+ return 1
+}
+
+sign_one() {
+ local key="$1" cert="$2" f="$3"
+ sbverify --cert "$cert" "$f" >/dev/null 2>&1 && return 0
+ if sbsign --key "$key" --cert "$cert" --output "$f.signed" "$f" 2>/dev/null; then
+ mv "$f.signed" "$f"
+ log "alairva: $f"
+ return 0
+ fi
+ log "FIGYELEM: nem sikerult alairni: $f"
+ return 1
+}
+
+sign_cmd() {
+ command -v sbsign >/dev/null 2>&1 || { log "HIBA: sbsign nem elerheto"; return 1; }
+ local key="$MACHINE_DIR/machine.key" cert="$MACHINE_DIR/machine.pem"
+ local n=0 f signfile t
+ for f in /boot/EFI/systemd/systemd-bootx64.efi /boot/EFI/BOOT/BOOTX64.EFI /boot/vmlinuz-* /boot/memtest86+/memtest.efi; do
+ [ -f "$f" ] || continue
+ sign_one "$key" "$cert" "$f" && n=$((n + 1))
+ done
+ signfile=$(signfile_path) || signfile=""
+ if [ -n "$signfile" ]; then
+ install -m 755 "$signfile" /usr/local/bin/raveos-sign-file
+ local d sub m
+ for d in /usr/lib/modules/*/; do
+ for sub in extramodules updates/dkms extras; do
+ [ -d "${d}${sub}" ] || continue
+ while IFS= read -r -d '' m; do
+ if modinfo -F signer "$m" 2>/dev/null | grep -q "RaveOS Machine Key"; then
+ continue
+ fi
+ case "$m" in
+ *.ko)
+ /usr/local/bin/raveos-sign-file sha512 "$key" "$cert" "$m" >/dev/null 2>&1 && n=$((n + 1))
+ ;;
+ *.ko.zst)
+ t=$(mktemp -d)
+ if zstd -q -d -c "$m" > "$t/m.ko" 2>/dev/null &&
+ /usr/local/bin/raveos-sign-file sha512 "$key" "$cert" "$t/m.ko" >/dev/null 2>&1 &&
+ zstd -q -f -o "$m" "$t/m.ko" 2>/dev/null; then
+ n=$((n + 1))
+ fi
+ rm -rf "$t"
+ ;;
+ esac
+ done < <(find "${d}${sub}" -type f \( -name '*.ko' -o -name '*.ko.zst' \) -print0 2>/dev/null)
+ done
+ done
+ else
+ log "FIGYELEM: sign-file nem talalhato (kernel-headers nelkul a modulok kimaradnak)"
+ fi
+ log "Alairt elemek: $n"
+}
+
+hook_cmd() {
+ install -d -m 755 /usr/local/bin /etc/pacman.d/hooks
+ install -m 755 "$SB_DIR/installed/raveos-sb-sign-local.sh" /usr/local/bin/raveos-sb-sign-local.sh
+ install -m 644 "$SB_DIR/installed/zz-raveos-sb-sign.hook" /etc/pacman.d/hooks/zz-raveos-sb-sign.hook
+ log "Pacman hook + helyi alairo telepitve."
+}
+
+verify_cmd() {
+ local cert="$MACHINE_DIR/machine.pem" bad=0 f
+ for f in /boot/EFI/systemd/systemd-bootx64.efi /boot/EFI/BOOT/BOOTX64.EFI /boot/vmlinuz-*; do
+ [ -f "$f" ] || continue
+ sbverify --cert "$cert" "$f" >/dev/null 2>&1 || { bad=1; log "NINCS alairva: $f"; }
+ done
+ [ "$bad" = "0" ] && log "Alairas-ellenorzes: rendben."
+ if command -v efi-readvar >/dev/null 2>&1; then
+ log "Firmware db tartalom:"
+ efi-readvar -v db 2>/dev/null | grep -E "CN *=|O *=" | head -14
+ fi
+}
+
+cert_to_esl() {
+ cert-to-efi-sig-list "$1" "$2" 2>/dev/null || return 1
+ local sz
+ sz=$(stat -c %s "$2" 2>/dev/null || echo 0)
+ [ "$sz" -gt 100 ]
+}
+
+build_db_esl() {
+ local out="$1" f
+ cert_to_esl "$SB_DIR/db.pem" "$WORK/raveos-db.esl" || return 1
+ cert_to_esl "$MACHINE_DIR/machine.pem" "$WORK/machine.esl" || return 1
+ cat "$WORK/raveos-db.esl" > "$out"
+ for f in "$MS/MicCorUEFCA2011_2011-06-27.pem" "$MS/MicWinProPCA2011_2011-10-19.pem" \
+ "$MS/microsoft uefi ca 2023.pem" "$MS/windows uefi ca 2023.pem" \
+ "$MS/microsoft option rom uefi ca 2023.pem"; do
+ [ -f "$f" ] || continue
+ cert_to_esl "$f" "$WORK/ms-extra.esl" && cat "$WORK/ms-extra.esl" >> "$out"
+ done
+ cat "$WORK/machine.esl" >> "$out"
+}
+
+build_kek_esl() {
+ local out="$1" f
+ cert_to_esl "$SB_DIR/KEK.pem" "$WORK/raveos-kek.esl" || return 1
+ cat "$WORK/raveos-kek.esl" > "$out"
+ for f in "$MS/MicCorKEKCA2011_2011-06-24.pem" "$MS/microsoft corporation kek 2k ca 2023.pem"; do
+ [ -f "$f" ] || continue
+ cert_to_esl "$f" "$WORK/ms-extra.esl" && cat "$WORK/ms-extra.esl" >> "$out"
+ done
+}
+
+clear_var() {
+ local name="$1" guid="$2" f
+ f="/sys/firmware/efi/efivars/${name}-${guid}"
+ [ -e "$f" ] || return 0
+ chattr -i "$f" 2>/dev/null || true
+ rm -f "$f" 2>/dev/null || log "FIGYELEM: ${name} regi valtozo torlese nem sikerult"
+}
+
+enroll_cmd() {
+ local sm t
+ sm=$(efi_var SetupMode)
+ if [ "${sm:-0}" != "1" ]; then
+ log "A firmware nincs Setup Mode-ban."
+ return 10
+ fi
+ for t in cert-to-efi-sig-list efi-updatevar; do
+ command -v "$t" >/dev/null 2>&1 || { log "HIBA: $t nem elerheto (efitools)"; return 1; }
+ done
+ [ -f "$SB_DIR/PK.auth" ] || { log "HIBA: hianyzik a PK.auth"; return 1; }
+
+ WORK=$(mktemp -d)
+ build_db_esl "$WORK/db.esl" || { log "HIBA: db ESL epites"; return 1; }
+ build_kek_esl "$WORK/KEK.esl" || { log "HIBA: KEK ESL epites"; return 1; }
+
+ log "Meglevo PK/KEK/db valtozok torlese..."
+ clear_var PK "$GLOBAL_GUID"
+ clear_var KEK "$GLOBAL_GUID"
+ clear_var db "$DB_GUID"
+
+ log "db irasa (RaveOS + Microsoft + gepkulcs)..."
+ efi-updatevar -e -f "$WORK/db.esl" db || { log "HIBA: db iras"; return 1; }
+
+ log "KEK irasa (RaveOS + Microsoft)..."
+ efi-updatevar -e -f "$WORK/KEK.esl" KEK || { log "HIBA: KEK iras"; return 1; }
+
+ log "PK irasa (elore alairt PK.auth)..."
+ efi-updatevar -f "$SB_DIR/PK.auth" PK || { log "HIBA: PK iras"; return 1; }
+
+ log "Kulcsok telepitve a firmware-be."
+}
+
+setup_cmd() {
+ status_cmd || return 1
+ log "FIGYELEM (BitLocker): ha a Windowson BitLocker van, elotte inditsd el a Windowst es futtasd:"
+ log " manage-bde -protectors -disable C: -rebootcount 2"
+ log " vagy legyen keznel a 48 jegyu helyreallitasi kulcs."
+ deps_cmd || return 1
+ keygen_cmd || return 1
+ sign_cmd || return 1
+ hook_cmd || return 1
+ install -d -m 755 "$STATE"
+ local rc
+ enroll_cmd
+ rc=$?
+ if [ "$rc" = "0" ]; then
+ verify_cmd
+ rm -f "$STATE/pending"
+ log "KESZ. A BIOS-ban allitsd: Secure Boot -> Enabled, majd ujrainditas."
+ return 0
+ fi
+ if [ "$rc" = "10" ]; then
+ install -m 644 "$SB_DIR/installed/raveos-sb-resume.service" /etc/systemd/system/"$RESUME_UNIT"
+ systemctl daemon-reload
+ systemctl enable "$RESUME_UNIT" >/dev/null 2>&1
+ touch "$STATE/pending"
+ log "A BIOS-ban: Secure Boot -> Key Management -> Clear Secure Boot keys (Setup Mode),"
+ log "ments, majd inditsd ujra a gepet. Boot utan a folyamat magatol befejezodik."
+ return 10
+ fi
+ return "$rc"
+}
+
+resume_cmd() {
+ [ -f "$STATE/pending" ] || exit 0
+ if enroll_cmd; then
+ verify_cmd
+ rm -f "$STATE/pending"
+ date -Is > "$STATE/done"
+ systemctl disable "$RESUME_UNIT" >/dev/null 2>&1
+ log "Secure Boot beallitas befejezve. A BIOS-ban: Secure Boot -> Enabled."
+ exit 0
+ fi
+ exit 1
+}
+
+need_root() {
+ if [ "$(id -u)" != "0" ]; then
+ echo "[raveos-sb] Root jogosultsag szukseges." >&2
+ exit 1
+ fi
+}
+
+case "${1:-}" in
+ --status)
+ status_cmd
+ ;;
+ --verify)
+ verify_cmd
+ ;;
+ --setup)
+ need_root
+ setup_cmd
+ ;;
+ --resume)
+ need_root
+ resume_cmd
+ ;;
+ --resign)
+ need_root
+ keygen_cmd && sign_cmd && verify_cmd
+ ;;
+ *)
+ echo "hasznalat: raveos-secureboot-setup --status|--setup|--resume|--resign|--verify" >&2
+ exit 2
+ ;;
+esac
diff --git a/raveos-app-installer/secureboot/KEK.pem b/raveos-app-installer/secureboot/KEK.pem
new file mode 100644
index 0000000..5a49691
--- /dev/null
+++ b/raveos-app-installer/secureboot/KEK.pem
@@ -0,0 +1,20 @@
+-----BEGIN CERTIFICATE-----
+MIIDVzCCAj+gAwIBAgIUcKsPl6DDusNNC3vQNBhvFjw+vIwwDQYJKoZIhvcNAQEL
+BQAwMzEPMA0GA1UECgwGUmF2ZU9TMSAwHgYDVQQDDBdSYXZlT1MgS2V5IEV4Y2hh
+bmdlIEtleTAeFw0yNjEwMDIyMTU5MTNaFw0zNjA5MjkyMTU5MTNaMDMxDzANBgNV
+BAoMBlJhdmVPUzEgMB4GA1UEAwwXUmF2ZU9TIEtleSBFeGNoYW5nZSBLZXkwggEi
+MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrz7sOnYkci8zut/0BmGbdftPk
+3cSBn3/rOaY4RMgQ8gsntAQRRnOp1NHsu87/9u0qk+n4qgqX/EZBRYZozfEI3Xu5
+4h0LbZwsOFItaellUEw+Jfviz1ZCGj6cPRqtS/rZNMd2/6qdFc+hnz4FjRHX6cYM
+WWuYBhUgjSbGncsh0qWg0BLVzwniD9rO/NQ7nCP2ZNnkllG9HRffIFzJjmP1/DfN
+jXorb4egi7EFPFFgddB4wM6DeXd8GhosJD1ilW2W2Ww8Xu/R9IXTSOefG3sZLZKf
+jaj7kmYNmkRrr0aQ2pSwC4lDsba7Yob6zsuDMyPjbSiPqTzZ12RXV7UdKN47AgMB
+AAGjYzBhMB0GA1UdDgQWBBTVBDvn/UGvO9uqzh6Yb7Lw59LvhzAfBgNVHSMEGDAW
+gBTVBDvn/UGvO9uqzh6Yb7Lw59LvhzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB
+/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAQEAFhnk0GsalDm66gp+yrWTiP/9vVny
+RD3RdryYxTcpPAjRAmmAdgPGE6IxX5cfkgYw+OdvBmDJah4p9Z945NF3Emjm3xlY
+2RmDI4IGeBTBKKt03cx69fdvUyuQAqx9mBoGywolUk3mWi8LK2YLU0NPuKCuduw1
+UFw5NEkwJg9Awo0YKTZHxMrHkftXY5CAUi6H0VeYJlpMiaRPInEYIYJuMVEWFaL4
+wsFC6pTHwYsMH9yrijzcMQ2PSZeZi8jGPCG4LifVzv/VwHxgwvK9Byy5yVvFvVCT
+h2A0T27Qxf23Xbu/wh/rgaM/cSg8gsFidqyTEyeCEDYyxSIk1lzsuT+zrw==
+-----END CERTIFICATE-----
diff --git a/raveos-app-installer/secureboot/PK.auth b/raveos-app-installer/secureboot/PK.auth
new file mode 100644
index 0000000..b546b2c
--- /dev/null
+++ b/raveos-app-installer/secureboot/PK.auth
Binary files differ
diff --git a/raveos-app-installer/secureboot/PK.pem b/raveos-app-installer/secureboot/PK.pem
new file mode 100644
index 0000000..558c178
--- /dev/null
+++ b/raveos-app-installer/secureboot/PK.pem
@@ -0,0 +1,20 @@
+-----BEGIN CERTIFICATE-----
+MIIDTzCCAjegAwIBAgIUTwsILq1KfHS0nLE9ylandBBWErcwDQYJKoZIhvcNAQEL
+BQAwLzEPMA0GA1UECgwGUmF2ZU9TMRwwGgYDVQQDDBNSYXZlT1MgUGxhdGZvcm0g
+S2V5MB4XDTI2MTAwMjIxNTkxM1oXDTM2MDkyOTIxNTkxM1owLzEPMA0GA1UECgwG
+UmF2ZU9TMRwwGgYDVQQDDBNSYXZlT1MgUGxhdGZvcm0gS2V5MIIBIjANBgkqhkiG
+9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0BfhuL/qkkT2w52O+lDV1UebAJvWT1six9MJ
+pbxbO8NVhvQnwSK2mixYhvfOQVctW7ww7pN6eFk3e/j3IyWUHDhUZbwA4/4d6TpM
+MJQoLkfNN/Xa5+eNKWGFaOQOQ+qDAPy9rNYvqHPCS8f9pEOsLFW7vhlTsmtr3qeX
+E2rLXPVdQmLuzsKTvHbKWbI4ofxqBU44TAU0FVXAaC5OWDSwYuRwr0WZgFXxnn2e
+G4qA7/Uix8esq6eLR+mYDK63w2iMnraHmXiCcK5W+2jDflkns87EeKRJpWAqleUI
+L3LDotB/TzjM59Nx5QFAGho42qMS46ea8oluAXZTs+lWSFdd3wIDAQABo2MwYTAd
+BgNVHQ4EFgQUtFZf8lEVkLs+PQe3U3LFwExzuTkwHwYDVR0jBBgwFoAUtFZf8lEV
+kLs+PQe3U3LFwExzuTkwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYw
+DQYJKoZIhvcNAQELBQADggEBAA6zG2QTdZUsgKrhLMabO5exce7yGuhsFB0uRe2F
+ooa6RfswSRe4QNUdnAcLNsqSNMRAJ4Pboz7bi2zp4QPkZh92EADG/UWUXQJEzl25
+s8QsIJAr88Qf1fXG07kz0JBBh1A7MzoSaNZ4JLdoovAFkZuG7pHIT4VxnqpzYS2c
+0w2EqPtqubTzPqt6wZ191QtPp1Jif6WL95VapGVpqGzQKo6msirdNcGrIX0JR7Lm
+CrmIkh5HogWYzY3YYmEbjbM5uK0019NZg5vAmLCy6P6SHq5+feUd1ae02EfW0FTa
+udszl9fXtWlmoioffvRvpZ7VBXXPnXv7Ca6nDxgEVAjNYgg=
+-----END CERTIFICATE-----
diff --git a/raveos-app-installer/secureboot/db.pem b/raveos-app-installer/secureboot/db.pem
new file mode 100644
index 0000000..c9ed693
--- /dev/null
+++ b/raveos-app-installer/secureboot/db.pem
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDYjCCAkqgAwIBAgIUapoezG6LBdbRhKoNniRol3q6Ui4wDQYJKoZIhvcNAQEL
+BQAwLjEPMA0GA1UECgwGUmF2ZU9TMRswGQYDVQQDDBJSYXZlT1MgU2VjdXJlIEJv
+b3QwHhcNMjYxMDAyMjE1OTEzWhcNMzYwOTI5MjE1OTEzWjAuMQ8wDQYDVQQKDAZS
+YXZlT1MxGzAZBgNVBAMMElJhdmVPUyBTZWN1cmUgQm9vdDCCASIwDQYJKoZIhvcN
+AQEBBQADggEPADCCAQoCggEBAJjE+etmu0Ev7chkgiih4D2AZ02+W9xzp+t8dEBC
+P1Sw4xXXG56jBvPzDC48F4u4GZLu/DSDMfpXqg6AvVVaXRXE48E2hIRMCshoLjId
+xkl+cGFQ2KvGo+hFItftq8IV1hU0zqtKfxa+eygklim1bjhB6jBsm9bjstbQ/fl3
+j2vPw1yTmpwgx6NgfFLtrXeZ1KGKIAo/kImiqStPyh5cWH72CSG6ppYYiaW5sx+j
+f0IqHsyllX/Hoii4NXjAmmTeRXk0c8Mj8B8RZBAx9V3m144j5+z2jRbvYElWxmwU
+k1m6VA9x3UZXZxiJ9BwwaL+8TK9UNS8QhOZ+BF5rQjbaeScCAwEAAaN4MHYwHQYD
+VR0OBBYEFI/b7ftnyYNFrGMT/WFuwopejtdYMB8GA1UdIwQYMBaAFI/b7ftnyYNF
+rGMT/WFuwopejtdYMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMBMG
+A1UdJQQMMAoGCCsGAQUFBwMDMA0GCSqGSIb3DQEBCwUAA4IBAQATWkIFkjetX/eQ
+Mas/kADYYOeOcTZ/N4ha56aDYicEs2g+jUGSzUBvELhBLLM0TVIn/Qrej175sBox
+icwtQJuIUJdZauF8tf217JT+NFRjwAaW7DGdQpeMTLSP5ijhD1XoX8Yp0/00bJiK
+/ZjP1CWCgYlJYJyKmU8a0cPPvTWMaL8e8mT/yHvzVrBfUyJrZh9wWJmnym43Rt8X
+IuMkuORXy32873J3KOYhVZLZ+o//LDfpAzohDagZaFM5oiXKG24P/mbSAN6HQuki
+Q5qh4lr5P4afJPdjiA41sT8Tz/xhRlAGF06KfUXcWKX5qA8+HSb5lo0EapEWEQWC
+KPLgKAk1
+-----END CERTIFICATE-----
diff --git a/raveos-app-installer/secureboot/installed/raveos-sb-resume.service b/raveos-app-installer/secureboot/installed/raveos-sb-resume.service
new file mode 100644
index 0000000..d6005b6
--- /dev/null
+++ b/raveos-app-installer/secureboot/installed/raveos-sb-resume.service
@@ -0,0 +1,7 @@
+[Unit]
+Description=RaveOS Secure Boot beallitas befejezese
+[Service]
+Type=oneshot
+ExecStart=/usr/bin/raveos-secureboot-setup --resume
+[Install]
+WantedBy=multi-user.target
diff --git a/raveos-app-installer/secureboot/installed/raveos-sb-sign-local.sh b/raveos-app-installer/secureboot/installed/raveos-sb-sign-local.sh
new file mode 100755
index 0000000..af20118
--- /dev/null
+++ b/raveos-app-installer/secureboot/installed/raveos-sb-sign-local.sh
@@ -0,0 +1,50 @@
+#!/bin/bash
+set -u
+
+KEY=/etc/raveos/secureboot/machine.key
+CERT=/etc/raveos/secureboot/machine.pem
+SIGNFILE=/usr/local/bin/raveos-sign-file
+[[ -f "$KEY" && -f "$CERT" ]] || exit 0
+command -v sbsign >/dev/null 2>&1 || exit 0
+
+signed=0
+
+for f in /boot/vmlinuz-* /boot/memtest86+/memtest.efi /boot/EFI/systemd/systemd-bootx64.efi /boot/EFI/BOOT/BOOTX64.EFI; do
+ [[ -f "$f" ]] || continue
+ case "$f" in *.signed) continue ;; esac
+ if sbverify --cert "$CERT" "$f" >/dev/null 2>&1; then
+ continue
+ fi
+ if sbsign --key "$KEY" --cert "$CERT" --output "${f}.signed" "$f" 2>/dev/null; then
+ mv "${f}.signed" "$f"
+ signed=$((signed + 1))
+ fi
+done
+
+if [[ -x "$SIGNFILE" ]]; then
+ for d in /usr/lib/modules/*/; do
+ for sub in extramodules updates/dkms extras; do
+ [[ -d "${d}${sub}" ]] || continue
+ while IFS= read -r -d '' f; do
+ modinfo -F signer "$f" 2>/dev/null | grep -q "RaveOS Machine Key" && continue
+ case "$f" in
+ *.ko)
+ "$SIGNFILE" sha512 "$KEY" "$CERT" "$f" >/dev/null 2>&1 && signed=$((signed + 1))
+ ;;
+ *.ko.zst)
+ tmp="$(mktemp -d)"
+ if zstd -q -d -c "$f" > "$tmp/m.ko" 2>/dev/null &&
+ "$SIGNFILE" sha512 "$KEY" "$CERT" "$tmp/m.ko" >/dev/null 2>&1 &&
+ zstd -q -f -o "$f" "$tmp/m.ko" 2>/dev/null; then
+ signed=$((signed + 1))
+ fi
+ rm -rf "$tmp"
+ ;;
+ esac
+ done < <(find "${d}${sub}" -type f \( -name '*.ko' -o -name '*.ko.zst' \) -print0 2>/dev/null)
+ done
+ done
+fi
+
+[ "$signed" -gt 0 ] && echo "[raveos-sb] $signed fajl ujraalairva"
+exit 0
diff --git a/raveos-app-installer/secureboot/installed/zz-raveos-sb-sign.hook b/raveos-app-installer/secureboot/installed/zz-raveos-sb-sign.hook
new file mode 100644
index 0000000..cf64ee2
--- /dev/null
+++ b/raveos-app-installer/secureboot/installed/zz-raveos-sb-sign.hook
@@ -0,0 +1,17 @@
+[Trigger]
+Operation = Install
+Operation = Upgrade
+Type = Package
+Target = linux-cachyos
+Target = linux
+Target = nvidia
+Target = nvidia-dkms
+Target = nvidia-open
+Target = nvidia-open-dkms
+Target = systemd
+Target = dkms
+
+[Action]
+Description = RaveOS Secure Boot: bootlanc + out-of-tree modulok ujraalairasa...
+When = PostTransaction
+Exec = /usr/local/bin/raveos-sb-sign-local.sh
diff --git a/raveos-app-installer/secureboot/ms/MicCorKEKCA2011_2011-06-24.pem b/raveos-app-installer/secureboot/ms/MicCorKEKCA2011_2011-06-24.pem
new file mode 100644
index 0000000..37c814a
--- /dev/null
+++ b/raveos-app-installer/secureboot/ms/MicCorKEKCA2011_2011-06-24.pem
@@ -0,0 +1,34 @@
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgIKYQrRiAAAAAAAAzANBgkqhkiG9w0BAQsFADCBkTELMAkG
+A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx
+HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE7MDkGA1UEAxMyTWljcm9z
+b2Z0IENvcnBvcmF0aW9uIFRoaXJkIFBhcnR5IE1hcmtldHBsYWNlIFJvb3QwHhcN
+MTEwNjI0MjA0MTI5WhcNMjYwNjI0MjA1MTI5WjCBgDELMAkGA1UEBhMCVVMxEzAR
+BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1p
+Y3Jvc29mdCBDb3Jwb3JhdGlvbjEqMCgGA1UEAxMhTWljcm9zb2Z0IENvcnBvcmF0
+aW9uIEtFSyBDQSAyMDExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
+xOi1ir+tVyawJsPq5/tXekQCXQcN2krldCrmsA/sbevsf7njWmMyfBEXTw7jC6c4
+FZOOxvXghLGamyzn9beR1gnh4sAEqKwwHN9I8wZQmmSnUX/IhU+PIIbO/i/hn/+C
+wO3pzc70U2piOgtDueIl/f4F+dTEFKsR4iOJjXC3pB1N7K7lnPoWwtfBy9ToxC/l
+me4kiwPsjfKL6sNK+0MREgt+tUeSbNzmBInr9TME6xABKnHl+YMTPP8lCS9odkb/
+uk++3K1xKliq+w7SeT3km2U7zCkqn/xyWaLrrpLv9jUTgMYC7ORfzJ12ze9jksGv
+eUCEeYd/41Ko6J17B2mPFQIDAQABo4IBTzCCAUswEAYJKwYBBAGCNxUBBAMCAQAw
+HQYDVR0OBBYEFGL8Q82gPqTLZxLSW9lVrHvMtopfMBkGCSsGAQQBgjcUAgQMHgoA
+UwB1AGIAQwBBMAsGA1UdDwQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQY
+MBaAFEVmUkPhflgRv9ZOniNVCDs6ImqoMFwGA1UdHwRVMFMwUaBPoE2GS2h0dHA6
+Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY0NvclRoaVBh
+ck1hclJvb18yMDEwLTEwLTA1LmNybDBgBggrBgEFBQcBAQRUMFIwUAYIKwYBBQUH
+MAKGRGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljQ29yVGhp
+UGFyTWFyUm9vXzIwMTAtMTAtMDUuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQDUhIj1
+FJQYAsoqPPsqkhwM16DR8ehSZqjuorV1epAAqi2kdlrqebe5N2pRexBk9uFk8gJn
+vveoG3i9us6IWGQM1lfIGaNfBdbbxtBpzkhLMrfrXdIw9cD1uLp4B6Mr/pvbNFaE
+7ILKrkElcJxr6f6QD9eWH+XnlB+yKgyNS/8oKRB799d8pdF2uQXIee0PkJKcwv7f
+b35sD3vUwUXdNFGWOQ/lXlbYGAWW9AemQrOgd/0IGfJxVsyfhiOkh8um/Vh+1Gln
+FZF+gfJ/E+UNi4o8h4Tr4869Q+WtLYSTjmorWnxE+lKqgcgtHLvgUt8AEfiaPcFg
+sOEztaOI0WUZChrnrHykwYKHTjixLw3FFIdv/Y0uvDm25+bD4OTNJ4TvlELvKYuQ
+RkE7gRtn2PlDWWXLDbz9AJJP9HU7p6kk/FBBQHngLU8Kaid2blLtlml7rw/3hwXQ
+RcKtUxSBH/swBKo3NmHaSmkbNNho7dYCz2yUDNPPbCJ5rbHwvAOiRmCpxAfCIYLx
+/fLoeTJgv9ispSIUS8rB2EvrfT9XNbLmT3W0sGADIlOukXkd1ptBHxWGVHCy3g01
+D3ywNHK6l2A78HnrorIcXaIWuIfF6Rv2tZclbzif45H6inmYw2kOt6McIAWX+MoU
+rgDXxPPAFBB1azSgG7WZYPNcsMVXTjbSMoS/ng==
+-----END CERTIFICATE-----
diff --git a/raveos-app-installer/secureboot/ms/MicCorUEFCA2011_2011-06-27.pem b/raveos-app-installer/secureboot/ms/MicCorUEFCA2011_2011-06-27.pem
new file mode 100644
index 0000000..d7c29ef
--- /dev/null
+++ b/raveos-app-installer/secureboot/ms/MicCorUEFCA2011_2011-06-27.pem
@@ -0,0 +1,35 @@
+-----BEGIN CERTIFICATE-----
+MIIGEDCCA/igAwIBAgIKYQjTxAAAAAAABDANBgkqhkiG9w0BAQsFADCBkTELMAkG
+A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx
+HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE7MDkGA1UEAxMyTWljcm9z
+b2Z0IENvcnBvcmF0aW9uIFRoaXJkIFBhcnR5IE1hcmtldHBsYWNlIFJvb3QwHhcN
+MTEwNjI3MjEyMjQ1WhcNMjYwNjI3MjEzMjQ1WjCBgTELMAkGA1UEBhMCVVMxEzAR
+BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1p
+Y3Jvc29mdCBDb3Jwb3JhdGlvbjErMCkGA1UEAxMiTWljcm9zb2Z0IENvcnBvcmF0
+aW9uIFVFRkkgQ0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
+AKUIbEzHRQlqSwykwId/BnUMQwFUZOAWfwftkn0LsnO/DArGSkVhoMUWLZbT9Sug
++01Jm0GAkDy5VP3mvNGdxKQYin9BilxZg2gyu4xHye5xvCFPmop8/0Q/jY8ysiZI
+rnW17slMHkoZfuSCmh14d00MsL32D9MW07z6K6VROF31+7rbeALb/+wKG5bVg7gZ
+E+m2wHtAe+EfKCfJ+u9WXhzmfpR+wPBEsnk55dqyYotNvzhw4mgkFMkzpAg31Vhp
+XtN87cEEUwjnTrAqh2MIYW9jFVnqsit51wxhZ4pb/V6th3+6hmdPcVgSIgQiIs6L
+71RxAM5QNVh2lQjuarGiAdUCAwEAAaOCAXYwggFyMBIGCSsGAQQBgjcVAQQFAgMB
+AAEwIwYJKwYBBAGCNxUCBBYEFPjBa7d/d1NK8yU3HU6hJnsPIHCAMB0GA1UdDgQW
+BBQTrb9DCb2CcJyM1U8xbtUimIob1DAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMA
+QTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBRFZlJD
+4X5YEb/WTp4jVQg7OiJqqDBcBgNVHR8EVTBTMFGgT6BNhktodHRwOi8vY3JsLm1p
+Y3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9NaWNDb3JUaGlQYXJNYXJSb29f
+MjAxMC0xMC0wNS5jcmwwYAYIKwYBBQUHAQEEVDBSMFAGCCsGAQUFBzAChkRodHRw
+Oi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY0NvclRoaVBhck1hclJv
+b18yMDEwLTEwLTA1LmNydDANBgkqhkiG9w0BAQsFAAOCAgEANQhC/zDMzvd2DK0Q
+aFg1KUYydid87xJBJ0IbSqptgThIWRNV8+lYNKYWC4KqXa2C2oCDQQaPtB3yA7nz
+Gl0b8VCQ+bNVhEIoHCC9sq5RFMXArJeVIRyQ2w/8d56Vc5GIyr29UrkFUA3fV56g
+Ye0N5W0l2UAPF0DIzqNKwk2vmhIdCFSPvce8uSs9SSsfMvxqIWlPm8h+QjT8NgYX
+i48gQMCzmiV1J83JA6P2XdHnNlR6uVC10xLRB7+7dN/cHo+A1e0Y9C8UFmsv3maM
+sCPlx4TY7erBM4KtVksYLfFolQfNz/By8K673YaFmCwhTDMr8A9K8GiHtZJVMnWh
+aoJqPKMlEaTtrdcErsvYQFmghNGVTGKRIhp0HYw9Rw5EpuSwmzQ1sfq2U6gsgeyk
+BXHInbi66BtEZuRHVA6OVn+znxaYsobQaD6QI7UvXo9QhY3GjYJfQaH0Lg3gmdJs
+deS2abUhhvoH0fbiTdHarSx3Ux4lMjfHbFJylYaw8TVhahn1sjuBUFamMi3+oon5
+QoYnGFWhgspam/gwmFQUpkeWJS/IJuRBlBpcAj/lluOFWzw+P7tHFnJV4iUisdl7
+5wMGKqP3HpBGwwAN1hmJ4w41J2IDcRWm79AnoKBZN2D4OJS44Hhw+LpMhoeU9uCu
+AkXuZcK2o35pFnUHkpv1prxZg1g=
+-----END CERTIFICATE-----
diff --git a/raveos-app-installer/secureboot/ms/MicWinProPCA2011_2011-10-19.pem b/raveos-app-installer/secureboot/ms/MicWinProPCA2011_2011-10-19.pem
new file mode 100644
index 0000000..0390d2a
--- /dev/null
+++ b/raveos-app-installer/secureboot/ms/MicWinProPCA2011_2011-10-19.pem
@@ -0,0 +1,34 @@
+-----BEGIN CERTIFICATE-----
+MIIF1zCCA7+gAwIBAgIKYQd2VgAAAAAACDANBgkqhkiG9w0BAQsFADCBiDELMAkG
+A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx
+HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEyMDAGA1UEAxMpTWljcm9z
+b2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTAwHhcNMTExMDE5MTg0
+MTQyWhcNMjYxMDE5MTg1MTQyWjCBhDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldh
+c2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBD
+b3Jwb3JhdGlvbjEuMCwGA1UEAxMlTWljcm9zb2Z0IFdpbmRvd3MgUHJvZHVjdGlv
+biBQQ0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN0Mu6Lk
+Lgnj58X3lmm8ACG9aTMz760Ey1SA7gaDu8UghNn30ovzOLCrpK0tfGJ5Bf/jSj8E
+NSBw48Tna+CcwDZ16Yox3Y1w5dw3tXRGlihbh2AjLL/cR6Vn91EnnnLrB6bJuR47
+UzV85dPsJ7mHHP65ySMJb6hGkcFuljxB08ujP10Cak3saR8lKFw2//1DFQqU4Bm0
+z9/CEuLCWyfuJ3gwi1sqCWsiiVNgFizAaB1TuuxJ851hjIVoCXNEXX2iVCvdefcV
+zzVdbBwrXM68nCOLb261Jtk2E8NP1ieuuTI7QZIs4cfNd+iqVE73XAsEh2W0Qxio
+suBtGXfsWiT6SAMCAwEAAaOCAUMwggE/MBAGCSsGAQQBgjcVAQQDAgEAMB0GA1Ud
+DgQWBBSpKQI5jhbEl3jNkPmeT5rhfFWvUzAZBgkrBgEEAYI3FAIEDB4KAFMAdQBi
+AEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBTV
+9lbLj+iiXGJo0T2UkFvXzpoYxDBWBgNVHR8ETzBNMEugSaBHhkVodHRwOi8vY3Js
+Lm1pY3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9NaWNSb29DZXJBdXRfMjAx
+MC0wNi0yMy5jcmwwWgYIKwYBBQUHAQEETjBMMEoGCCsGAQUFBzAChj5odHRwOi8v
+d3d3Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY1Jvb0NlckF1dF8yMDEwLTA2
+LTIzLmNydDANBgkqhkiG9w0BAQsFAAOCAgEAFPx8cVGlecJusu85Prw8Ug9uKz8Q
+E3P+qGjQSKY0TYqWBSbuMUaQYXnW/zguRWv0wOUouNodj4rbCdcax0wKNmZqjOwb
+1wSQqBgXpJu54kAyNnbEwVrGv+QEwOoW06zDaO9irN1UbFAwWKbrfP6Up06O9Ox8
+hnNXwlIhczRa86OKVsgE2gcJ7fiL4870fo6u8PYLigj7P8kdcn9TuOu+Y+DjPTFl
+sIHl8qzNFqSfPaixm8JC0JCEX1Qd/4nquh1HkG+wc05Bn0CfX+WhKrIRkXOKISjw
+zt5zOV8+q1xg7N8DEKjTCen09paFtn9RiGZHGY2isBI9gSpoBXe7kUxie7bBB8e6
+eoc0Aw5LYnqZ6cr8zko3yS2kV3wc/j3cuA9a+tbEswKFAjrqs9lu5GkhN96B0fZ1
+GQVn05NXXikbOcjuLeHN5EVzW9DSznqrFhmCRljQXp2Bs2evbDXyvOU/JOI1ogp1
+BvYYVpnUeCzRBRvr0IgBnaoQ8QXfun4sY7cGmyMhxPl4bOJYFwY2K5ESA8yk2fIt
+uvmUnUDtGEXxzopcaz6rA9NwGCoKauBfR9HVYwoy8q/XNh8qcFrlQlkIcUtXun6D
+gfAhPPQcwcW5kJMOiEWThumxIJm+mMvFlaRdYtagYwggvXUQd30980W5n5efy1eA
+bzOpBM93pGIcWX4=
+-----END CERTIFICATE-----
diff --git a/raveos-app-installer/secureboot/ms/microsoft corporation kek 2k ca 2023.pem b/raveos-app-installer/secureboot/ms/microsoft corporation kek 2k ca 2023.pem
new file mode 100644
index 0000000..771d8ad
--- /dev/null
+++ b/raveos-app-installer/secureboot/ms/microsoft corporation kek 2k ca 2023.pem
@@ -0,0 +1,33 @@
+-----BEGIN CERTIFICATE-----
+MIIFsjCCA5qgAwIBAgITMwAAABMUFrhhbYKCSwAAAAAAEzANBgkqhkiG9w0BAQsF
+ADBaMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u
+MSswKQYDVQQDEyJNaWNyb3NvZnQgUlNBIERldmljZXMgUm9vdCBDQSAyMDIxMB4X
+DTIzMDMwMjIwMjEzNVoXDTM4MDMwMjIwMzEzNVowXDELMAkGA1UEBhMCVVMxHjAc
+BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEtMCsGA1UEAxMkTWljcm9zb2Z0
+IENvcnBvcmF0aW9uIEtFSyAySyBDQSAyMDIzMIIBIjANBgkqhkiG9w0BAQEFAAOC
+AQ8AMIIBCgKCAQEA416Ii3MswwrE6fXOgS3xD/EmNTfRSVNxsVuTUq/hFd/eizm9
+r0xldVPl2goymC8zJrYrvpSZn+zawo4FNJITD2O/dKJyqCl+nzIhKQhZxHfEKpJM
+h7YDN+ua4sPJtEghw2GU6hdRsecU4iRjLtXyxqXyol4facZRDacp+1IKm+OI6Gj/
+u/qSaa/EFv9d5V/g3+xmVQthwqw7IG7ftA3rK8jQwjROgpY57vExhQQ979Z2+8PK
+wdWMLwsQKJtImrAQFKTZlOVoW81u53rsvKBJuKlT2E0vsnvI2ryy5/yrcBB3lUVJ
+/a3SPxfLZpryfTbdCiziwIchLZPbCJbS6FxU4QIDAQABo4IBbTCCAWkwDgYDVR0P
+AQH/BAQDAgGGMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBTgq3K8lj7/uGab
+fRBaQz5cQlSHXzAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMAQTAPBgNVHRMBAf8E
+BTADAQH/MB8GA1UdIwQYMBaAFIREhgYAmD8sqrPFifOsLsnmnQkDMGUGA1UdHwRe
+MFwwWqBYoFaGVGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01p
+Y3Jvc29mdCUyMFJTQSUyMERldmljZXMlMjBSb290JTIwQ0ElMjAyMDIxLmNybDBy
+BggrBgEFBQcBAQRmMGQwYgYIKwYBBQUHMAKGVmh0dHA6Ly93d3cubWljcm9zb2Z0
+LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwUlNBJTIwRGV2aWNlcyUyMFJv
+b3QlMjBDQSUyMDIwMjEuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQCFAgYS+meuTzmp
+uDTcXSp4GXs47pyCjxviPD0yCl6/WAbnb/iNGKgbhPWbyq2LCEQOJo0s2F9uIyUH
++ltMJi52MUMubujIMcFK0vICt6bxdeSW7QbiypV4RKgzdtQrTde83Ic7q00prZaJ
+t9XCj6tGw12z/e2lnvV2tyuF/5ihn2scmz737g4Xo/02L+HNKJgcQJkmygONpjXq
+0gqnixauIQEAHicPtw6yQjFWLub4juoMNPBO33AwaQTRz9OcZEZvzCHNy+8FMrsI
+ptifRThdTtKckonpc+R6CDUeT6bCums+tx9UNEn6tHrL2qAfWYErKvaIJrD6bPLr
+wdiuQeFv/L8T6G4U5+fHA4tAmRA4Bm1wvQHI3o1WHTgPTyOoJUDeuygtQ6+kvCCD
+tQb5BSGfO7l5DXBrU8B1whsQE7Pkbwmoz9G3DnFct8mP5RzwE1XZk7muXT/KC7BZ
+akVKw+HjJ3gNFoH8WC2xQboYDc/w76sIHk/4/Mb9S90d7zAlUDmj3/4/ufrrlpfQ
+zfkEJvsNSBkI2OGTwVDHbm3Y0GuOlXJkUMntVYluwUuiBtQytaltZQF68VJXGAUw
+XLgoZhG3evBxToZhYHptVsdbCT6i79QOnpLTH5n2nbEdeHhr/+gqBK94Zz7wKgun
+4F0B6YeZNTCQ7ddFa5zM5qLk5hen3Q==
+-----END CERTIFICATE-----
diff --git a/raveos-app-installer/secureboot/ms/microsoft option rom uefi ca 2023.pem b/raveos-app-installer/secureboot/ms/microsoft option rom uefi ca 2023.pem
new file mode 100644
index 0000000..139ca44
--- /dev/null
+++ b/raveos-app-installer/secureboot/ms/microsoft option rom uefi ca 2023.pem
@@ -0,0 +1,33 @@
+-----BEGIN CERTIFICATE-----
+MIIFrzCCA5egAwIBAgITMwAAABez7E2PAeJwBQAAAAAAFzANBgkqhkiG9w0BAQsF
+ADBaMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u
+MSswKQYDVQQDEyJNaWNyb3NvZnQgUlNBIERldmljZXMgUm9vdCBDQSAyMDIxMB4X
+DTIzMTAyNjE5MDIyMFoXDTM4MTAyNjE5MTIyMFowWTELMAkGA1UEBhMCVVMxHjAc
+BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEqMCgGA1UEAxMhTWljcm9zb2Z0
+IE9wdGlvbiBST00gVUVGSSBDQSAyMDIzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
+MIIBCgKCAQEA0wv+ic3Ntu7c5RqN3MohGg8iLwu1MoQ1wL5vcJNVtEfMSQPC/s+6
+MmVktzW9BDtEZC+g8t3hXbrnvTmavctL4YOqG+hvTkyRUkOlxFBVaPXarEiinOw1
+pwRWaBnisWLUkvSFPzShFWeHIW4fydg1Mrg9y1jKKUNUSn6LVXsjejq2nUMHBGua
+a/TwIP/6pt+inknoVcV1iESspEE6A3y76ZPkbPHteSbHizL3WUklMQBnGAxn+0DF
+XXY9CYfCLYxfK1oeAQ8zr2UIkE/8ZFuco1zWUxtRAZ+Yz8RTxbHfs2hvRUvIRYXI
+Hbie0XdxoNWid4fsZy65hwZG3UFDQGpfLwIDAQABo4IBbTCCAWkwDgYDVR0PAQH/
+BAQDAgGGMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBRRT7+Tf6RvtXvwevi+
+2Es7hksXETAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMAQTAPBgNVHRMBAf8EBTAD
+AQH/MB8GA1UdIwQYMBaAFIREhgYAmD8sqrPFifOsLsnmnQkDMGUGA1UdHwReMFww
+WqBYoFaGVGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jv
+c29mdCUyMFJTQSUyMERldmljZXMlMjBSb290JTIwQ0ElMjAyMDIxLmNybDByBggr
+BgEFBQcBAQRmMGQwYgYIKwYBBQUHMAKGVmh0dHA6Ly93d3cubWljcm9zb2Z0LmNv
+bS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwUlNBJTIwRGV2aWNlcyUyMFJvb3Ql
+MjBDQSUyMDIwMjEuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBKS4D8cbGH3QaLJBDR
+dvgQ5GU0obuBCH1w1BUk+ZA7SG9uTiP+hVPsopkfieQ0vtCYr/H4LfNH0bUyZJ7e
+csAXfoEgesFfkfVOOqZ7adnQ1vD6gGPFwERn04snYcHl3FGZbiPJKRj+Nb1FIawP
++WDiD9FfcA+SK1hOz6xkLwlz7VAIyOGFc0AsMam0tiNLwBk7/RX408t0VM3au30E
+hZ9wFXX5t/RhS/7kn0UO9YLpxfN4u6pq4fe7hZIrr0u1J06aySlvDsjSZGObXRQG
+zHh/5BLdluOcBELsF/qSIafe9WmPILJk8z8Vo1GvJ2+3YlevdBfsq7HuqFDvr4OC
+q2EEeT9JjEBWwDyv+ypaGR6q5i5nJCGsM/DXSosKJDAQplI+Hcj8kZyHG/qG4Z5r
+5QlhdaijOV/in2wOhSHmvXal6kWDaB4vNr/gaIpCzh+4jeFg5pOK7rpKrbNJTO6j
+A8mnooZxnIEBZ2kP3oBV1sDecoXARmDwzmAqiAiNnDDrqYtA82ElCeHhgjIEpSn4
+WewmtsjXI/AL02xjatov0tOlJZqaXqX9AqXsopCBaD49RY58BbIu6pkBRf0JMJQm
+10os/n2CRDNDVctaQ9KSkv5OR8ZJPzUbIZxq2oL8ZDf7J+r0MN9l7ND8UAE4auzc
+Ufb17psmzO5t/i9WDjroOCKOqg==
+-----END CERTIFICATE-----
diff --git a/raveos-app-installer/secureboot/ms/microsoft uefi ca 2023.pem b/raveos-app-installer/secureboot/ms/microsoft uefi ca 2023.pem
new file mode 100644
index 0000000..5c7ad84
--- /dev/null
+++ b/raveos-app-installer/secureboot/ms/microsoft uefi ca 2023.pem
@@ -0,0 +1,33 @@
+-----BEGIN CERTIFICATE-----
+MIIFpDCCA4ygAwIBAgITMwAAABY2vzaJnxV1zAAAAAAAFjANBgkqhkiG9w0BAQsF
+ADBaMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u
+MSswKQYDVQQDEyJNaWNyb3NvZnQgUlNBIERldmljZXMgUm9vdCBDQSAyMDIxMB4X
+DTIzMDYxMzE5MjE0N1oXDTM4MDYxMzE5MzE0N1owTjELMAkGA1UEBhMCVVMxHjAc
+BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEfMB0GA1UEAxMWTWljcm9zb2Z0
+IFVFRkkgQ0EgMjAyMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL0i
+Kq7vGjGFE3hRp5v9/HjRY7gam2P1EgbbS0E1am+r9WoEzJfPu9QICRphOg3ms6BG
+/wmt3oAk3BKA8l/ZFu3iQp3NL01hAmGKHEsdGGI5hpdxrT5/XXETS+kqAMG+1bcA
+n15lsiwa/3Tt6oPSOYkzNXN9oKL6QORmUFiq/IfoXCCDNOyr4gvFXz7/SCsRkSbv
+GG5XxZ8Yc5nv4Wp0K7svf1COHdo9drYE5cwuEMeDG4Oj5KUTE3FuM3ijqDzsSCZe
+x8ZeDYeaqsxVNIGtnZD15pZjpugHIBfIkx7SrqTcrn1Zv4heYgyuW/IpQFYdJkDe
+haatVtHPVUd2X5w52wMCAwEAAaOCAW0wggFpMA4GA1UdDwEB/wQEAwIBhjAQBgkr
+BgEEAYI3FQEEAwIBADAdBgNVHQ4EFgQUgaprMkTJNbzg1mKK85gnQh4ySX0wGQYJ
+KwYBBAGCNxQCBAweCgBTAHUAYgBDAEEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSME
+GDAWgBSERIYGAJg/LKqzxYnzrC7J5p0JAzBlBgNVHR8EXjBcMFqgWKBWhlRodHRw
+Oi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NybC9NaWNyb3NvZnQlMjBSU0El
+MjBEZXZpY2VzJTIwUm9vdCUyMENBJTIwMjAyMS5jcmwwcgYIKwYBBQUHAQEEZjBk
+MGIGCCsGAQUFBzAChlZodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Nl
+cnRzL01pY3Jvc29mdCUyMFJTQSUyMERldmljZXMlMjBSb290JTIwQ0ElMjAyMDIx
+LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAB2ATKlOHEg8a81oUlRfl2NeVVJuLDt2R
+pe3HXUdQk0W3lYhfFxlBY3a1grCoxZ2ZFTaJSb4Swmb7gwywgc7lpKvCoJrr9Qc8
+/iH4mtwZIQyeJCzRXKIWCkvr7EicsVt02wFkwuOAaqsazXcbajmat7pwRP9nlMWB
+BvDLgQSTJyGZvYeIFJwicQ4LL1y+uJBUfMAevCubo1YXS5fn438TNPqwNGub9rIt
+99h72CDTXKeVTE8q+eceaK/8bI/Ihj2fyNHvTRrI0fb9LXzj6EHB6ifB+44lhlqJ
+phC+zuOPpXvEGqDodZD9IbDBo8UWI148zi/+jJi/CFz2ucWyPLbMyOx/0nd0y+3z
+lsmLjRwqiQ+jj73OKoVGmiOij0LAmdbqhR9hGb4WNbd1oJWAZQaH1As1yMSqDs6i
+CmNgyksrXCcEgq8+WIN6WthnPxBT9QwW9yZLioC5xR+g3tjTYUQURaf1q5qIF/23
+lFQCi+S3U6E+jZ5QgqgA4HiUG76zxDAfsg7b8EaQweZX/nzBcLIcS2TZEAMbNPtm
+z4JunkCoETfyZYshCa88k2I987yD3T9VkBXSMa8R5/jKoILhuc+zV5PHVTesf0G/
+H5Y88yaU+djSVSSKirZB8OAWwCOSjHEKTGoNGVX3OpySIZah1fgKjJ2/yevKiEL8
+S7Tv/ycwIWE=
+-----END CERTIFICATE-----
diff --git a/raveos-app-installer/secureboot/ms/windows uefi ca 2023.pem b/raveos-app-installer/secureboot/ms/windows uefi ca 2023.pem
new file mode 100644
index 0000000..9ba1c75
--- /dev/null
+++ b/raveos-app-installer/secureboot/ms/windows uefi ca 2023.pem
@@ -0,0 +1,33 @@
+-----BEGIN CERTIFICATE-----
+MIIFqjCCA5KgAwIBAgITMwAAABqIi5gAViKEwQAAAAAAGjANBgkqhkiG9w0BAQsF
+ADCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEyMDAGA1UE
+AxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTAwHhcN
+MjMwNjEzMTg1ODI5WhcNMzUwNjEzMTkwODI5WjBMMQswCQYDVQQGEwJVUzEeMBwG
+A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR0wGwYDVQQDExRXaW5kb3dzIFVF
+RkkgQ0EgMjAyMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALyyNdFU
+ebSPzIEqbrMS1pOXMHw4XL95khkKDy0K/r/gqNgyP9Krb2+BwU0XaUXPhYAno3yz
+Mcylp035Q9BaL9cYG9JYlgU5o5W3vN15waDPj+JTHismYqgcrjYeT6HfuRO6DCW7
+JGVnAaodQRC3NsFrLrVsENNOltCfKqHx7aEVC4KVxf9jihO1kjQeMV5hEa5dzPEQ
+5kx5yXKyNIqCVi2rD3zAT5OOWXVBhqwJEAnyUWVQtfUhsyY5jarEkbPcrGQjBs01
+Xw1CSZxPDc6Ag4JZ/t9LROFAyD1jts+0Qg05XNJCEAwIwnTrHNxuvAqsmLvM+h48
+p4MWxdsC2tmW32sCAwEAAaOCAUYwggFCMA4GA1UdDwEB/wQEAwIBhjAQBgkrBgEE
+AYI3FQEEAwIBADAdBgNVHQ4EFgQUrvxfu74FXY+NqlhUc0mUF6taUnIwGQYJKwYB
+BAGCNxQCBAweCgBTAHUAYgBDAEEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAW
+gBTV9lbLj+iiXGJo0T2UkFvXzpoYxDBWBgNVHR8ETzBNMEugSaBHhkVodHRwOi8v
+Y3JsLm1pY3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9NaWNSb29DZXJBdXRf
+MjAxMC0wNi0yMy5jcmwwWgYIKwYBBQUHAQEETjBMMEoGCCsGAQUFBzAChj5odHRw
+Oi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY1Jvb0NlckF1dF8yMDEw
+LTA2LTIzLmNydDANBgkqhkiG9w0BAQsFAAOCAgEAn8m2/27hnDtV9v6LOd1hBG/Q
+rWPNF3ZKqEOJjfjG8oxekOHkaKUV7LjTYAxAVx/7XjVyYd6XMWx5oPUWrksc7QEM
+7/dXD0IwGGn4oaMul5K4vhv+K4ZeQkIRj45wTZCn/QFj8mS/m+J7CIHPSfI3F9/x
++XLTwx3DkEVN5oAGvf3lamnOs35OMVuEc6jocj8nNcl8IM4Am0/gTLQ2acv3NBER
+dBJ6qIwugWymUK0Z+qhGRW+xZ3PDa+NA6CppjyQQ4SlujRaI7o5/ZpMCb1ueBIzM
+gRytl1TxGC5+UpC8Ud4qDq5m6rxkbqCRZOQvEqi852u6xxubeRpkZvFDtNHDRiE4
+gXlM+vAxDdN5/3oSpR3Z3ayiD3GC95P/XKFhrmXyFIHteVqah+pge8uzT3U0yrqh
+76L2ooBFoYsngc3Vdzg+yk7dKOpYusWgKd6GjIj8lSdR3avT0FsNd8dsj1XX1KIO
+W+Q0RhQWHeMc1m2ZrUzscXMvq86ytCneVTBTOToyi/DqnIgSOwVoGb/Ph1IQ+9YT
+YPNBZPQIV4HLnRGljvTlJ/WjOuzkPUq3zvmIDZ+9ym3SSrxYdo4yBJRu3fTPbUdt
+wtdq3Idx6qS/72eXnLjHgDYqKlnJwAynRKBztYzPOFqu+LuGlfBErWZ6M+1x5EWH
+g+WnzqJA0HLSSAD6+Ro=
+-----END CERTIFICATE-----