From a1e9d01e8dfd20d8152fe76fde61dc2b6b1bdda0 Mon Sep 17 00:00:00 2001 From: Allen Houchins Date: Tue, 9 Jun 2026 07:26:01 -0500 Subject: [PATCH 1/2] Add macOS Fleet-maintained apps (H) Adds 20 Fleet-maintained app(s) whose cask token starts with 'H': inputs, outputs, app icons (TSX + website PNG), and the matching index.ts and apps.json entries. Split out from #47121. --- .../inputs/homebrew/hammerspoon.json | 10 ++ .../inputs/homebrew/handbrake-app.json | 10 ++ ee/maintained-apps/inputs/homebrew/hazel.json | 10 ++ .../inputs/homebrew/hazeover.json | 10 ++ .../inputs/homebrew/helium.json | 10 ++ .../inputs/homebrew/hex-fiend.json | 10 ++ .../inputs/homebrew/hey-desktop.json | 10 ++ .../inputs/homebrew/hiddenbar.json | 10 ++ ee/maintained-apps/inputs/homebrew/hides.json | 10 ++ .../inputs/homebrew/hidock.json | 10 ++ .../inputs/homebrew/highlight-ai.json | 10 ++ .../inputs/homebrew/hive-app.json | 10 ++ .../inputs/homebrew/home-assistant.json | 10 ++ .../inputs/homebrew/homerow.json | 10 ++ ee/maintained-apps/inputs/homebrew/hot.json | 10 ++ .../inputs/homebrew/houdahspot.json | 10 ++ .../inputs/homebrew/hp-easy-admin.json | 10 ++ .../inputs/homebrew/hubstaff.json | 10 ++ ee/maintained-apps/inputs/homebrew/huly.json | 10 ++ .../inputs/homebrew/hyperkey.json | 10 ++ ee/maintained-apps/outputs/apps.json | 140 ++++++++++++++++++ .../outputs/hammerspoon/darwin.json | 22 +++ .../outputs/handbrake-app/darwin.json | 22 +++ ee/maintained-apps/outputs/hazel/darwin.json | 22 +++ .../outputs/hazeover/darwin.json | 22 +++ ee/maintained-apps/outputs/helium/darwin.json | 22 +++ .../outputs/hex-fiend/darwin.json | 22 +++ .../outputs/hey-desktop/darwin.json | 22 +++ .../outputs/hiddenbar/darwin.json | 22 +++ ee/maintained-apps/outputs/hides/darwin.json | 22 +++ ee/maintained-apps/outputs/hidock/darwin.json | 22 +++ .../outputs/highlight-ai/darwin.json | 22 +++ .../outputs/hive-app/darwin.json | 22 +++ .../outputs/home-assistant/darwin.json | 22 +++ .../outputs/homerow/darwin.json | 22 +++ ee/maintained-apps/outputs/hot/darwin.json | 22 +++ .../outputs/houdahspot/darwin.json | 22 +++ .../outputs/hp-easy-admin/darwin.json | 22 +++ .../outputs/hubstaff/darwin.json | 22 +++ ee/maintained-apps/outputs/huly/darwin.json | 22 +++ .../outputs/hyperkey/darwin.json | 22 +++ .../components/icons/Hammerspoon.tsx | 14 ++ .../components/icons/HandbrakeApp.tsx | 14 ++ .../SoftwarePage/components/icons/Hazel.tsx | 14 ++ .../components/icons/Hazeover.tsx | 14 ++ .../SoftwarePage/components/icons/Helium.tsx | 14 ++ .../components/icons/HexFiend.tsx | 14 ++ .../components/icons/HeyDesktop.tsx | 14 ++ .../components/icons/Hiddenbar.tsx | 14 ++ .../SoftwarePage/components/icons/Hides.tsx | 14 ++ .../SoftwarePage/components/icons/Hidock.tsx | 14 ++ .../components/icons/HighlightAi.tsx | 14 ++ .../SoftwarePage/components/icons/HiveApp.tsx | 14 ++ .../components/icons/HomeAssistant.tsx | 14 ++ .../SoftwarePage/components/icons/Homerow.tsx | 14 ++ .../SoftwarePage/components/icons/Hot.tsx | 14 ++ .../components/icons/Houdahspot.tsx | 14 ++ .../components/icons/HpEasyAdmin.tsx | 14 ++ .../components/icons/Hubstaff.tsx | 14 ++ .../SoftwarePage/components/icons/Huly.tsx | 14 ++ .../components/icons/Hyperkey.tsx | 14 ++ .../SoftwarePage/components/icons/index.ts | 40 +++++ .../images/app-icon-hammerspoon-60x60@2x.png | Bin 0 -> 13682 bytes .../app-icon-handbrake-app-60x60@2x.png | Bin 0 -> 24717 bytes .../assets/images/app-icon-hazel-60x60@2x.png | Bin 0 -> 9119 bytes .../images/app-icon-hazeover-60x60@2x.png | Bin 0 -> 11825 bytes .../images/app-icon-helium-60x60@2x.png | Bin 0 -> 18039 bytes .../images/app-icon-hex-fiend-60x60@2x.png | Bin 0 -> 24350 bytes .../images/app-icon-hey-desktop-60x60@2x.png | Bin 0 -> 15088 bytes .../images/app-icon-hiddenbar-60x60@2x.png | Bin 0 -> 7724 bytes .../assets/images/app-icon-hides-60x60@2x.png | Bin 0 -> 18213 bytes .../images/app-icon-hidock-60x60@2x.png | Bin 0 -> 16524 bytes .../images/app-icon-highlight-ai-60x60@2x.png | Bin 0 -> 9302 bytes .../images/app-icon-hive-app-60x60@2x.png | Bin 0 -> 9588 bytes .../app-icon-home-assistant-60x60@2x.png | Bin 0 -> 15360 bytes .../images/app-icon-homerow-60x60@2x.png | Bin 0 -> 11179 bytes .../assets/images/app-icon-hot-60x60@2x.png | Bin 0 -> 12775 bytes .../images/app-icon-houdahspot-60x60@2x.png | Bin 0 -> 11713 bytes .../app-icon-hp-easy-admin-60x60@2x.png | Bin 0 -> 14667 bytes .../images/app-icon-hubstaff-60x60@2x.png | Bin 0 -> 7207 bytes .../assets/images/app-icon-huly-60x60@2x.png | Bin 0 -> 19643 bytes .../images/app-icon-hyperkey-60x60@2x.png | Bin 0 -> 15646 bytes 82 files changed, 1100 insertions(+) create mode 100644 ee/maintained-apps/inputs/homebrew/hammerspoon.json create mode 100644 ee/maintained-apps/inputs/homebrew/handbrake-app.json create mode 100644 ee/maintained-apps/inputs/homebrew/hazel.json create mode 100644 ee/maintained-apps/inputs/homebrew/hazeover.json create mode 100644 ee/maintained-apps/inputs/homebrew/helium.json create mode 100644 ee/maintained-apps/inputs/homebrew/hex-fiend.json create mode 100644 ee/maintained-apps/inputs/homebrew/hey-desktop.json create mode 100644 ee/maintained-apps/inputs/homebrew/hiddenbar.json create mode 100644 ee/maintained-apps/inputs/homebrew/hides.json create mode 100644 ee/maintained-apps/inputs/homebrew/hidock.json create mode 100644 ee/maintained-apps/inputs/homebrew/highlight-ai.json create mode 100644 ee/maintained-apps/inputs/homebrew/hive-app.json create mode 100644 ee/maintained-apps/inputs/homebrew/home-assistant.json create mode 100644 ee/maintained-apps/inputs/homebrew/homerow.json create mode 100644 ee/maintained-apps/inputs/homebrew/hot.json create mode 100644 ee/maintained-apps/inputs/homebrew/houdahspot.json create mode 100644 ee/maintained-apps/inputs/homebrew/hp-easy-admin.json create mode 100644 ee/maintained-apps/inputs/homebrew/hubstaff.json create mode 100644 ee/maintained-apps/inputs/homebrew/huly.json create mode 100644 ee/maintained-apps/inputs/homebrew/hyperkey.json create mode 100644 ee/maintained-apps/outputs/hammerspoon/darwin.json create mode 100644 ee/maintained-apps/outputs/handbrake-app/darwin.json create mode 100644 ee/maintained-apps/outputs/hazel/darwin.json create mode 100644 ee/maintained-apps/outputs/hazeover/darwin.json create mode 100644 ee/maintained-apps/outputs/helium/darwin.json create mode 100644 ee/maintained-apps/outputs/hex-fiend/darwin.json create mode 100644 ee/maintained-apps/outputs/hey-desktop/darwin.json create mode 100644 ee/maintained-apps/outputs/hiddenbar/darwin.json create mode 100644 ee/maintained-apps/outputs/hides/darwin.json create mode 100644 ee/maintained-apps/outputs/hidock/darwin.json create mode 100644 ee/maintained-apps/outputs/highlight-ai/darwin.json create mode 100644 ee/maintained-apps/outputs/hive-app/darwin.json create mode 100644 ee/maintained-apps/outputs/home-assistant/darwin.json create mode 100644 ee/maintained-apps/outputs/homerow/darwin.json create mode 100644 ee/maintained-apps/outputs/hot/darwin.json create mode 100644 ee/maintained-apps/outputs/houdahspot/darwin.json create mode 100644 ee/maintained-apps/outputs/hp-easy-admin/darwin.json create mode 100644 ee/maintained-apps/outputs/hubstaff/darwin.json create mode 100644 ee/maintained-apps/outputs/huly/darwin.json create mode 100644 ee/maintained-apps/outputs/hyperkey/darwin.json create mode 100644 frontend/pages/SoftwarePage/components/icons/Hammerspoon.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/HandbrakeApp.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Hazel.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Hazeover.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Helium.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/HexFiend.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/HeyDesktop.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Hiddenbar.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Hides.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Hidock.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/HighlightAi.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/HiveApp.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/HomeAssistant.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Homerow.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Hot.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Houdahspot.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/HpEasyAdmin.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Hubstaff.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Huly.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Hyperkey.tsx create mode 100644 website/assets/images/app-icon-hammerspoon-60x60@2x.png create mode 100644 website/assets/images/app-icon-handbrake-app-60x60@2x.png create mode 100644 website/assets/images/app-icon-hazel-60x60@2x.png create mode 100644 website/assets/images/app-icon-hazeover-60x60@2x.png create mode 100644 website/assets/images/app-icon-helium-60x60@2x.png create mode 100644 website/assets/images/app-icon-hex-fiend-60x60@2x.png create mode 100644 website/assets/images/app-icon-hey-desktop-60x60@2x.png create mode 100644 website/assets/images/app-icon-hiddenbar-60x60@2x.png create mode 100644 website/assets/images/app-icon-hides-60x60@2x.png create mode 100644 website/assets/images/app-icon-hidock-60x60@2x.png create mode 100644 website/assets/images/app-icon-highlight-ai-60x60@2x.png create mode 100644 website/assets/images/app-icon-hive-app-60x60@2x.png create mode 100644 website/assets/images/app-icon-home-assistant-60x60@2x.png create mode 100644 website/assets/images/app-icon-homerow-60x60@2x.png create mode 100644 website/assets/images/app-icon-hot-60x60@2x.png create mode 100644 website/assets/images/app-icon-houdahspot-60x60@2x.png create mode 100644 website/assets/images/app-icon-hp-easy-admin-60x60@2x.png create mode 100644 website/assets/images/app-icon-hubstaff-60x60@2x.png create mode 100644 website/assets/images/app-icon-huly-60x60@2x.png create mode 100644 website/assets/images/app-icon-hyperkey-60x60@2x.png diff --git a/ee/maintained-apps/inputs/homebrew/hammerspoon.json b/ee/maintained-apps/inputs/homebrew/hammerspoon.json new file mode 100644 index 00000000000..3fb44169142 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/hammerspoon.json @@ -0,0 +1,10 @@ +{ + "name": "Hammerspoon", + "unique_identifier": "org.hammerspoon.Hammerspoon", + "token": "hammerspoon", + "installer_format": "zip", + "slug": "hammerspoon/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/handbrake-app.json b/ee/maintained-apps/inputs/homebrew/handbrake-app.json new file mode 100644 index 00000000000..00262855cc0 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/handbrake-app.json @@ -0,0 +1,10 @@ +{ + "name": "HandBrake", + "unique_identifier": "fr.handbrake.HandBrake", + "token": "handbrake-app", + "installer_format": "dmg", + "slug": "handbrake-app/darwin", + "default_categories": [ + "Developer tools" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/hazel.json b/ee/maintained-apps/inputs/homebrew/hazel.json new file mode 100644 index 00000000000..8ae926871d3 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/hazel.json @@ -0,0 +1,10 @@ +{ + "name": "Hazel", + "unique_identifier": "com.noodlesoft.Hazel", + "token": "hazel", + "installer_format": "dmg", + "slug": "hazel/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/hazeover.json b/ee/maintained-apps/inputs/homebrew/hazeover.json new file mode 100644 index 00000000000..8e9ffb7933d --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/hazeover.json @@ -0,0 +1,10 @@ +{ + "name": "HazeOver", + "unique_identifier": "com.pointum.hazeover", + "token": "hazeover", + "installer_format": "dmg", + "slug": "hazeover/darwin", + "default_categories": [ + "Utilities" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/helium.json b/ee/maintained-apps/inputs/homebrew/helium.json new file mode 100644 index 00000000000..9fff0c5ac67 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/helium.json @@ -0,0 +1,10 @@ +{ + "name": "Helium", + "unique_identifier": "com.koushikdutta.Helium", + "token": "helium", + "installer_format": "zip", + "slug": "helium/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/hex-fiend.json b/ee/maintained-apps/inputs/homebrew/hex-fiend.json new file mode 100644 index 00000000000..b3b0bebdd60 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/hex-fiend.json @@ -0,0 +1,10 @@ +{ + "name": "Hex Fiend", + "unique_identifier": "com.ridiculousfish.HexFiend", + "token": "hex-fiend", + "installer_format": "dmg", + "slug": "hex-fiend/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/hey-desktop.json b/ee/maintained-apps/inputs/homebrew/hey-desktop.json new file mode 100644 index 00000000000..139a38bb4e0 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/hey-desktop.json @@ -0,0 +1,10 @@ +{ + "name": "HEY", + "unique_identifier": "com.hey.app.desktop", + "token": "hey-desktop", + "installer_format": "zip", + "slug": "hey-desktop/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/hiddenbar.json b/ee/maintained-apps/inputs/homebrew/hiddenbar.json new file mode 100644 index 00000000000..0f0bff34167 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/hiddenbar.json @@ -0,0 +1,10 @@ +{ + "name": "Hidden Bar", + "unique_identifier": "com.dwarvesv.minimalbar", + "token": "hiddenbar", + "installer_format": "zip", + "slug": "hiddenbar/darwin", + "default_categories": [ + "Developer tools" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/hides.json b/ee/maintained-apps/inputs/homebrew/hides.json new file mode 100644 index 00000000000..aff62d00220 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/hides.json @@ -0,0 +1,10 @@ +{ + "name": "Hides", + "unique_identifier": "com.sweetpproductions.Hides", + "token": "hides", + "installer_format": "dmg", + "slug": "hides/darwin", + "default_categories": [ + "Developer tools" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/hidock.json b/ee/maintained-apps/inputs/homebrew/hidock.json new file mode 100644 index 00000000000..4156d76108e --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/hidock.json @@ -0,0 +1,10 @@ +{ + "name": "HiDock", + "unique_identifier": "design.rafa.HiDock", + "token": "hidock", + "installer_format": "zip", + "slug": "hidock/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/highlight-ai.json b/ee/maintained-apps/inputs/homebrew/highlight-ai.json new file mode 100644 index 00000000000..ff3105bc9ea --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/highlight-ai.json @@ -0,0 +1,10 @@ +{ + "name": "Highlight", + "unique_identifier": "tv.medal.highlight", + "token": "highlight-ai", + "installer_format": "dmg", + "slug": "highlight-ai/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/hive-app.json b/ee/maintained-apps/inputs/homebrew/hive-app.json new file mode 100644 index 00000000000..21982f84edf --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/hive-app.json @@ -0,0 +1,10 @@ +{ + "name": "Hive", + "unique_identifier": "com.hive.app", + "token": "hive-app", + "installer_format": "dmg", + "slug": "hive-app/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/home-assistant.json b/ee/maintained-apps/inputs/homebrew/home-assistant.json new file mode 100644 index 00000000000..b9e671f51bb --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/home-assistant.json @@ -0,0 +1,10 @@ +{ + "name": "Home Assistant", + "unique_identifier": "io.robbie.HomeAssistant", + "token": "home-assistant", + "installer_format": "zip", + "slug": "home-assistant/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/homerow.json b/ee/maintained-apps/inputs/homebrew/homerow.json new file mode 100644 index 00000000000..8c3c246503c --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/homerow.json @@ -0,0 +1,10 @@ +{ + "name": "Homerow", + "unique_identifier": "com.superultra.Homerow", + "token": "homerow", + "installer_format": "zip", + "slug": "homerow/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/hot.json b/ee/maintained-apps/inputs/homebrew/hot.json new file mode 100644 index 00000000000..eded1eb4070 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/hot.json @@ -0,0 +1,10 @@ +{ + "name": "Hot", + "unique_identifier": "com.xs-labs.Hot", + "token": "hot", + "installer_format": "zip", + "slug": "hot/darwin", + "default_categories": [ + "Utilities" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/houdahspot.json b/ee/maintained-apps/inputs/homebrew/houdahspot.json new file mode 100644 index 00000000000..55b0bfe60fd --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/houdahspot.json @@ -0,0 +1,10 @@ +{ + "name": "HoudahSpot", + "unique_identifier": "com.houdah.HoudahSpot6", + "token": "houdahspot", + "installer_format": "dmg", + "slug": "houdahspot/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/hp-easy-admin.json b/ee/maintained-apps/inputs/homebrew/hp-easy-admin.json new file mode 100644 index 00000000000..97e19c8dfae --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/hp-easy-admin.json @@ -0,0 +1,10 @@ +{ + "name": "HP Easy Admin", + "unique_identifier": "com.hp.hp-easy-admin", + "token": "hp-easy-admin", + "installer_format": "zip", + "slug": "hp-easy-admin/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/hubstaff.json b/ee/maintained-apps/inputs/homebrew/hubstaff.json new file mode 100644 index 00000000000..048d8bbbf82 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/hubstaff.json @@ -0,0 +1,10 @@ +{ + "name": "Hubstaff", + "unique_identifier": "com.netsoft.Hubstaff", + "token": "hubstaff", + "installer_format": "dmg", + "slug": "hubstaff/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/huly.json b/ee/maintained-apps/inputs/homebrew/huly.json new file mode 100644 index 00000000000..0ab29747a56 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/huly.json @@ -0,0 +1,10 @@ +{ + "name": "Huly", + "unique_identifier": "hc.hcengineering.Huly", + "token": "huly", + "installer_format": "zip", + "slug": "huly/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/hyperkey.json b/ee/maintained-apps/inputs/homebrew/hyperkey.json new file mode 100644 index 00000000000..12a5f7a2974 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/hyperkey.json @@ -0,0 +1,10 @@ +{ + "name": "Hyperkey", + "unique_identifier": "com.knollsoft.Hyperkey", + "token": "hyperkey", + "installer_format": "dmg", + "slug": "hyperkey/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/outputs/apps.json b/ee/maintained-apps/outputs/apps.json index c6c822b710f..1d1bb255d04 100644 --- a/ee/maintained-apps/outputs/apps.json +++ b/ee/maintained-apps/outputs/apps.json @@ -1422,6 +1422,139 @@ "unique_identifier": "com.electron.dialer", "description": "Groove OmniDialer is an outbound sales dialer for making and managing calls." }, + { + "name": "Hammerspoon", + "slug": "hammerspoon/darwin", + "platform": "darwin", + "unique_identifier": "org.hammerspoon.Hammerspoon", + "description": "Hammerspoon is a desktop automation application." + }, + { + "name": "HandBrake", + "slug": "handbrake-app/darwin", + "platform": "darwin", + "unique_identifier": "fr.handbrake.HandBrake", + "description": "HandBrake is an open-source video transcoder." + }, + { + "name": "Hazel", + "slug": "hazel/darwin", + "platform": "darwin", + "unique_identifier": "com.noodlesoft.Hazel", + "description": "Hazel is an automated organisation." + }, + { + "name": "HazeOver", + "slug": "hazeover/darwin", + "platform": "darwin", + "unique_identifier": "com.pointum.hazeover", + "description": "HazeOver is a windows manager and desktop organiser." + }, + { + "name": "Helium", + "slug": "helium/darwin", + "platform": "darwin", + "unique_identifier": "com.koushikdutta.Helium", + "description": "Helium is a macOS application." + }, + { + "name": "Hex Fiend", + "slug": "hex-fiend/darwin", + "platform": "darwin", + "unique_identifier": "com.ridiculousfish.HexFiend", + "description": "Hex Fiend is a hex editor focussing on speed." + }, + { + "name": "HEY", + "slug": "hey-desktop/darwin", + "platform": "darwin", + "unique_identifier": "com.hey.app.desktop", + "description": "HEY is an access the HEY email service." + }, + { + "name": "Hidden Bar", + "slug": "hiddenbar/darwin", + "platform": "darwin", + "unique_identifier": "com.dwarvesv.minimalbar", + "description": "Hidden Bar is a utility to hide menu bar items." + }, + { + "name": "Hides", + "slug": "hides/darwin", + "platform": "darwin", + "unique_identifier": "com.sweetpproductions.Hides", + "description": "Hides is an app to hide all open apps except the current one." + }, + { + "name": "HiDock", + "slug": "hidock/darwin", + "platform": "darwin", + "unique_identifier": "design.rafa.HiDock", + "description": "HiDock is a set custom Dock settings for when on different displays." + }, + { + "name": "Highlight", + "slug": "highlight-ai/darwin", + "platform": "darwin", + "unique_identifier": "tv.medal.highlight", + "description": "Highlight is a context-aware AI assistant." + }, + { + "name": "Hive", + "slug": "hive-app/darwin", + "platform": "darwin", + "unique_identifier": "com.hive.app", + "description": "Hive is an AI agent orchestrator for parallel coding across projects." + }, + { + "name": "Home Assistant", + "slug": "home-assistant/darwin", + "platform": "darwin", + "unique_identifier": "io.robbie.HomeAssistant", + "description": "Home Assistant is a companion app for Home Assistant home automation software." + }, + { + "name": "Homerow", + "slug": "homerow/darwin", + "platform": "darwin", + "unique_identifier": "com.superultra.Homerow", + "description": "Homerow is a keyboard shortcuts for every button on your screen." + }, + { + "name": "Hot", + "slug": "hot/darwin", + "platform": "darwin", + "unique_identifier": "com.xs-labs.Hot", + "description": "Hot is a menu bar application that displays the CPU speed limit due to thermal issues." + }, + { + "name": "HoudahSpot", + "slug": "houdahspot/darwin", + "platform": "darwin", + "unique_identifier": "com.houdah.HoudahSpot6", + "description": "HoudahSpot is a file searching application." + }, + { + "name": "HP Easy Admin", + "slug": "hp-easy-admin/darwin", + "platform": "darwin", + "unique_identifier": "com.hp.hp-easy-admin", + "description": "HP Easy Admin is a tool to directly download HP printing and/or scanning drivers." + }, + { + "name": "Hubstaff", + "slug": "hubstaff/darwin", + "platform": "darwin", + "unique_identifier": "com.netsoft.Hubstaff", + "description": "Hubstaff is a work time tracker." + }, + { + "name": "Huly", + "slug": "huly/darwin", + "platform": "darwin", + "unique_identifier": "hc.hcengineering.Huly", + "description": "Huly is an All-in-One Project Management Platform." + }, { "name": "Hyper", "slug": "hyper/darwin", @@ -1429,6 +1562,13 @@ "unique_identifier": "co.zeit.hyper", "description": "Hyper is a terminal built on web technologies." }, + { + "name": "Hyperkey", + "slug": "hyperkey/darwin", + "platform": "darwin", + "unique_identifier": "com.knollsoft.Hyperkey", + "description": "Hyperkey is a tool to convert your caps lock key or any of your modifier keys to the hyper key." + }, { "name": "IBM Notifier", "slug": "ibm-notifier/darwin", diff --git a/ee/maintained-apps/outputs/hammerspoon/darwin.json b/ee/maintained-apps/outputs/hammerspoon/darwin.json new file mode 100644 index 00000000000..4c100b55d06 --- /dev/null +++ b/ee/maintained-apps/outputs/hammerspoon/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "1.1.1", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'org.hammerspoon.Hammerspoon';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'org.hammerspoon.Hammerspoon' AND version_compare(bundle_short_version, '1.1.1') < 0);" + }, + "installer_url": "https://github.com/Hammerspoon/hammerspoon/releases/download/1.1.1/Hammerspoon-1.1.1.zip", + "install_script_ref": "148caa41", + "uninstall_script_ref": "6f1bdf8d", + "sha256": "11bb1c90faf5427f37c7bd4fe7eab9774ae43e1d5cb020c5b3088dac32849efa", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "148caa41": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nunzip \"$INSTALLER_PATH\" -d \"$TMPDIR\"\n# copy to the applications folder\nquit_and_track_application 'org.hammerspoon.Hammerspoon'\nif [ -d \"$APPDIR/Hammerspoon.app\" ]; then\n\tsudo mv \"$APPDIR/Hammerspoon.app\" \"$TMPDIR/Hammerspoon.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Hammerspoon.app\" \"$APPDIR\"\nrelaunch_application 'org.hammerspoon.Hammerspoon'\n", + "6f1bdf8d": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nquit_application 'org.hammerspoon.Hammerspoon'\nsudo rm -rf \"$APPDIR/Hammerspoon.app\"\ntrash $LOGGED_IN_USER '~/.hammerspoon'\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.crashlytics/org.hammerspoon.Hammerspoon'\ntrash $LOGGED_IN_USER '~/Library/Caches/org.hammerspoon.Hammerspoon'\ntrash $LOGGED_IN_USER '~/Library/Preferences/org.hammerspoon.Hammerspoon.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/org.hammerspoon.Hammerspoon.savedState'\n" + } +} diff --git a/ee/maintained-apps/outputs/handbrake-app/darwin.json b/ee/maintained-apps/outputs/handbrake-app/darwin.json new file mode 100644 index 00000000000..c35f1b73964 --- /dev/null +++ b/ee/maintained-apps/outputs/handbrake-app/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "1.11.2", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'fr.handbrake.HandBrake';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'fr.handbrake.HandBrake' AND version_compare(bundle_short_version, '1.11.2') < 0);" + }, + "installer_url": "https://handbrake.fr/rotation.php?file=HandBrake-1.11.2.dmg&update=true", + "install_script_ref": "fe8401db", + "uninstall_script_ref": "617fb34b", + "sha256": "4afe27aaa77a7bbb0dcda1a335d96a5f53649f2649fb84de6982ffecc35de9d7", + "default_categories": [ + "Developer tools" + ] + } + ], + "refs": { + "617fb34b": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/HandBrake.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.apple.sharedfilelist/com.apple.LSSharedFileList.ApplicationRecentDocuments/fr.handbrake.handbrake.sfl*'\ntrash $LOGGED_IN_USER '~/Library/Application Support/HandBrake'\ntrash $LOGGED_IN_USER '~/Library/Caches/fr.handbrake.HandBrake'\ntrash $LOGGED_IN_USER '~/Library/Preferences/fr.handbrake.HandBrake.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/fr.handbrake.HandBrake.savedState'\n", + "fe8401db": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# copy to the applications folder\nquit_and_track_application 'fr.handbrake.HandBrake'\nif [ -d \"$APPDIR/HandBrake.app\" ]; then\n\tsudo mv \"$APPDIR/HandBrake.app\" \"$TMPDIR/HandBrake.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/HandBrake.app\" \"$APPDIR\"\nrelaunch_application 'fr.handbrake.HandBrake'\n" + } +} diff --git a/ee/maintained-apps/outputs/hazel/darwin.json b/ee/maintained-apps/outputs/hazel/darwin.json new file mode 100644 index 00000000000..9595ab17e89 --- /dev/null +++ b/ee/maintained-apps/outputs/hazel/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "6.1.2", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.noodlesoft.Hazel';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.noodlesoft.Hazel' AND version_compare(bundle_short_version, '6.1.2') < 0);" + }, + "installer_url": "https://s3.amazonaws.com/Noodlesoft/Hazel-6.1.2.dmg", + "install_script_ref": "ff783450", + "uninstall_script_ref": "6479533e", + "sha256": "5f169b65ef2527901119187559c40fd17d693d8db723b738f3b8dbe3ab9f5726", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "6479533e": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nquit_application '86Z3GCJ4MF.com.noodlesoft.HazelHelper'\nsudo rm -rf \"$APPDIR/Hazel.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/Hazel'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.noodlesoft.HazelHelper'\ntrash $LOGGED_IN_USER '~/Library/Logs/Hazel'\ntrash $LOGGED_IN_USER '~/Library/Preferences/86Z3GCJ4MF.com.noodlesoft.HazelHelper.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.noodlesoft.Hazel.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.noodlesoft.HazelHelper.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.noodlesoft.Hazel.savedState'\n", + "ff783450": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# copy to the applications folder\nquit_and_track_application 'com.noodlesoft.Hazel'\nif [ -d \"$APPDIR/Hazel.app\" ]; then\n\tsudo mv \"$APPDIR/Hazel.app\" \"$TMPDIR/Hazel.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Hazel.app\" \"$APPDIR\"\nrelaunch_application 'com.noodlesoft.Hazel'\n" + } +} diff --git a/ee/maintained-apps/outputs/hazeover/darwin.json b/ee/maintained-apps/outputs/hazeover/darwin.json new file mode 100644 index 00000000000..544f0d40df8 --- /dev/null +++ b/ee/maintained-apps/outputs/hazeover/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "1.9.7", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.pointum.hazeover';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.pointum.hazeover' AND version_compare(bundle_short_version, '1.9.7') < 0);" + }, + "installer_url": "https://hazeover.com/HazeOver.dmg", + "install_script_ref": "7e47c62b", + "uninstall_script_ref": "0f1226ba", + "sha256": "no_check", + "default_categories": [ + "Utilities" + ] + } + ], + "refs": { + "0f1226ba": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nremove_launchctl_service() {\n local service=\"$1\"\n local booleans=(\"true\" \"false\")\n local plist_status\n local paths\n local should_sudo\n\n echo \"Removing launchctl service ${service}\"\n\n for should_sudo in \"${booleans[@]}\"; do\n plist_status=$(launchctl list \"${service}\" 2>/dev/null)\n\n if [[ $plist_status == \\{* ]]; then\n if [[ $should_sudo == \"true\" ]]; then\n sudo launchctl remove \"${service}\"\n else\n launchctl remove \"${service}\"\n fi\n sleep 1\n fi\n\n paths=(\n \"/Library/LaunchAgents/${service}.plist\"\n \"/Library/LaunchDaemons/${service}.plist\"\n )\n\n # if not using sudo, prepend the home directory to the paths\n if [[ $should_sudo == \"false\" ]]; then\n for i in \"${!paths[@]}\"; do\n paths[i]=\"${HOME}${paths[i]}\"\n done\n fi\n\n for path in \"${paths[@]}\"; do\n if [[ -e \"$path\" ]]; then\n if [[ $should_sudo == \"true\" ]]; then\n sudo rm -f -- \"$path\"\n else\n rm -f -- \"$path\"\n fi\n fi\n done\n done\n}\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nremove_launchctl_service 'com.pointum.hazeover.launcher'\nquit_application 'com.pointum.hazeover'\nsudo rm -rf \"$APPDIR/HazeOver.app\"\ntrash $LOGGED_IN_USER '~/Library/Caches/com.pointum.hazeover'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.pointum.hazeover'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.pointum.hazeover.plist'\n", + "7e47c62b": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# copy to the applications folder\nquit_and_track_application 'com.pointum.hazeover'\nif [ -d \"$APPDIR/HazeOver.app\" ]; then\n\tsudo mv \"$APPDIR/HazeOver.app\" \"$TMPDIR/HazeOver.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/HazeOver.app\" \"$APPDIR\"\nrelaunch_application 'com.pointum.hazeover'\n" + } +} diff --git a/ee/maintained-apps/outputs/helium/darwin.json b/ee/maintained-apps/outputs/helium/darwin.json new file mode 100644 index 00000000000..22baeaaa5d9 --- /dev/null +++ b/ee/maintained-apps/outputs/helium/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "1.0.0", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.koushikdutta.Helium';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.koushikdutta.Helium' AND version_compare(bundle_short_version, '1.0.0') < 0);" + }, + "installer_url": "https://github.com/koush/CarbonResources/releases/download/v1.0.0/carbon-mac.zip", + "install_script_ref": "f0fe68cc", + "uninstall_script_ref": "693e2f07", + "sha256": "30abcdcb04e53f24948897acfd24899c7cdfca564b71b023224ae13f11365bbd", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "693e2f07": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nquit_application 'com.koushikdutta.Helium'\nsudo rm -rf \"$APPDIR/Helium.app\"\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.koushikdutta.Helium.savedState'\n", + "f0fe68cc": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nunzip \"$INSTALLER_PATH\" -d \"$TMPDIR\"\n# copy to the applications folder\nquit_and_track_application 'com.koushikdutta.Helium'\nif [ -d \"$APPDIR/Helium.app\" ]; then\n\tsudo mv \"$APPDIR/Helium.app\" \"$TMPDIR/Helium.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Helium.app\" \"$APPDIR\"\nrelaunch_application 'com.koushikdutta.Helium'\n" + } +} diff --git a/ee/maintained-apps/outputs/hex-fiend/darwin.json b/ee/maintained-apps/outputs/hex-fiend/darwin.json new file mode 100644 index 00000000000..55cdf0d0045 --- /dev/null +++ b/ee/maintained-apps/outputs/hex-fiend/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "2.18.1", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.ridiculousfish.HexFiend';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.ridiculousfish.HexFiend' AND version_compare(bundle_short_version, '2.18.1') < 0);" + }, + "installer_url": "https://github.com/ridiculousfish/HexFiend/releases/download/v2.18.1/Hex_Fiend_2.18.1.dmg", + "install_script_ref": "71c5b95d", + "uninstall_script_ref": "56aea7f8", + "sha256": "837041623a21eaae59b9b6c0bb7f75533938ab96580861ee7e276bb926e0e076", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "56aea7f8": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Hex Fiend.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.apple.sharedfilelist/com.apple.LSSharedFileList.ApplicationRecentDocuments/com.ridiculousfish.hexfiend.sfl*'\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.ridiculousfish.HexFiend'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.ridiculousfish.HexFiend'\ntrash $LOGGED_IN_USER '~/Library/Cookies/com.ridiculousfish.HexFiend.binarycookies'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.ridiculousfish.HexFiend.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.ridiculousfish.HexFiend.savedState'\n", + "71c5b95d": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# copy to the applications folder\nquit_and_track_application 'com.ridiculousfish.HexFiend'\nif [ -d \"$APPDIR/Hex Fiend.app\" ]; then\n\tsudo mv \"$APPDIR/Hex Fiend.app\" \"$TMPDIR/Hex Fiend.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Hex Fiend.app\" \"$APPDIR\"\nrelaunch_application 'com.ridiculousfish.HexFiend'\n" + } +} diff --git a/ee/maintained-apps/outputs/hey-desktop/darwin.json b/ee/maintained-apps/outputs/hey-desktop/darwin.json new file mode 100644 index 00000000000..acd1a471708 --- /dev/null +++ b/ee/maintained-apps/outputs/hey-desktop/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "1.3.3", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.hey.app.desktop';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.hey.app.desktop' AND version_compare(bundle_short_version, '1.3.3') < 0);" + }, + "installer_url": "https://hey.com/desktop/HEY-1.3.3-arm64-mac.zip", + "install_script_ref": "2601e763", + "uninstall_script_ref": "4b55afa9", + "sha256": "dd20814f404850484721db5af932b1ef7e5335b4208a9e8e42421703096f049c", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "2601e763": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nunzip \"$INSTALLER_PATH\" -d \"$TMPDIR\"\n# copy to the applications folder\nquit_and_track_application 'com.hey.app.desktop'\nif [ -d \"$APPDIR/HEY.app\" ]; then\n\tsudo mv \"$APPDIR/HEY.app\" \"$TMPDIR/HEY.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/HEY.app\" \"$APPDIR\"\nrelaunch_application 'com.hey.app.desktop'\n", + "4b55afa9": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/HEY.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/HEY'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.hey.app.desktop.plist'\n" + } +} diff --git a/ee/maintained-apps/outputs/hiddenbar/darwin.json b/ee/maintained-apps/outputs/hiddenbar/darwin.json new file mode 100644 index 00000000000..8942c486030 --- /dev/null +++ b/ee/maintained-apps/outputs/hiddenbar/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "1.10", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.dwarvesv.minimalbar';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.dwarvesv.minimalbar' AND version_compare(bundle_short_version, '1.10') < 0);" + }, + "installer_url": "https://github.com/dwarvesf/hidden/releases/download/v1.10/Hidden-Bar-v1.10-macos.zip", + "install_script_ref": "0a0fdf38", + "uninstall_script_ref": "144f96c5", + "sha256": "a8a5f5299fdfab52bdffb2f5728a76d4cba690754e9b3b12f27bd38f2e76c0bc", + "default_categories": [ + "Developer tools" + ] + } + ], + "refs": { + "0a0fdf38": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nunzip \"$INSTALLER_PATH\" -d \"$TMPDIR\"\n# copy to the applications folder\nquit_and_track_application 'com.dwarvesv.minimalbar'\nif [ -d \"$APPDIR/Hidden Bar.app\" ]; then\n\tsudo mv \"$APPDIR/Hidden Bar.app\" \"$TMPDIR/Hidden Bar.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Hidden Bar.app\" \"$APPDIR\"\nrelaunch_application 'com.dwarvesv.minimalbar'\n", + "144f96c5": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nremove_launchctl_service() {\n local service=\"$1\"\n local booleans=(\"true\" \"false\")\n local plist_status\n local paths\n local should_sudo\n\n echo \"Removing launchctl service ${service}\"\n\n for should_sudo in \"${booleans[@]}\"; do\n plist_status=$(launchctl list \"${service}\" 2>/dev/null)\n\n if [[ $plist_status == \\{* ]]; then\n if [[ $should_sudo == \"true\" ]]; then\n sudo launchctl remove \"${service}\"\n else\n launchctl remove \"${service}\"\n fi\n sleep 1\n fi\n\n paths=(\n \"/Library/LaunchAgents/${service}.plist\"\n \"/Library/LaunchDaemons/${service}.plist\"\n )\n\n # if not using sudo, prepend the home directory to the paths\n if [[ $should_sudo == \"false\" ]]; then\n for i in \"${!paths[@]}\"; do\n paths[i]=\"${HOME}${paths[i]}\"\n done\n fi\n\n for path in \"${paths[@]}\"; do\n if [[ -e \"$path\" ]]; then\n if [[ $should_sudo == \"true\" ]]; then\n sudo rm -f -- \"$path\"\n else\n rm -f -- \"$path\"\n fi\n fi\n done\n done\n}\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nremove_launchctl_service 'com.dwarvesv.LauncherApplication'\nquit_application 'com.dwarvesv.minimalbar'\nsudo rm -rf \"$APPDIR/Hidden Bar.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/com.dwarvesv.LauncherApplication'\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/com.dwarvesv.minimalbar'\ntrash $LOGGED_IN_USER '~/Library/Containers/com.dwarvesv.LauncherApplication'\ntrash $LOGGED_IN_USER '~/Library/Containers/com.dwarvesv.minimalbar'\n" + } +} diff --git a/ee/maintained-apps/outputs/hides/darwin.json b/ee/maintained-apps/outputs/hides/darwin.json new file mode 100644 index 00000000000..b1b24715f88 --- /dev/null +++ b/ee/maintained-apps/outputs/hides/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "7.3", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.sweetpproductions.Hides';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.sweetpproductions.Hides' AND version_compare(bundle_short_version, '7.3') < 0);" + }, + "installer_url": "https://sweetpproductions.com/products/hides/Hides.dmg", + "install_script_ref": "c07e8f53", + "uninstall_script_ref": "7e456b27", + "sha256": "no_check", + "default_categories": [ + "Developer tools" + ] + } + ], + "refs": { + "7e456b27": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Hides.app\"\ntrash $LOGGED_IN_USER '~/Library/Containers/com.sweetpproductions.Hides'\ntrash $LOGGED_IN_USER '~/Library/Group Containers/*.com.sweetpproductions.Hides'\n", + "c07e8f53": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# copy to the applications folder\nquit_and_track_application 'com.sweetpproductions.Hides'\nif [ -d \"$APPDIR/Hides.app\" ]; then\n\tsudo mv \"$APPDIR/Hides.app\" \"$TMPDIR/Hides.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Hides.app\" \"$APPDIR\"\nrelaunch_application 'com.sweetpproductions.Hides'\n" + } +} diff --git a/ee/maintained-apps/outputs/hidock/darwin.json b/ee/maintained-apps/outputs/hidock/darwin.json new file mode 100644 index 00000000000..57219c98e71 --- /dev/null +++ b/ee/maintained-apps/outputs/hidock/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "1.4", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'design.rafa.HiDock';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'design.rafa.HiDock' AND version_compare(bundle_short_version, '1.4') < 0);" + }, + "installer_url": "https://hidock.app/HiDock_1.4.zip", + "install_script_ref": "b8bf86ad", + "uninstall_script_ref": "c61194ba", + "sha256": "29e95a7eb061236658ccccbc86c1ba0ee872bf5e627c0fff0a37ca29b056f60e", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "b8bf86ad": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nunzip \"$INSTALLER_PATH\" -d \"$TMPDIR\"\n# copy to the applications folder\nquit_and_track_application 'design.rafa.HiDock'\nif [ -d \"$APPDIR/HiDock.app\" ]; then\n\tsudo mv \"$APPDIR/HiDock.app\" \"$TMPDIR/HiDock.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/HiDock.app\" \"$APPDIR\"\nrelaunch_application 'design.rafa.HiDock'\n", + "c61194ba": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nquit_application 'design.rafa.HiDock'\nquit_application 'design.rafa.HiDock-LaunchAtLoginHelper'\nsudo rm -rf \"$APPDIR/HiDock.app\"\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/design.rafa.HiDock'\ntrash $LOGGED_IN_USER '~/Library/Preferences/design.rafa.HiDock.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/design.rafa.HiDock.savedState'\n" + } +} diff --git a/ee/maintained-apps/outputs/highlight-ai/darwin.json b/ee/maintained-apps/outputs/highlight-ai/darwin.json new file mode 100644 index 00000000000..3442eaf9b9f --- /dev/null +++ b/ee/maintained-apps/outputs/highlight-ai/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "1.3.280", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'tv.medal.highlight';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'tv.medal.highlight' AND version_compare(bundle_short_version, '1.3.280') < 0);" + }, + "installer_url": "https://cdn.highlightai.com/releases/darwin/arm64/Highlight-1.3.280-arm64.dmg", + "install_script_ref": "bb764101", + "uninstall_script_ref": "49c63a27", + "sha256": "07b42c31dd7282f5ab290df0dc7e32a6de57ba6b826a1099bd313b636ac4157d", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "49c63a27": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Highlight.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/Highlight'\ntrash $LOGGED_IN_USER '~/Library/Preferences/tv.medal.highlight.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/tv.medal.highlight.savedState'\n", + "bb764101": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# copy to the applications folder\nquit_and_track_application 'tv.medal.highlight'\nif [ -d \"$APPDIR/Highlight.app\" ]; then\n\tsudo mv \"$APPDIR/Highlight.app\" \"$TMPDIR/Highlight.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Highlight.app\" \"$APPDIR\"\nrelaunch_application 'tv.medal.highlight'\n" + } +} diff --git a/ee/maintained-apps/outputs/hive-app/darwin.json b/ee/maintained-apps/outputs/hive-app/darwin.json new file mode 100644 index 00000000000..826e9d5f5fa --- /dev/null +++ b/ee/maintained-apps/outputs/hive-app/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "1.1.18", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.hive.app';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.hive.app' AND version_compare(bundle_short_version, '1.1.18') < 0);" + }, + "installer_url": "https://github.com/morapelker/hive/releases/download/v1.1.18/Hive-1.1.18-arm64.dmg", + "install_script_ref": "6b39e7ad", + "uninstall_script_ref": "78bb4e43", + "sha256": "5bc89ebcab28c210e5a28cbe6d5b25753f34b6a0724216abd7b4d00ce2876eac", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "6b39e7ad": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# copy to the applications folder\nquit_and_track_application 'com.hive.app'\nif [ -d \"$APPDIR/Hive.app\" ]; then\n\tsudo mv \"$APPDIR/Hive.app\" \"$TMPDIR/Hive.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Hive.app\" \"$APPDIR\"\nrelaunch_application 'com.hive.app'\n", + "78bb4e43": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Hive.app\"\ntrash $LOGGED_IN_USER '~/.hive'\ntrash $LOGGED_IN_USER '~/Library/Application Support/hive'\ntrash $LOGGED_IN_USER '~/Library/Logs/hive'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.hive.app.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.hive.app.savedState'\n" + } +} diff --git a/ee/maintained-apps/outputs/home-assistant/darwin.json b/ee/maintained-apps/outputs/home-assistant/darwin.json new file mode 100644 index 00000000000..816579fb0a2 --- /dev/null +++ b/ee/maintained-apps/outputs/home-assistant/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "2026.4.1", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'io.robbie.HomeAssistant';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'io.robbie.HomeAssistant' AND version_compare(bundle_short_version, '2026.4.1') < 0);" + }, + "installer_url": "https://github.com/home-assistant/iOS/releases/download/release%2F2026.4.1%2F2026.1904/home-assistant-mac.zip", + "install_script_ref": "8e645b2e", + "uninstall_script_ref": "b46351a1", + "sha256": "286ff6deb0b9f5f0017984cee7c0ae5bfc2113e8bf6dd43ea85b596ee588b93b", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "8e645b2e": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nunzip \"$INSTALLER_PATH\" -d \"$TMPDIR\"\n# copy to the applications folder\nquit_and_track_application 'io.robbie.HomeAssistant'\nif [ -d \"$APPDIR/Home Assistant.app\" ]; then\n\tsudo mv \"$APPDIR/Home Assistant.app\" \"$TMPDIR/Home Assistant.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Home Assistant.app\" \"$APPDIR\"\nrelaunch_application 'io.robbie.HomeAssistant'\n", + "b46351a1": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Home Assistant.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/io.robbie.HomeAssistant'\ntrash $LOGGED_IN_USER '~/Library/Containers/io.robbie.HomeAssistant'\ntrash $LOGGED_IN_USER '~/Library/Group Containers/group.io.robbie.homeassistant'\n" + } +} diff --git a/ee/maintained-apps/outputs/homerow/darwin.json b/ee/maintained-apps/outputs/homerow/darwin.json new file mode 100644 index 00000000000..4e0dc8aa44b --- /dev/null +++ b/ee/maintained-apps/outputs/homerow/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "1.5.3", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.superultra.Homerow';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.superultra.Homerow' AND version_compare(bundle_short_version, '1.5.3') < 0);" + }, + "installer_url": "https://builds.homerow.app/v1.5.3/Homerow.zip", + "install_script_ref": "74e1a87a", + "uninstall_script_ref": "68dfdaa9", + "sha256": "39616e577d74459d2a095e2da571fce2e528d5375615abf102b8080c1f091c6b", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "68dfdaa9": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Homerow.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/com.superultra.HomerowLauncher'\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.superultra.Homerow'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.superultra.Homerow'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.superultra.Homerow'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.superultra.Homerow.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.superultra.Homerow.savedState'\n", + "74e1a87a": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nunzip \"$INSTALLER_PATH\" -d \"$TMPDIR\"\n# copy to the applications folder\nquit_and_track_application 'com.superultra.Homerow'\nif [ -d \"$APPDIR/Homerow.app\" ]; then\n\tsudo mv \"$APPDIR/Homerow.app\" \"$TMPDIR/Homerow.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Homerow.app\" \"$APPDIR\"\nrelaunch_application 'com.superultra.Homerow'\n" + } +} diff --git a/ee/maintained-apps/outputs/hot/darwin.json b/ee/maintained-apps/outputs/hot/darwin.json new file mode 100644 index 00000000000..7f4054968d9 --- /dev/null +++ b/ee/maintained-apps/outputs/hot/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "1.9.4", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.xs-labs.Hot';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.xs-labs.Hot' AND version_compare(bundle_short_version, '1.9.4') < 0);" + }, + "installer_url": "https://github.com/macmade/Hot/releases/download/1.9.4/Hot.zip", + "install_script_ref": "7d376c3f", + "uninstall_script_ref": "5ac2fab1", + "sha256": "e4f6ccf7606673ee611870bfb1d4cc8be86a508058db8f9bb5cf41e997ed61ca", + "default_categories": [ + "Utilities" + ] + } + ], + "refs": { + "5ac2fab1": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Hot.app\"\ntrash $LOGGED_IN_USER '~/Library/Caches/com.xs-labs.Hot'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.xs-labs.Hot.plist'\n", + "7d376c3f": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nunzip \"$INSTALLER_PATH\" -d \"$TMPDIR\"\n# copy to the applications folder\nquit_and_track_application 'com.xs-labs.Hot'\nif [ -d \"$APPDIR/Hot.app\" ]; then\n\tsudo mv \"$APPDIR/Hot.app\" \"$TMPDIR/Hot.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Hot.app\" \"$APPDIR\"\nrelaunch_application 'com.xs-labs.Hot'\n" + } +} diff --git a/ee/maintained-apps/outputs/houdahspot/darwin.json b/ee/maintained-apps/outputs/houdahspot/darwin.json new file mode 100644 index 00000000000..535b7f6364c --- /dev/null +++ b/ee/maintained-apps/outputs/houdahspot/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "6.8.1", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.houdah.HoudahSpot6';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.houdah.HoudahSpot6' AND version_compare(bundle_short_version, '6.8.1') < 0);" + }, + "installer_url": "https://dl.houdah.com/houdahSpot/updates/cast_assets/906c763d-9739-48da-a68a-d43b144c0a92/HoudahSpot_6.8.1.dmg", + "install_script_ref": "9a0ba4bc", + "uninstall_script_ref": "c4ab567f", + "sha256": "0b014bed899f45302010767e3988e1f0fa98d28427287d178811599da7028ce0", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "9a0ba4bc": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# copy to the applications folder\nquit_and_track_application 'com.houdah.HoudahSpot6'\nif [ -d \"$APPDIR/HoudahSpot.app\" ]; then\n\tsudo mv \"$APPDIR/HoudahSpot.app\" \"$TMPDIR/HoudahSpot.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/HoudahSpot.app\" \"$APPDIR\"\nrelaunch_application 'com.houdah.HoudahSpot6'\n", + "c4ab567f": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/HoudahSpot.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/com.houdah.HoudahSpot6.FinderExtension'\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/com.houdah.HoudahSpot6.HoudahSpotQuickAction'\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.houdah.HoudahSpot6'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.houdah.HoudahSpot6'\ntrash $LOGGED_IN_USER '~/Library/Containers/com.houdah.HoudahSpot6.FinderExtension'\ntrash $LOGGED_IN_USER '~/Library/Containers/com.houdah.HoudahSpot6.HoudahSpotQuickAction'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.houdah.HoudahSpot6'\ntrash $LOGGED_IN_USER '~/Library/Mail/Bundles/HoudahSpotMailPlugin.mailbundle'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.houdah.HoudahSpot6.plist'\n" + } +} diff --git a/ee/maintained-apps/outputs/hp-easy-admin/darwin.json b/ee/maintained-apps/outputs/hp-easy-admin/darwin.json new file mode 100644 index 00000000000..0562b2f57f1 --- /dev/null +++ b/ee/maintained-apps/outputs/hp-easy-admin/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "2.16.0", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.hp.hp-easy-admin';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.hp.hp-easy-admin' AND version_compare(bundle_short_version, '2.16.0') < 0);" + }, + "installer_url": "https://ftp.hp.com/pub/softlib/software12/HP_Quick_Start/osx/Applications/HP_Easy_Admin.app.zip", + "install_script_ref": "3a651bdc", + "uninstall_script_ref": "2bc9a4ad", + "sha256": "no_check", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "2bc9a4ad": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/HP Easy Admin.app\"\ntrash $LOGGED_IN_USER '~/Library/Caches/com.hp.hp-easy-admin'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.hp.hp-easy-admin'\ntrash $LOGGED_IN_USER '~/Library/Logs/HP Easy Admin.log'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.hp.hp-easy-admin.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.hp.hp-easy-admin.savedState'\n", + "3a651bdc": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nunzip \"$INSTALLER_PATH\" -d \"$TMPDIR\"\n# copy to the applications folder\nquit_and_track_application 'com.hp.hp-easy-admin'\nif [ -d \"$APPDIR/HP Easy Admin.app\" ]; then\n\tsudo mv \"$APPDIR/HP Easy Admin.app\" \"$TMPDIR/HP Easy Admin.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/HP Easy Admin.app\" \"$APPDIR\"\nrelaunch_application 'com.hp.hp-easy-admin'\n" + } +} diff --git a/ee/maintained-apps/outputs/hubstaff/darwin.json b/ee/maintained-apps/outputs/hubstaff/darwin.json new file mode 100644 index 00000000000..dd56ff4f52d --- /dev/null +++ b/ee/maintained-apps/outputs/hubstaff/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "1.9.2", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.netsoft.Hubstaff';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.netsoft.Hubstaff' AND version_compare(bundle_short_version, '1.9.2') < 0);" + }, + "installer_url": "https://app.hubstaff.com/download/12156-standard-mac-os-x-1-9-2-release/dmg?architecture=arm64", + "install_script_ref": "98c8a835", + "uninstall_script_ref": "f0b8a143", + "sha256": "c47c1fd6250770844cf9a85437861a5e17967a279e90de21f5c5bdb9085c0c8e", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "98c8a835": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# copy to the applications folder\nquit_and_track_application 'com.netsoft.Hubstaff'\nif [ -d \"$APPDIR/Hubstaff.app\" ]; then\n\tsudo mv \"$APPDIR/Hubstaff.app\" \"$TMPDIR/Hubstaff.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Hubstaff.app\" \"$APPDIR\"\nrelaunch_application 'com.netsoft.Hubstaff'\n", + "f0b8a143": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Hubstaff.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/Hubstaff'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.netsoft.Hubstaff.plist'\n" + } +} diff --git a/ee/maintained-apps/outputs/huly/darwin.json b/ee/maintained-apps/outputs/huly/darwin.json new file mode 100644 index 00000000000..457a24439aa --- /dev/null +++ b/ee/maintained-apps/outputs/huly/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "0.7.423", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'hc.hcengineering.Huly';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'hc.hcengineering.Huly' AND version_compare(bundle_short_version, '0.7.423') < 0);" + }, + "installer_url": "https://dist.huly.io/Huly-macos-0.7.423-arm64.zip", + "install_script_ref": "fc10469f", + "uninstall_script_ref": "367bd3f8", + "sha256": "e3721316549ecc2f5097607eeec67d33f2e47eacbc2665db748a258ec41a2d73", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "367bd3f8": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Huly.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.apple.sharedfilelist/com.apple.LSSharedFileList.ApplicationRecentDocuments/hc.hcengineering.huly.sfl*'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Huly Desktop'\ntrash $LOGGED_IN_USER '~/Library/Logs/Huly Desktop'\ntrash $LOGGED_IN_USER '~/Library/Preferences/hc.hcengineering.Huly.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/hc.hcengineering.Huly.savedState'\n", + "fc10469f": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nunzip \"$INSTALLER_PATH\" -d \"$TMPDIR\"\n# copy to the applications folder\nquit_and_track_application 'hc.hcengineering.Huly'\nif [ -d \"$APPDIR/Huly.app\" ]; then\n\tsudo mv \"$APPDIR/Huly.app\" \"$TMPDIR/Huly.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Huly.app\" \"$APPDIR\"\nrelaunch_application 'hc.hcengineering.Huly'\n" + } +} diff --git a/ee/maintained-apps/outputs/hyperkey/darwin.json b/ee/maintained-apps/outputs/hyperkey/darwin.json new file mode 100644 index 00000000000..1062fa1c679 --- /dev/null +++ b/ee/maintained-apps/outputs/hyperkey/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "1.56", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.knollsoft.Hyperkey';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.knollsoft.Hyperkey' AND version_compare(bundle_short_version, '1.56') < 0);" + }, + "installer_url": "https://hyperkey.app/downloads/Hyperkey1.56.dmg", + "install_script_ref": "5c184c66", + "uninstall_script_ref": "ae2ed0c6", + "sha256": "5be4f3abb629688795aa87ac6490c1a693b140847bbf36d38362fac97dfb7f1e", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "5c184c66": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# copy to the applications folder\nquit_and_track_application 'com.knollsoft.Hyperkey'\nif [ -d \"$APPDIR/Hyperkey.app\" ]; then\n\tsudo mv \"$APPDIR/Hyperkey.app\" \"$TMPDIR/Hyperkey.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Hyperkey.app\" \"$APPDIR\"\nrelaunch_application 'com.knollsoft.Hyperkey'\n", + "ae2ed0c6": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nquit_application 'com.knollsoft.Hyperkey'\nsudo rm -rf \"$APPDIR/Hyperkey.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/com.knollsoft.HyperkeyLauncher'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Hyperkey'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.knollsoft.Hyperkey'\ntrash $LOGGED_IN_USER '~/Library/Containers/com.knollsoft.HyperkeyLauncher'\ntrash $LOGGED_IN_USER '~/Library/Cookies/com.knollsoft.Hyperkey.binarycookies'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.knollsoft.Hyperkey'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.knollsoft.Hyperkey.binarycookies'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.knollsoft.Hyperkey.plist'\n" + } +} diff --git a/frontend/pages/SoftwarePage/components/icons/Hammerspoon.tsx b/frontend/pages/SoftwarePage/components/icons/Hammerspoon.tsx new file mode 100644 index 00000000000..eed9ff947a6 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Hammerspoon.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Hammerspoon = (props: SVGProps) => ( + + + +); +export default Hammerspoon; diff --git a/frontend/pages/SoftwarePage/components/icons/HandbrakeApp.tsx b/frontend/pages/SoftwarePage/components/icons/HandbrakeApp.tsx new file mode 100644 index 00000000000..7c6010d928d --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/HandbrakeApp.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const HandbrakeApp = (props: SVGProps) => ( + + + +); +export default HandbrakeApp; diff --git a/frontend/pages/SoftwarePage/components/icons/Hazel.tsx b/frontend/pages/SoftwarePage/components/icons/Hazel.tsx new file mode 100644 index 00000000000..46b2079ed9b --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Hazel.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Hazel = (props: SVGProps) => ( + + + +); +export default Hazel; diff --git a/frontend/pages/SoftwarePage/components/icons/Hazeover.tsx b/frontend/pages/SoftwarePage/components/icons/Hazeover.tsx new file mode 100644 index 00000000000..15ccd054a0a --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Hazeover.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Hazeover = (props: SVGProps) => ( + + + +); +export default Hazeover; diff --git a/frontend/pages/SoftwarePage/components/icons/Helium.tsx b/frontend/pages/SoftwarePage/components/icons/Helium.tsx new file mode 100644 index 00000000000..ec4eabae7fd --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Helium.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Helium = (props: SVGProps) => ( + + + +); +export default Helium; diff --git a/frontend/pages/SoftwarePage/components/icons/HexFiend.tsx b/frontend/pages/SoftwarePage/components/icons/HexFiend.tsx new file mode 100644 index 00000000000..c28f692ab30 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/HexFiend.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const HexFiend = (props: SVGProps) => ( + + + +); +export default HexFiend; diff --git a/frontend/pages/SoftwarePage/components/icons/HeyDesktop.tsx b/frontend/pages/SoftwarePage/components/icons/HeyDesktop.tsx new file mode 100644 index 00000000000..acb9347b6ea --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/HeyDesktop.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const HeyDesktop = (props: SVGProps) => ( + + + +); +export default HeyDesktop; diff --git a/frontend/pages/SoftwarePage/components/icons/Hiddenbar.tsx b/frontend/pages/SoftwarePage/components/icons/Hiddenbar.tsx new file mode 100644 index 00000000000..cca0ff6dbaa --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Hiddenbar.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Hiddenbar = (props: SVGProps) => ( + + + +); +export default Hiddenbar; diff --git a/frontend/pages/SoftwarePage/components/icons/Hides.tsx b/frontend/pages/SoftwarePage/components/icons/Hides.tsx new file mode 100644 index 00000000000..a4ff4f90fc2 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Hides.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Hides = (props: SVGProps) => ( + + + +); +export default Hides; diff --git a/frontend/pages/SoftwarePage/components/icons/Hidock.tsx b/frontend/pages/SoftwarePage/components/icons/Hidock.tsx new file mode 100644 index 00000000000..b974f4029a0 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Hidock.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Hidock = (props: SVGProps) => ( + + + +); +export default Hidock; diff --git a/frontend/pages/SoftwarePage/components/icons/HighlightAi.tsx b/frontend/pages/SoftwarePage/components/icons/HighlightAi.tsx new file mode 100644 index 00000000000..a6991202d33 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/HighlightAi.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const HighlightAi = (props: SVGProps) => ( + + + +); +export default HighlightAi; diff --git a/frontend/pages/SoftwarePage/components/icons/HiveApp.tsx b/frontend/pages/SoftwarePage/components/icons/HiveApp.tsx new file mode 100644 index 00000000000..a1eb2b072c5 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/HiveApp.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const HiveApp = (props: SVGProps) => ( + + + +); +export default HiveApp; diff --git a/frontend/pages/SoftwarePage/components/icons/HomeAssistant.tsx b/frontend/pages/SoftwarePage/components/icons/HomeAssistant.tsx new file mode 100644 index 00000000000..6a486418b52 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/HomeAssistant.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const HomeAssistant = (props: SVGProps) => ( + + + +); +export default HomeAssistant; diff --git a/frontend/pages/SoftwarePage/components/icons/Homerow.tsx b/frontend/pages/SoftwarePage/components/icons/Homerow.tsx new file mode 100644 index 00000000000..9678119e642 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Homerow.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Homerow = (props: SVGProps) => ( + + + +); +export default Homerow; diff --git a/frontend/pages/SoftwarePage/components/icons/Hot.tsx b/frontend/pages/SoftwarePage/components/icons/Hot.tsx new file mode 100644 index 00000000000..deec2afaedd --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Hot.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Hot = (props: SVGProps) => ( + + + +); +export default Hot; diff --git a/frontend/pages/SoftwarePage/components/icons/Houdahspot.tsx b/frontend/pages/SoftwarePage/components/icons/Houdahspot.tsx new file mode 100644 index 00000000000..58bdc42d29e --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Houdahspot.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Houdahspot = (props: SVGProps) => ( + + + +); +export default Houdahspot; diff --git a/frontend/pages/SoftwarePage/components/icons/HpEasyAdmin.tsx b/frontend/pages/SoftwarePage/components/icons/HpEasyAdmin.tsx new file mode 100644 index 00000000000..226cf869616 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/HpEasyAdmin.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const HpEasyAdmin = (props: SVGProps) => ( + + + +); +export default HpEasyAdmin; diff --git a/frontend/pages/SoftwarePage/components/icons/Hubstaff.tsx b/frontend/pages/SoftwarePage/components/icons/Hubstaff.tsx new file mode 100644 index 00000000000..572e8aa3cc6 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Hubstaff.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Hubstaff = (props: SVGProps) => ( + + + +); +export default Hubstaff; diff --git a/frontend/pages/SoftwarePage/components/icons/Huly.tsx b/frontend/pages/SoftwarePage/components/icons/Huly.tsx new file mode 100644 index 00000000000..0544ac7cde6 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Huly.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Huly = (props: SVGProps) => ( + + + +); +export default Huly; diff --git a/frontend/pages/SoftwarePage/components/icons/Hyperkey.tsx b/frontend/pages/SoftwarePage/components/icons/Hyperkey.tsx new file mode 100644 index 00000000000..4e14b17d69b --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Hyperkey.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Hyperkey = (props: SVGProps) => ( + + + +); +export default Hyperkey; diff --git a/frontend/pages/SoftwarePage/components/icons/index.ts b/frontend/pages/SoftwarePage/components/icons/index.ts index 42b3fbf8788..579759ba4ce 100644 --- a/frontend/pages/SoftwarePage/components/icons/index.ts +++ b/frontend/pages/SoftwarePage/components/icons/index.ts @@ -329,6 +329,26 @@ import Zoom from "./Zoom"; import ZoomRooms from "./ZoomRooms"; import Zotero from "./Zotero"; +import Hammerspoon from "./Hammerspoon"; +import HandbrakeApp from "./HandbrakeApp"; +import Hazel from "./Hazel"; +import Hazeover from "./Hazeover"; +import Helium from "./Helium"; +import HexFiend from "./HexFiend"; +import HeyDesktop from "./HeyDesktop"; +import Hiddenbar from "./Hiddenbar"; +import Hides from "./Hides"; +import Hidock from "./Hidock"; +import HighlightAi from "./HighlightAi"; +import HiveApp from "./HiveApp"; +import HomeAssistant from "./HomeAssistant"; +import Homerow from "./Homerow"; +import Hot from "./Hot"; +import Houdahspot from "./Houdahspot"; +import HpEasyAdmin from "./HpEasyAdmin"; +import Hubstaff from "./Hubstaff"; +import Huly from "./Huly"; +import Hyperkey from "./Hyperkey"; // SOFTWARE_NAME_TO_ICON_MAP list "special" applications that have a defined // icon for them, keys refer to application names, and are intended to be fuzzy // matched in the application logic. @@ -669,6 +689,26 @@ export const SOFTWARE_NAME_TO_ICON_MAP = { zeplin: Zeplin, "zoom rooms": ZoomRooms, zotero: Zotero, + hammerspoon: Hammerspoon, + handbrake: HandbrakeApp, + hazel: Hazel, + hazeover: Hazeover, + helium: Helium, + "hex fiend": HexFiend, + hey: HeyDesktop, + "hidden bar": Hiddenbar, + hides: Hides, + hidock: Hidock, + highlight: HighlightAi, + hive: HiveApp, + "home assistant": HomeAssistant, + homerow: Homerow, + hot: Hot, + houdahspot: Houdahspot, + "hp easy admin": HpEasyAdmin, + hubstaff: Hubstaff, + huly: Huly, + hyperkey: Hyperkey, } as const; // Maps all known Linux platforms to the LinuxOS icon diff --git a/website/assets/images/app-icon-hammerspoon-60x60@2x.png b/website/assets/images/app-icon-hammerspoon-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..ae78d1da700564a0bc70addf61ba866b97861317 GIT binary patch literal 13682 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%0DMMylK;2zQipit`B}V6OX!Bs{CLF zh_r;(F>5p`aO!%@t*KZkf*;{NoJqVTdwTOqiHn^S%{ot!`mA{%a3*4n%-HLgX7%{?4`tXIC*fzuU4Ad@7S;k4WSp6cH^zh0L zw8^>Uw~hn&ByW!zFCSRV6yOqF&ZFX8-kNjZ{h*K1a)8Sr=vYZie!mxd1*}ZjDPegb zU{V<9RNQsJ5@9xx{uOSMc6=40B_!;UT4ij_vx`kQ_L(vcD-|VHi61==&0E6vchZrX znEl%|T^VpjN33)N{d6L`Y?e;u#fI1hm?&&i*gr4w!7ftw+~U=F!)>p3vw_!1@=;BJ zQVBU7f&-bc$3&^^yTsQtq^V9U#eCKL5NXxO42OV>=EF)HBI8s13`AR!&BV#Y91cTj z*RBKo+`EQgknizvlT!8JR(q^HO8;jQ_PWc-zZUrZ)#0j>DMYaTJZN3o%7nrEw=oeW zg?gf^bJG|nJ__j+Q#ju~Ls^J2B~jXYD3e0iIN2P1t#9o+5vm|-!5&TF?s<5i}ZTew27CJs#NW&FSKP1cH zwAcG0Xu zj{?HRS^ppz*1lxvjiRP%{;um4wA*{&Bw6L6u-cVjB0F#N!3V`bYVMs@^(YFb<{?A_ zp2rJfN;K~Fep2+uTQUa}XC2xiI}DU6iQSAILq~yC=GRLk@w1;<1ZQC;+YLYdzPKv% zv?f*OJ9ilg%VF(z9jVZ*1NQEpnNS(;Emb%)UepyRkNRC!$b zStSpU{)1RfZKm>CjxOUo63c-PSUH#FK|qw$A3iWEqQQS*&W%xQnTM!ZO7n5;3x(M* zzIMUM<2Rn837NwS;El@%v>pOHI1%$s!xp+>w- zO{9P&wSd!(PL31mW|ufKZ@WeZVOb6(Q0JsJL+~zftTSNW*oD|UBjj^=TaEisXx&3Y zMq_1>?SAe+XFTCOx&EU>6WVg%K5G`A#aPTH5LmbN?etdwjwc7zUX@r{>!zZNyk0^3 z5IYg2famKmke<2z`JTcSuitf-%ikSckf{>-b@AAgHo^WzbZC3ifbh>7mOK|Q426Q} zzTdjoPpG8^-n`8}w#R=$(w&uWsofErmWYH;+5CxnzEI$-6-6<-^t{bgAM_|%8%}u* zE%boZf7^6x+T33qhyqUXv$d=EUhSO>O0GF*jlQ@pTRFLkNKWLGLGCb2Cp=H)9OcD3 z#VI=`Nnuj_T}0(8IT@&)Sjz^qsAtO%%I0s+QTkfXFZazkk0)EFtZt13Szk{XXYHDp z#p5ZdU15HWnForGHb55EV-b~2Ym_@D%_^xDBMml1{{;eQeYrKX@vcHyir{>*>CqM8 z+@R7By=#epciU&g$+VyI-Y$FHzr}NbS4U!w4vJ`UwA!&)Kx_GaxMJ0*3$Wq`c%xF1 zw#ICGht4EmOjLO&J3|9%a(#Mpbry4#EqnaH)^_%RY%y6F79xUO73xKxkmI6L!ShwE z-=&CYlKU(Z?41sj8^Z*YWt52qpWq8ftz`2VU*$m&_Kk6sesiOq1&3hzSJ+(1q+~*% za1acp2ymao55OGxdHo}V{SG1-?sN;W)mDC_T6S6)Uj?r=Sa1jtEf6j0!VT+x2HUZ> zM?L>&Wn;?I4dH}Lk{?vJ+lwt9uhiduEC3mPu7~v9&N$i_&cIhm<}AEbe9%};3}&*z yqv5-}cLvfE?uQ=2{}0zg{&k6@>Q~1Tijq%)l1-=X^JOUjK<=ZmRQU&^!2bmd4fCS_ literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-handbrake-app-60x60@2x.png b/website/assets/images/app-icon-handbrake-app-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..1125598755cb227c3eccabd0cf4f61394c98fc5d GIT binary patch literal 24717 zcmZ^}1yo(J(=U3k;&5K`r?0C@Qi{ulsoV*&t94FLe|3;+PfF}qcX_n$!2OjF8SP7Xlx zkA?$4L|6f!|4|VCBL2S!06_hQ06_gqA^yYr4f(&Mfxn^tH~k-=WIVLTKiHU+s-~-^ zoGiDAgB^pBse`c@gQuP2e*gepPws!DotdisgiJTvSl$4a$+0>j{SycRg)c@u9$Sqx69l049Jv=-ZJXjbU zoGlocxwyC(nSL<-_(A^`Bdlm4e%BVz|Q zS3Yv`{}}pT;lJx?=4ti6E!n&Lk6Zs7Wc-hWk(q&s@qd;5PnGvSTy7BuTL)(qMJ(TY}{X11E5R(59gF8^x8&&K@Yf0X{elK)>#t^cd${~`GwO%Er^#i*Rfu0bM zjDp)RaP5E~9Mbywg^1iSu+Xm|KsY!Shk}3VQ0ZYN~wez^KS6z3YjnC4ha~{~H3*=v>Q( zqES0U?ZsWG8%DJV{7r{?B#wd$wqCLhbVY(DX#*vTqG{exqtIzv8i|s z{4k)yy*SkR@~RS-DNB_rT||c+qal*dWW@lFwb4Q%pBil=L5~g(us)Dc&PqKaKV=A^ zlidE;(0Q2JaNB5THLj9u+0p)^UZpN9je{a#-P2axPLohxWXzmCW@dqnQxcAPbo8w_ zI?M$p2K94q%hao=f2XN;UYrO5Vm>eGV>0xL5&{}dqtNvt@#EI-_1ET2532n+-g09F zzQTF*ALT3?kfX&y@5VwRn>syal`6eb12AHMi=1r}n>F}jm$WY-Mx`;}V)xw@!cFg% zP7){k-J` zhA|Ao1Bbp9gjw&J3%gRFm23a=NLN{*FcWJNI8P&p@S6+pa~_6_63#7MNR=pmJ`GM3 z^=$5oS0$xA*Mze_8@2QEBt`e{*n@ljRADkir)wz1HDyyPe|2qg*s6m4a}W%SGjLwr)zkpXf?ilc|2aX)y1H*&77(MgEV9v zU)xPv;~<8_8qI3mI^`ns1M3B{;Rn(s-kP}dM%LzM_a)ENDvcWwv5>=Tgh6I(? zmuB zmTFD9EaT@xdRM#EogL%Hf-UFsVN|l%q{6(dZJlY%S2ChdsPCwnZ{-nxjh<;DpFNyW zX3oDNZ?B%7M?!#sF#~j&N<*+a1M5RyNW8Z>_&>nudAs_xSZK$rLeS9z7;u<>#8ww9fihyy?9HVTuueFd(*yscRX&e7hfkL1=%&hb~MC7Foo z(HeHhL!5=uMgo=Pln^z_Ei4#wKc7F}laW8syEPpTJvT)is~##Nd`Qp2-c~y(Oa$<( z&;D-QA?EMT%+$+~?vGtRUN;r~c~S1lsz%!nW9hO2?N_Cp`(fR-Zz};>d+)wJN>W;v zg@+E1gM96ccliRGU6%6ZT!mDiNu7T0{R&BZ@(rdzuYF(jGg0YMv^n$roGDYhjp`|g zW5CY-@$_l4&vQJZ!((9AFyy~A>h=95aNuFWTWtpF&brOENEv+YJ9!HuQ{2kE^~sVT z{|3qRogfOT=flgb>PQ3taZ9xJc{@FA_e1j6lY8200>VcAe1P=sKZ#I8&cECAbC8obsgiUkH0dT!+gCyvFk0`DTrPs((0Pjx5NbAqd+F4qUue zWR&C1ntZq2NZyXANcjKR?A0ZFy}r}D`7YQ=&DeSbs(A)kAwH0h(610KW-AVZ2B(mG za+kO-J3O@>Xl82F$Tu-+7J7JkxJqRlYZ`OVD*%ps`{db|NLy}%suHZWF zEH&dMZM)qjDIJhxC6N@9A>tj`80tGJ;?xK7^AI7KryYfYW`NmFEPeKC?Lseng?U0R zZ=l|^|8j{9hgqA4r@;ewHzNR*PzlM!q+5T#>a1K6piA00epZWWR>sM{&gD8qbzX&HFs#mV<-ORQd&5*Wd4F zypF5if)TFZxrC#aJSE^DMfI}Vih-z{A6$}qz{6C=U>%yS%NCo!PdZXr#vEXEVf9Bf zadgF4jQS7JrrxqVSg#Ol>klK^3BNhIC(IjU>uLVe%QSEdTu+b!}V^NyIQ?^)WrlJNQ{BOSt}eRPD#VZB?u;i5`3XAvU*V zm?ylB+l$C+n;SDTLA_3Py4%|DzaIqz9-|0GllF6tzR`dq2T9-)ML}u6!=bXH8a{p_ zfyW>b_dCVWm%R-z|E5`+Lh5-@*By)vKeMfxXfTu_AKG=Ngz8l6by2-9rO$fEz05<) z`L8#<+^PFFng`U|+f(I6$3ylQc6-o@NSEPGKZChPYbEQ0MzzPcU*I*!;!9z8b^(`J z;V=n$kGFKYk9h&(+c=6_3ER{0Z*+tTiJitO6j&DbXty$jBz5OKOWGi&{)RtT;sT}( z5}T87dkff7_nKZWL0^q4)tJ#4FqyEwUiuEaetd|-3Em3-#k{EGtPBUF)KSPzf`ZPf zeMA^cZ=`6H?vm6|mtW5CH%`M}88nw53uuyR;aJFS9LIM@8bOmOwr5?uVi$a)kKQ|} zqL`#YM=$M+UD$+a&3$UKUryXm;z_TzJNf0VZBOWgD-P*q-uKjL`OQ~)YP9~`5Rb`! z&_4C0S>ghomByIkSXc}|xAQ|)+^?wYH_J6TRVkoM#Jr~GG8JsOep~m-Sm7o68Pm1{ zhBp!&&KHs@?6a_#^SZFRE*q7hkC-rmfb~O0|G7hX|6#PCJ;iyw&s1fhR>5|QpHdM|O$1I7R{s<8L~2dXSPs>SZwi?Ajfs`Bl~*7UPag**%ow z^BPHYE=o&DwQPFXLL`QC$YfGR2%7eMauCq1OJa!;&C(N260Yie z7=dtt zD8kX2e`jBXav_{gr*tJeziW#yIOo(LnFLSF@QlC?1xvD-&(N$Fr`4yOla0w1HXD^_ zXiGptRA}UKhyJb5gLV2?v9TE_DC1A5vtMTV;eAWqQHR0)i54?Jz~om#k2s5syK^9@ zn8~en(t1SlCYD9$i#gs;-!^<_h1n@N{-x_dM!i2+6Zv6zeO!xx_l5SH4F+9L}_-2FUU`Xh9z8gsSFthF6<< z3z1)OL=PcjjnAMK9O0wpw1|l#u8tcP83}7ApTEBa6jVRqlzU~x9bVkaaPUAk6Gx|= zf9DP&+L+Rnt3ce*o~PW1ZG(mL`q-3}p+4rNg_d`=Vphh5KHr z7Lf~{Qs=k7yLcr7Ivjuf(}v(JFxK*F_WYHnltJL$Aj+)Ls&8ubep$or-Wy*G`??9=t3OfQ44hi3=v=>9^2OTYWkI}xW9ce4 zLkKRj20Z>)4JCADbgOmd;p7F7GcI3Z=4WVqMc8j_wASu*uzlOpk$v5yz-K!MnNge2 z&J+K_^IF28DKm>hyIC~6bjf&0hD%r%=~r5VK0djaEwk?=vF%^@tcqMJWES)LKhM*Y z;&=+Nu}LwcK$_5Vg)yr$GuB7f9hpUqb>k6B3b>@2Fphon%G0Ccbj15=20OiBnlPvF z&bYLb)`i`;S3B>0qnIIkuL^O9*HSk?;%;vIG)fHEIf4&q^3sL14s@3|dWw zrvGMv(rSn>TN{(ZaoFO5YC}8<(uACVF(|xgdAw|^Vdk5FwVh7D*y8$M6V>!qjk*?U zkNyg7!`2qBHjQ6<0PjB{q@Ihl%8-gwLd8j%G%a4gxasNwG(w@Cu)?CMPNksl)OLIx zms@hq&Ua7l+&^f)T?9>8*eRGK=;4fNxBs{ZoYf=%Nq$X`l+3x#L))<(fj(W1zk^U_u>+=72fIv{iar~v?0mWS5Qzhc zcR4f6FN0UxBDW83Swyve)ej&BSjIsKSkU`9fa~(}n%1Ya5Z%7f=g??7C``y(VBE`= z!zGW+H$d+~gry=NMfG)yT3pgD)E*d0#yBF#Wj=z`==yx_RH%nXzS&*p``DT{2jl)V zIa_&u@1~aVE2Fi-`opmR?5h*?W@+mE#%I{_U01+H6B&Y5M1|(o+Blu zcCD}(hqF^2!y*Z)TM*^|Y5LF@KiA|o?iNOzKduRw542c~nJYmH`IE=H7*cfGO0FfH z(w=L+VKpL2YpAp4cA8Xy`(A9GmZR1s6ic1G4aqiDN=+dU1d+L}@YOOr{t!@NuoHRp zUS@e!*lGF}>TNwDE@rPok|!2c&+g~b1;6;Lcs*UNhB&l4rKjRNt*)2l)ym#6D$BRY z#ep4YV z!)oSF5q9Pual5Kc7~jzbN6Ji>7xzi>k0zDU(wnF^4{%1;s?Xalun_Zti<)$}lEmg1 zw9IBD_ydu?0nS-Z2uhLHNkjP{Ygl6%!!K0#O&(kFm)4S^1e%!YR|)j3LVvU0#K-@Z z1;KEpAEEpZACiPxlJw|AyCfjHbfC*!6&)r8^Nd!vS&Rs!7M z3ev+`Fxism)S#}##qPecnDtSNA5xJyi1t$=Ih_kHdp~`YS8cqKPacTEc3KOn^~Snt-w1f(fhpO!XGa7smqkN8fdAou7*fbEY1vWo6Li3Tjz7fg9eq5xJ_{J!iJXgCBGKY&V1GbARkiNy(I+)Qd<|Jgv9^>PR2Jdr%L;!ivCI+c}i28enw}Ph$}7MQcyMkW$YYE zpeW|>NQ%g0I{`BShaP3lgyHtjCEM$nryx&J{r;QAA{44ZAd{8#O1l!Fp_ukLtMT!K zy7UwilB}kY^New`YFP5T$O2Z|L?WW(j21b|JUZBczCB$R`#gN{bM1S?HB|12hTR;S z1?#2inZJ$JlQ{ubB#P6XfoA!$xoavtu$w}CAgh5jI%#Tlwd-h+HsZa^dCHo&!*>%bmg&(!A--3_wZ`1CDqVuSIP-}|4-u}DwJ z39bDTGx?WA4W{hdb}kJ-4XB+{;t3yx$mc#0Y;IRV0>QsCUu}R=*T&*oS2~ryTQ1W)i+c0u9-JCti zU~Bqwa`WA$`$#UoTUap9i+rUypf+>l{t%lMMZ|DJ(%#!DC5G76$dh9`rEB_SbXwu|48U9))>cL zxM8QMGQiLi#5*d8NknSk-LnsKsDxct+>3sA@*Z;x909YhJw+ST&!Kj1#Ru&9IVQ&< zle~P>A>@&NCRbk=!BCJ#n+KgDb+EbJM*&3Z%Ri!f%ee##$TEeCVwNm30{7;^3^L9b zWMCqMW}gSx78^2}iqqh1iTj3BvB^=iWNZ*Fh>FSr*^*qMpfXy5#(g^nXB?m|YQV+Q_%eF74Ud13 zACGrG8%3FoZ1y}>Y)=|5WV_HBxYLQPD!Y|ik&BUZX-#*o{B*by% z_;?K*e|RZe5RFe?<0d&-tX*kYGC+=%ph*4b4&1*j=8u1`po=fs9^H;;U%GsO&%)y~ z#hLv0nZtKacBcL5&Exi>0`~fCXyRg~Lr3mBy-xuYe&q&^XG`T0UzLYLz!BuDom_Bb zMx#Y}6(n89B}+XKtOd2v*b)m ze47oCDes&Quh6Xw1*B*t<{R#}^l_?7Y56-b1huJ!;;4?$U^lp&XfWG(UOQibZ}b0!~I#3*Sd3fugvlK+%kl>agK94UnZ0AdOdJf zZxM>xWMe;_g|R6k1n(3-{dOT`ISEBEB(n;7!RfYa)kn(LY1VDNztiBa=9AvG=+s3q z6He4|cxMZ*g1wlZ3$VN3V>BwZZ!7Z7t9=+L&k_5~FpgXvU#^qAT2fSm{vCvoLo|?< z)QyS3wa%husAi5#k;!D=#ne5_RKRTQ*S2Z)zVzAnZ-Nr`=UxeIVU7p(;ST=_E)YRn zSeZkrKDrhivf0|5hP6}{K>4+jQLh%U4+cBSq28p7Nb~P8f}(RvQPRzGW!UE&s`lq! zPB;tiKn@dSM_jVnqp5Yk8~ICjYNf(%$vnjMs_*<&O6RL z>?VqNsG*fwn5;}f5}1m7dskl{wT{BmkLhcOFPC0#41FJ77QeQg9cdS>QK&g?kZ4;(zs`8Jk9-jDa$IbmZ$KH^V{uJ-u!V zzVQ}S&whYjaRYxY1eoeUajdK_OYuA(Z>`LSNmRLP5bHGEffnZnV#}Jl4<5eJ?g+OV z44L)N9@h`Qtfd0GQ!_aYxd%+}GK9(jt?P^uUK*zmmk4&;?Pd`ZU5|3^hk5*mRH?g$ zQk5FmhqhEEWhAfgXQQOJ2$9H%6O;eAz?L4j4vJK+r zk}Z%6?B~FXNBgk;yg{HSw6*eRJUDgQj!}ug;u8~V*fIpW@M z10^(K<|*7@QyF+nh+({+>BX>BYzsDP?j1R0>jL$N*H7PNTTU?h5nvOOD!ThIUAC&> z$%8q)y%ltZe=(^kWQ%-9xdQ7LeCqS~T*tUy+XOi1oqaj4Ci(Ca$L3HJ0~#z|_f!-P zy+cCkmnWVthC&^*BuAHu@`Qt$(Ogj~ypn1~!{j5hA$LEZv>NemV zPCSL{b($o%?)g@HZGJ5b535E4fNgj*s(*HL#7COb9zvDD$!#8!)U;gH5nwZv*V>(U zEWWSkISswA_|!M{pw(~g7_LgJoePCh^}vR&!9HwF0YZF z(0MMynWR^LreF2?p7SL>8+H1+9JjN)0ZV62&cUH-W!ow;!VAvrFpA7v9I*=Q@)>h} z7jPpJnIP772D@d#WB=^W;hfZ!*DAB@kSD_bMBMyvrb4AL)eFHOC%HP-_phtc5^k3n zhK*SX);%~0(SXcum&phM&i&7NSqax#aQ@5;v(j~OnXElxUBrCq*18N~+b+dv!Y=Hj zrt9CcR81}MsVZPQC$^o8Vpy*I#UFg3Q-5K_VB)AP2U}us3YIn-`YhVkx`>oqjE`47 z{AiW*U|L?J1cKZOC;{LxP5`r@#cfgOHSpCtA49PR!3&lI0n zHdf0FgdaG$EU_1xmV5;I;&P$)fZ+0SQXnu`Lm~=)Cm0XA>yTDJj{u@{sg$8SG6AFcRK%Ek4EX;ttXMTyeyG zt3MLrVkJM^SC_fRtIUrk5TGbZDR(er+u0iDfp6i^#d?CPlhWTTwKZ_gH23g+}tSb zB0-5~8N;n@9Si(Ds!o5B9suJop=eOM$rpl}XVB(@Gq6Ac#A9fzls5km;$_mRM>Gw*b2k7lc z+3lH~EYk%utmr~;zQM(iaUq> zLISF&oiEU0@=nS2xH4Plxv$!s8I!hXPW8_k>-e`XaaA(MUshW7ut&by$ryEEDSxY+ zUkw%zDoiz28~bGuloCfaJ~I+)>dS2|LGnSFy@$NG*)_MIM7fO?Y$(o!q=6Hmp!4j~ zWlgY%O&1e0HCctXHk%hz+WQ#wN>xdw54v0|?Wk;8d10nU#lCwS*l$NRGL#nTwv9GM zRLLcS`(|`1-HC*3ChZ^&t!^G~%x@3QVf2mxx!?1I-YH@^0(Kx0xuru(xWywz!Ua1@RYkfkdrVF7zXYaE5jVu0y=3z;G!XwDeDlJs z;?o}1^7fzf_S_5+ZZ4|Ykk1{{8k#X$OZZSpT8FW64np5et*Gy)w@3 z2#YuAgJy z$dV+c!$Zw9u%qXHSG``|x9%%D5{oqD3JSeev* ze^_WNm(!HsWl5{O5D`3d4bS)6$aNauDOk3yzYId7ic_RZQKj(WiedF=GWDWvr*vaJ z4u}472!%Wt;gd$|0NSjj7Y`k)mPx#!*>sN(U%$I6kT}Ww#?3H|>O@fj0{olffqDhY2==>cHh8&AX z<77hG8@@D6|DLh>cJe@~I=M&r3YN(KAe)^?5lYK)(80-hd=Q1t+ONY#wo`h-;JK2G z(0^82S!(TG#KBCyvoHMe{RdG3OgL_@P3`)Ho##M((E8860~T5WfI>&Um5NjgCgrI| z?SrPcdh`e#I&UO*zdNLQOqe^-Rde?7HC^+nuLhkPyDEE&z{ww6{q212LB)z$8_s*7 zAYn?IRg{&whO1hWFoWL2J8QWX9e?NLQP_{k7moh(ds2k`K~}2M$Q(Qq>>9Y;RWvAB z>ybN-FkH=XjfV)ET_eA_G zSA>S>z%|yNl6wm47JeS@Ktw4=RiTk^R4*Xbt)4{)Q%$h^5JdIkHiD`?-oHN9d`sV5 zgYb-`g-b4{$nq(>zTGoanYmKk*|$85T5J7wv3j912FgSa*$c3G?QadwvIpE2{ z+wTXr&+>IO2^5hSgM(c_9jl4_J!V6g&AW!;i&{)EA`^giqjl3+?`sxud!+j&l=AE% zFSDJ=-&HlAB^|dt^Aurry@DmSZTi(Uuj$2y_??syV&3y%P<2eB%Qw5Aoh;tu$&FW3 zFgyvKq4 ze)otkvp_tW8t`R+VAew(?c+2RJVM-d1!q~c8*2pkZ8)xMjTy*H6a>5$89wG-ZQpG+ z2WU*PEue^EXqV0w)UTuyfq?a#>+Lv5UDfx5gxHr-nHmjYK=t{-5>Q`NRQ2dVL~XLc zj!_L^Z{qw~Y_Th^iGajn*dryi%Jm?g=d#{T;O-8)?+eXJoE;9c5Ekn;PVoEVMq{z% z6SDe6-At&RrJf_7LI_(8n}62&NCH|=qDDOwUP9!^O#vBDW((3A?~fb&$M+ z-Wlt}<7YI(|30C0W*IF=2#+09%Z)&5aILMm)$^rrVO@#YVBW{TI)R;q`$Kc53@pWtNk+AJ%s50N_5&` zGX#-_)>vMV3KUc{)*Ix9D0SvPyRlU5`!+(+!kq)6SKznhlgKq4#%NgV;8+IdeQ>$Y zSeBfs;`M6?EnZuEX2PU}$VQlx0tSburLuIS7k^PN2cd;)WF2a$P@|Aq&{pplopJYC`kY%;xbDKFNN+o~bg%b*U%ORNAnQFa{O)Ate%d!a zWI^1NIe%pPC`00kKvIng4)FO>#cr#OUcvXu$ z!l7*3J-;+ZF4LzC;@yg05sS^(>mS z7lPzB?JIybx-c2i|788Uj?W?IC}yr;l^yuzLco56Aw}>~3VNw}<*&vSC~U4In@lpE z93Nk8#k~b1t+mW-Mt;(D6)$iNnPBM)g0gFHLAI=_AGJzhP~!S9C(nSY9aU#ETh*_= z352C^2V`ooFP?yoP@%LT93|&A(*RbR+K@7X&8kf&;C#rA;Vq_R)2ai3)Pp{YI zbn%N9IXs=YYAda9hd3vnlQ=o{A?w`Yv@dNz`T4F8UgUhvo@f?0oc&NNi?KgEHx4m7 z_+q9^dfn}3F;c_hRL7t~mp@ zmePW@S8H@o*;_m4cxi7_-5;QTH~H@Sa09S_?S8@-5T;uDNulo%5S)F6I#09dT66Jw zl%i!bp-5yNHNMV0GMK8FG~#7Gc02lQ&A6cAbMv(1hRkH(gpW{6^F#3N zK|YcXvIz8MW0nB#JP>V7NKMA2IbP7v>F_MeBW2y12sb>AxN=qoh z(K=V%+?QzdBKv_m&n)U{bDAE8&3oj~n{OQ)9 z6>j;E+-6Z}HYBVqS}t+l`THhQ;ZcGs~uMX+{*xe#U%$ z>Zk?<7_vlyFEh=UJR8FJjhwL!XofbWLb$dK!;5rxf0xO8_hf~HFn*=^y?I2}>W-Is z?(GlB*zU#s6&|TDu1zB1M>cEsln92;E=Asv2RnESJ~BfSiU#?d4u|IOj$Kku8=yyY zVcMThj2o(J9zTcc{B(C`h5aVALSTO-yf`MR3&H@-t;^2D>zkq>GG1`?ljN0rz{m#X@RsP2-p`B%Z8g?sgYCs zK9KGhY-5@lvg~bs!7cM7G$Di~s4B)1u=O_@58o#)%#phnH)8n`GMy)pldDG@aRS@I zTh%=TD2b%KJDRUp@=mJ&5hkK9(u^^;hbKadn%dPJj7)e%Ls+DXLWx-w>0uwWsbk{m zyx)hF_2xbDOL5&${+Ptf+jTydzcACR$iy`%zO_z(w-;;zac&*#S#paTR9?*?;AERS zLAneuQ5pS(zw$TuKo5fsDX!4*a%;n~>D(v z$v{?itcs>0+v7ygfyuwASM>}=a!4JkjIo%jRcv9I(KB{8l=ttc)=*d9H!3D_?oJCyxD(dw**MlGSGRpUfrH*7HBpqibnNip6-Y@F|Z z6mdrOFZ9N^e03?KuE9Q~=piHD{uOaqi1BB7d-(MlI?0svU9}gR!yY6l0;>Yvpreb^ zA&-j_2xDj1Et_0(r}M;-`N_`3W4%}V#)Vz=hcvnBELlG3+|t5TrIyUPW^YUr!+YkT>ZMC-Gd_cCA5^E)5wpr@ zGA@m2NvtcN^a$2&epL}CTFUK=q?$EF&c=b3c>Y}c!LO(@9UCy#-uf<6pYTG22PG#B@C+rKt z+~^Sl!)jQ*7(wQ+7VQUwELrmaX%(J1s}@1oLjwGGKi93KF?p^?dSbOwzWs^m{2?0c zJq!niHlZ(qVue~Fmm@~I-nZMG8qbHfZC@;S(wBcXQvMABpe}jK&$$0ZIyrYchi$VaOTU& zYvn=j61^8%#r8G^nA3lqYG`sc#^Pqy%y)CXhe}iSL>O8UCIUCA@~7?P{BmMFiJw}! z-_#~HRRcM0^znq{d*L#2_>c>oy-{9><$xUegRAHTIA-xE77)=lHWrFEgFPICp?=s z7GN8ayJLQDvpl6dQhcLf0Q*M{_V?}2fb$CVmII$BWsn>9rD{Ow~+_ z10Q}XJ7RV`g#lH3Q13&B}!geI8-Sg?fmN$NIH1NEsQmBt4m@l#9h7D=&9-K;f?u^T@$Cjn zxtcK?2k1f`^H1=B_|)3`62H(?@KXU+i7`^gi;vyKlOIV+avwBeOmX_RKWq)h1ua$P zayjQ92~>ve!?rKixaCZP=1OLJ2)6KEL4oMr>J#--~X79V)_ zcfK~J8t~6=k5959$T}VEZog`qK|g*NZTC--er*qP=H= ztR>fSbXCrQ9Sm=ALT`(hjwG14NBXhWIwr@{9q~-&gK)LGyMDtBafv<8$r3yv*$PrJ zLk6EUqa1B_jz3}@J^1I;&{u{+m3HajpK=8jihhMJoh=KdcB4yK_eG=)yllA4m#W}@ z`^qWU1loG!PK%<~MnmRt-AC(t3_0%u1QRFr@{T>?vWDaJ_(}12VXC7BTn+l+4|#DU z&2IMD>&SN4FH0uV=Po`Zixrba329r7Nr7#C64%hT+YyFs%T|2jm zF+rvg;SBkEPGqK#i-9Aa9iAt;A|pupQn13CWyoRl(lK1E-(&Wd=49W*0=o*zAkgI(jIVW?5`Y_>A1Z6x zzVGKel$r8i!Car%AxsAR#yE-*>l~T(aKwXNkmb@dP$8aPKbq>Pd?>NT6Da!cv^2PJ zb43M`mtAzHI$Y*Eq%hzZ4y>&5&E=M{=+1w3QP-69IxM07{R9RPIj{D(U(5F?Q(=ho zry$p95eEnB?~6WW){e@*dTmzxOPX$iU#l>HxX1fNm=2yEy>E$Q%703u z+>k?^9w(C6fu-B$upM#odh=QQcK(1+#OzuNO}~xBxu5#NR2U$?`ay%^F{m#v+X4>g z@zy$$jw~Nz6#HS86AbBHK$QWA$FNnEe~Gdpmt`IcrdaFp!%}#t3NF2@2qYI(>zdwW zhzUZAlM`~MR+Szhk3;4z*5EaQ1DDT6HAyP2pqN($&zbbblYf7OgcGfX3pRgtTndvQ zjqXDD(E-h{un_QX<7okdVF(g05Z^M7cn5~LR|AhqZPlT!EPl^k;~XWNcLnxi z$h3)^)v&diE$~rP zXU=2pe`KVHVY?<+v7_8#P`l>Hv2R2)50f<5LeBxCPq+rp4SWb`Dchv&&dpo~t=31j znaan-*W11Zutg`n2{p68T14%@+6QA~zM)USCxT zNCns?flg=|OpTUtKbMRl!yxhN>Nw=X=!4+Z@aw{bjNR0Lct(1D8M%dNDfosBKDTLj zrnH$ZvOt)(#DWUPBwY@fN=Jn6>_)u3sg*aP6$3{+Wc})6d+z)l@wv#iv~+4U)3;^F zYOmuM^ztSKA;r~IHp=&>Qku`;hvX$&D;Yks@`22uk=GJMVFhF?J6M^ef6KfCsO@g~ zOLnALM91J0-*J5ppO`AMa!&+i()}~VklWfPyz!1RZ(OQEO6!!A(2N5eYKA1Cb%nr< z!(vM45PfFWNX|?X&Dde|cCW)8-ar?}0IV4xrC0nN8+u^Gn^}2V%1bC6Ox+gnmUVt; zbbGp@u5SyGsf2z=^~yEF2whqUlBE3^#m_F}J#;8>uaDXr(6+1wZn@Ch#v^OY?hZqE zDnIeJeHOmQxBW121nyS}hkad{Tf0-YP3nOgGf9mj?W0fInl+!m(Q%rRUKz&^kHG?V zd4?NdGxpeB@-5gJ_~LpnCh|oh#hax1j6Be1*f-pd2CHn}4!dXif^L4g|83>$k=;sh zhoD^sPy~t%W|>hx!s@SD=~X%TY+pm}`OzcMuVNln!_Nwtdt+aaWZKiU4j17?I20D#_y73t&8N%Q3oxb^X)UZI>b7PFW#(h7jfX}z z|BARSh^jqJu2Qom^(Wl7mM6{8@8-LJ&q~Z=$52SfJ8M+%bz2W#P8NT?Hs})jf=|q> zSE-){`yET1OgPrtk|I8D^{}c-rOoe0>_upn;ac8=_(fICNq4=()7NvcmDj_cDx8fe zNl#ySf-Vc&SAU5G;`(N+b{g4G#24jO7rrOo`$AtC;f?6G*R2dLZ=A0`iydMEg=$4% zZ65p$@fLjp@5w)kuucr%5Hj*B`fn46lXf%vq~W$_kwi^}d7oSNW=r&?%1Lf|C|jUMNlrq9HulU>doN9+xeGNp$nan)nfT^CA?CkNg5* z(9)5M#QaK^&|&QLHlsr7BQiytcCTE`$o~>-*uJ=~*eH8Wh#|I2c}>L2>eu#uQoligRPOnC*_Z`5y^>!Efz4#Mkn~N8DwNPf z{)*G!H(vxIv$eo|vD=zI^o429XOsL=+FObOk-n=7{I)1Gr$O{@&F9bT=2h|Z8n!sV zVDOUR!T6Gj9hR2Asr~AWzigD6M4_(73%@qHYdv6!P~SNUE~`fuKMs=`FL1&Xn?ON0 zQv+&a9mFiQq(6g0*W<5w#qe$%A!PQ*XQ6MHh`rP>%#PH?i>pmIqgC zTYwhG29E}$!m-^#KdoHj%BdcNW>PQzilKQ7$|C>6DB*N z3YjiVZucx^Nn*&TRPRI4SM^fyI#{a@)I?=6&z`5Tv#wqeB7Y)hM6F0w!cGurJoI3& zctZ8P^mINFM><==QeK!-aq-6F=Ud%3X}Ww8Z;;Ny2+z0M5-T^t&O8)fu)wft8vf1%7D2zCdkfti+a#Twrjx#_lh=B}pKZ6*- z#?JOC(G+&yOdo{RZVPPEv;1;OZtO2%g)`~?daq|*s+Ficmj3Miy=$_ zI)jsDJL?hJko)@F{f*l))(d-{#&(}VG&M1U8D(5Q#Tb8NvdqW;k6~>0^5j{Br4Mqi z5ySP{+wIu-ylv@=F}(}&u^%jeTy7}yKL7w7qzl(e z54{UjRJB*U4mu3PKrCWmHao}M`5bbeF+Qt=+Rzi4xAftx$>vcIj8+%tbF=KYfv+J3 zfOsO!6fxRY7|ov*JNj_d94vnUSFi#LF!VhD`SeMlbK__KtnyXv-u*Y)sRusIa87y# ztA!Y@$s#w3@)u%9?#=6(nAj=X&8%4NU~XQsdotR{E+DQ1Eg`o{_T=fTog6M1dtTa2 z+tStmA$9q06^0OSchQd;<#CINEy|1@pDH zH9Kd}lY@DjH84ZN^{TM;d?CihmLL)$Xoj61VX1cnA47d0D!~|hksdtD$lyiSwO9wf zh4b`ubV>r#BqbFUHbE^$XC*9AOI;|@JeS3Q01;HLlsj9&fcB(yBw#gdx;!lmk*U%7Nw#BIu)(1r3^FpSG8V_dxXvWosfqHZ$g1ju; z?@9>3!$jRn5&>SNAOtrwt9w{qWbkHv73!XQbj-WN1xZ|X`tjq!viCAkB9%IgX9uDm zWlf3~PN5J%1}Dlj>v~;%gmBS~dW?F#^5EYK?ph?Gz;rWqSFwEg@Tc+1zX>m08Fr*` z&te6XK}fTG%I6HzvpHrd*FzBf-K;!@5Q@AjwD8?8rfjJTRCV3v238B9D8lMhkQ74A z0f-5lVsGLwm6xlROun1(Fc#ODnvuT1*7sln2H~cL3v8{c{gFke>J)-?fPBvgvMfa)T*)>eASb5d@kS>sT$Q`&qr$zrziDKgLi~!Jsfv?gwWhDn z)@|8iBc~3)@pFPUfXV|~J!Hpc& z!5O}CV3wIYj7}^#%`>Api#9Jaum03$H1gQHrOBCw+xUh-38ZTXxxh@Qh+sn##EiN5 z_^AnNUVpRo4-C-HPypS?#p@1gQ9uYD#69Q*ao;IRU_CB8D1v;iP(8Zxu@~ndAgH4M zqIcrA9zlv!>gBxjlzjcHgY*U(*!8mhHq4Zfr&1?1V(JuH~uI@?J3ym{T>GZM(XA=S z$az^KCsn8ec3p*>SXfHQg?mPYg*{<1;QdP#44(NB!E>U0YVaR;)UTeTU9=)t_EKyr zm6ARHD`&*!h()Ei!+*b?fV_ z!7N|;yuh+?dHBdQJj|H?BBKI0wB53&-I;LHh=a9V88&p7uu10mWe5_BM;F8(g$EB_ z#Qi-fd-M?g4vhKNfc!2DL+xxTA)=XKU4hdFcn3+tXo6*PY!>xm_88iLf56CC*0z7o z4_M!Zjh^v`;bN(KY=)d_Bh3tcC+e9fLK*n2>~cW4`Z~oTxPI~rv#OPi7rKx zWEp8*4ZI5K+CyfLb~)ZdmQr}n>eIOxewN~Bu*UX9dVLYMu~z*0qKvs2pp%H&&|93P z(Y@fkrJREx-QdzvAUBYaVLSS5JNMW(?!6b~4(}nremmp%A*^|NBZC*u*d&WQWdUr^ z6tKB1WAp)R*&8GllCW@1@QmTnE9AYMs9c6KOh7jXcs zfz>oaJvo1B!6BYMQMXY9x*@LJjrJd2#_SK_!Nc=#7#XWHu|tnX(UYi9 z+3R{6SW(n&4tD`Sn|B>YaBp(spFMW(Kdh^+d+g^K zAie%9|NR8p&TCgtE&bLESs6ASh99}&0_4|YoMOD&fDpWjDPPUg>u785vRA(GZT8hK zeI5(Zu|7um+-Z|=YkxP~Hq`2bXU`vlKX@DQE zMk)ji5keHVgmBoiCX3v?leO&UgZ8hTHsq`CzFLX~SVbu<@iAz}HkCt=vCCbzL7WH3 zfI|cXP=h5~iBI5c4(lI8%4lNi`ZS(Fakr)*3;QUb&*+OF z`|fxdghV^I53_-lHpi5J)xOH&0cz4E%>st?_u>Emt8{(@i`6Q_Y6!rgZftC{gn^8ryy#tBjHhwpKEX*+uomM-k;@OEE_9m zKjSd2PmNn_+wL2&Z!ldg*3ZP2Rzi77t)K&pfr~oZGX=Fv9DsI}r$2 zMfoq)YI792Mns@$UQ<}=`d+Vh1OT#yd?8&3*D4x)pjy}Zlw3T<3K|+)UbKlTAQ7iE6u;y_*|t_ohZWc#=6~l+{xg`G^)=qP?Tl z`uD!n`Wx99RGIKhTj)!taWjoN3-LO{b7T&G1|r~zs~hjmojr@a*$XR1%Ss7gDZ|5u z59g}o@&sNp+gzQ5$e?n5Ds?tp)<*}|s-IqQDL6Y4B0`9F$QQyvh7Q^L#h$%h%J!;! zvQRH)w4(?tw!-ry)50Zo{tyBK1iP|SiKU<(LVeUFb>>gpMqI{~hGnpA-1&pn*Ra6ehH2M>`98E;+^PJc7=9*k;y8gpXNph6bn~S!IeoS<5>R_& z=^IAN&oSCl#UHIvl^M{Y#|=xiYqy0Pu+x2Rb9kTe+ZziNj_kyx(j+&Gp2CH zi30}?cutPqBR_?A^Gv@hB>=sz40RMyye5)ycJzRMi{ekct>Dnrk)ciV(EG zAzlRF^>~O2mJEwz*_Pu1ystHNQD^uO{+VD=Z&8sx8&5D@+(b_*uscW|e*lRHAy$=g zpPCgwc|nI>bamsYCtiFpLp|K6Kt#ZG0t-%Ge;@f&F$JgW$%pR6jeQR8gX{Mpwu8mC zuSKIN^ntybn^6!;cK=f|^hOVHgXm*!^D30qFyBhj%+BU5y|!W7UcL;{!L2u}6-V<9 zmqgVAUh4Vv1R%{rMC-%VKdbYI^GR`pdohE+@u%fB>i?egZQnWiudAP99!QbLjUeAkZ`1hEk3o zMKB;jGL<^YNi_^YTU(lK&rL72iP0gpfa$QO4xe_;8z&~%kdjfu4O{i;TO3E&)M|2k z!X9Nyx&{cNf1sZQty^syJAcFwSB>7kF0~Rzm>FR7YrbX69ITXDbyI?p9ouUnSBny(0Oh zd-Z=oG3xz=vmlC+B#M} zCxg}Vf(|F} z|LP+jJA2P7zUM?T5!+K@__Cx2kiZK{>erOBu7cpjdhARrSlV@K*8l)wTNse4F|GTS z0DzdBoU|{08Lydp&gN{j|Dv>6MiSc6a3$)yx{Q7I}so1{$r06uZspqF*sq}cL zS*$+-S18e|ALsi#c|Oo2Dt8JRY2;GPyqYV+&9{@60~|k+rPwKKbaccvZQATc2C9ps zlpxc@mrC>a{4tnM?@;w4@a##i@w`Y*YrbQGYR7U_l$8ZR9wcy7EwNs^dzwXYv zbukX1{!T`n>=xm0DCi`18ca8F3o=6xxW0=H;9JAKf-ROFt zW5MeAAlE~(#{mLP5Fp+o5|02R3cS&TYU#CC<$A5+VkuVF3f@!i+WYm8?!8+d@1e0A%|)n8M6f+P0z2Opn!%MZMEe`7ke zvB)@FvRnvK(0CsL2+HNG`g_Env)^taMUyIfnZ;jz{mk(36h8mCUxo)$ z4_<1k$`#f{;N3mF@?yI0)!+M;KckK6g<_3CZ&b?X467jkWv23VurG6|dfQFcP4%zs z{(j^xAItR0bqV-!l@&p_N?+Q5<%U%4sblBt_|d2Na(2?z^!9;7zV<<{kFd$)`VE_` zfBgneo;xIC{R1IFR)$R-rK~lh+^y~FW1+`hd(n%(#|8#As-BJ$h$wUHvNgddK$^J} zwM~8P*zegFkUWHJM*uz{NHh14?gi8?1 zeemp(GdChD2OD=Cz%EG7z2bp`Ml#LKtqdz$%MU*M#C!kd?>>2)Y=r=6qN^eR)nPS3 z=|wd1(`AruvB$prw|~;!+VrNWY0puUIM={s#-~@r#IFo$&=W^5+DTld*RAcg4FdzV zVbd0C@9cpfu=)ugf;foOhLgF)d4_dtHN)^wy<3JNIf@D((h;O2%6eE}=r@nzxWMe1 zMipU*iAgLzMmb|W9rzHE=aLQ(aFwOAkc_xd8X=iO>GkLRd*>@#bF~=KUbW@RX_Z33 z>mtig3f^3P?xoXjiVsQjt>38i6Q5YW>%~7!lzP4|#QfXG+ zG&DFqq7?~_-Nwd zAAk7c@BYU9>__YM{8b}gdDoW_l=WO^y(2Dww;Q{flgIz_XTSC87wy~mVN9_}0bbhq za|Oo}Tr$rwV|0>F!$e#8reGJWS+jf;LPi6)#=%b!43ta{_{zneJ^EKc9791EHi@B!Wulg^yaCNOw?+-+QBZ4n}{EyzTb>q6<&gOFA z9AEF&M96c6WsTmGciI+3Q>yD;#quQr%9xLJ6qyGQ z(#sG8n*iZjm1n;IJb38Y-k9H$>ki2d*&c#D#Ckp4)mP8zD*kVccvVH6MT&82dnZRv z_4w)Y@7;gL>;J+%@>sv-03`dL8|Wme5A|)Wk6+2Ph(Nj^!_kQY6e|qD(HUBl2 z&xdn4`HehReLOKBQQ&a|u>?2*h}8_B*2-zOOz+!1^nT5HX}Cx#{lE;cA~V!uR;{Y_ z0<>S8!^v#ddzBJ|N``aqWIIvyNWTKXdhV5=Qoaj|#6_NqUj zVgjzFe{}@Ne{R-G;`$&6U2D+0;sPRqKq(A=>F+=I_D$>8{u&y0a)Heq)l0$Yvxa(3 zP=D=SQjdp16z`tt9H7WYrfb9!!t07sZ`MJSJG(Tx@saGk_+5qWrP|X@ajqm|{kG0- zd=*>rC(c~>_5F9e?k`CbAYVOy)tdiO8C*CJ)JLrHTJK*@1on4-_FJ#I>H6)z#Xf-j zb8`z$K0g;X@HhapLcm^Dss zV~ihuX2npish9dF33{!&^?Pt#T)@5qHt#8Nm!*T{2SYfI1NeyMw0!T!eLGrz&3TBc zc`vJ8(sAO?>L zBTx(_5_BE=%Rl^Yx9`7h>pN1(#7i)&#P!{t0?M9q_CQAndb$S)uPsZzmo?4Zx*nox zyEk3)J)+Rl%bMdQbI~F&y`kw}sDPg!T;)B|U6Ged{%r9@z`u!$ojAczo_d;modz)Q1>^=D-ehz23=l1jUq z`Z)h-5PwXtPsP~HqbchIaRtR-=HZ}dkkGyI9{_D1H!_#JKLqlpKP8{uw_d7r%vox69L!lVR zh;#66Eh;v@6v*8}x4ZDJ1EO$P;;Cw&C%U-gT5l@O{kpT4t}eZM?qc<`l-{NAGIn|U z$(FADl$>0FO78QKkQNK+TNe5xLW#$^pT~!Bf=#I==N1;uOwP_7d-RdVkNw^s{l&TQ z@$otTRb?S$2R%MO{I?DHDqy*`y8HG7=h6UQOXaciu9R-NG{49c;lv@zT75WAp4rb5uAZ-wbn^!2TO^5v8Wug7~ zn4089?|EsXoY@wHz{jH4AcSQpoG&fMi&Hx9naYM-wJ{)rA9)*M#VpP(=5iy$V|l!V z@>BD3rSXfS#X~1f$bnP6T0^)17F@b}#R=g$bS_6yD>7uR8}0ds@gk%TQt#Q!Up;(aI?>nQ0|p~-=1+;3ExzQK&fE=F?sIC# z?z>x9H@4=wBz%aDjft?~V9Zu4Hx;~M;N#R>=<#NyLG4}Vly^AmcaEKrzv6ek;}&kK zMEvYPz*mZ`JylT}^jp@F)-kqCgag0#P6eM1d#}1)@L{hyqtA@B)8uKB@=< R;4c6G002ovPDHLkV1g-}-Twdp literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-hazel-60x60@2x.png b/website/assets/images/app-icon-hazel-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d76da2af6821f85e7e0ce99cae8b2674cc020fa6 GIT binary patch literal 9119 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 literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-hex-fiend-60x60@2x.png b/website/assets/images/app-icon-hex-fiend-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..21486dbb561f47525f831a052cac924b127ae226 GIT binary patch literal 24350 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

G-aoo^5&}KX} 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 literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-hey-desktop-60x60@2x.png b/website/assets/images/app-icon-hey-desktop-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..6e2c7b6db60192e22a71d9adae6c5eeb6ec85a07 GIT binary patch literal 15088 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 DQ|MUU literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-hiddenbar-60x60@2x.png b/website/assets/images/app-icon-hiddenbar-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..814cd33a000a5a0f29399b853499a57f5b77730e GIT binary patch literal 7724 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 KRIBdVM*klJ(?00{ literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-hides-60x60@2x.png b/website/assets/images/app-icon-hides-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c818f9d563f73ad03f4d09e35b14e12788624b8a GIT binary patch literal 18213 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%0DYpGL8V*m8Z;nW@!`iaIH62y@P$_6nbD4zNbo0K z_r>fC^p}P35cAM6A^!*AN*mmdCw1RT0g)QR7%^$A6C!$Or8?A2;yndlK zFl?6&mu%Slk!Cr$MnmnIg!D$HfE7aeaB+T}&dI^`u5t-f$q?9{Ap+)n-|jM%P4+S3&WRG25*DJjj&5DtdkDgVS!y9PEVu3 zAFpoXa7L{l5>^{WlUfX!>tmn5QzMPFfT{9=Ur)GW*ZO&)F~hEGT$$-wdcU9+$Cwn) z5ptkObYyJ=Hi2BbKGPu-OWIedEk;@&j2X1HnM}be%qiPZ8F`Z{DF0?L<^m^+CSrQ^ z4HkCvBJ}~Vr6Jx;5zWwoo9qpA0#plyM{VpBKK2-Y1TZDpj$*7Z96Y+e-N@YFUGK?{mf+HwbzmkZnwGkN%o|gxrtCV8Cvq(FwfoY0h!kvqDuvwzwF4^{{$(YaQ8dgWN$JmB$sBI9#I|4 zqm*gNj@P&%I_Rrua~1m)=iOBfh7(6-Dq~fwSQ(Y=!u*3gqp&Ecm4U6RkLIIe6>OqZ zztwZsYU2~Zg>#wh-DcuVp2e(ozLeWFt^8>52Vu)oxAS@LEJ!FuZjLN|Z!opZb#|r2 zOJ1*BP-O+$+Sqrl$ZtXm4g>KyiLR-~--Vp4VPj&5m}si^y4V}Y+TB(^`|HN1^91XS z)#4(JH};lWjccqGzn($tWvls)b~ZmKtmD3UdP3FjY*H*x3P8)|qwSS0p5S(tPS2>b zHMZzjOiWQMj>6B%G1&o)`p!?VYO!Yaq!jW949$IP3#~2!xrla<&@0PmbrJQ|dcSOc zBrx=Tls{>Hb9j!rD|xm!T60^JS^vajtmI3?zgHOD*dc!iGwtbR+fl7I`PisQ9cOO- zS@bW)Pvi_rAGR*c4iO33Y7Ln7XOoK1QNi$Ni)FLcUSt0!UMDQIOoT#y!#>}SUANgf z9`NRJzQNMb(55loQ?sXW3W>B1Y|}wnC%7&QzJEffp39o0n8<`etpnJJ?dXdHt^3^JMUn|%FNz9H7^0E(z{Jw_C(sf<( zqsM+)9Ihu$2cfDk2qBd(54$~W@lzYAs46yflONR}?%E`lD_1ukmtek4

wx*TOD=i_Aq=y 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 BQ8WMm literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-hidock-60x60@2x.png b/website/assets/images/app-icon-hidock-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..67d3ddeb099c6fb2d3920d65a7abbad8530f8775 GIT binary patch literal 16524 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 a3A7i0Tw&&5N&BCJ`wFru@5-e=hWuZ1dlKIO literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-highlight-ai-60x60@2x.png b/website/assets/images/app-icon-highlight-ai-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..2f63a7ebcab171e3c0e5409fada589a35b6c4d6c GIT binary patch literal 9302 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�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�fLBL4~?y%mgOsU{(p47r$L_R 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 Y0Gd0CBS}90IV>wJt{_$`Vifql03KPN+5i9m literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-homerow-60x60@2x.png b/website/assets/images/app-icon-homerow-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..70193cb9fb71918e2b71822a95e54294ad3664f2 GIT binary patch literal 11179 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

vxC)5^lv4qiq!ebKybCy3|}t?inP%D?C|KVF5~ zdlsHyy2`LCKwaP~zvc9av_j5wL;|1Xmv15zSMqs4^RO0jrB{#l#j_L*Yi1f64#;TI zN{OY_z31Mrpd0kGlIz<1zoE-3iSuAAVP~U4>y5rfRS#8t$F=N6O`VTfp~OTPxX)?H zqD}iPRy&Xo%k&gPDT`9EAzf8YBRPQUs6v}|!@lQubj9-PlI{`ljzznFh)ad-SR{60AR$ZrNKDnsPqEmn&#e` zM9}dTVXmUVY2-%49Yw*3|4qxrHv=c8+wfTnx_Q@I}<=KR1&W_WRVOa*Vp!SO;iqgr+&nPz{mDpogBFLzmixAv+t z8vcOl#Hs6GS;MLwR#c|fZp!tl-%+2I7ipVdoTP`h(eg1!;Izs%Ov zvDRS)cJc&s`1~B{&U*a$jB1_fC9B)o_<+Ou{Q$kPUOH|Ua^B0jrz6YzfGMqg?+UcD%r4O~iIGar!cZsn!SR2K09!|# zdoTq;Sjrn|K@X=ru_ZXYJa$6~a>lb7MglGIxXY0a<6M-v3UnEaVa_7;yBMX5mf3{j z<)b!6)}UcE%e8!Wz1Y`M;6OOpPw2V|lW$HI-86%lrd1*waw#z1Sa1mx;dFWxvVN0N zwo(DwH6^%MpAu)Ls0?0AqraLZ12;1nGWA@%+IJ5o(LYW(W{aQuu~+a_IUMJ}vWfh0 zjM8-M0~;^B$Ti9S`(cX#7OwXMxg`;ID8vkGw}6nTV;p|VO#+E!)xoAnerT}ULp2fi zCh^o%P8ViLPR`q3nxma5B~5-KjGwaJms8Z_>jgkCnb_8McFy}};>PNR!EUavl@ z&P_fsTD+DN`Z4bKset#cbjqAVb>`EsD0IVzZwV8l7b?E$vDS92J%K5(Y_o9jN2*ZU zv719qi+!X1GBRD30wwSr4zUUv8!3x3p=5Uy<1^J(-u!$p+2ObJ0Pl{Qk4X{9_ZU~p z<}0OSYR~5r&kjkD_QV$K52Id_fC9hAyPqh7zp8lA3q07i1M|+ya{^@R6Stak9F^Gb z(L<>?w`x*h*XMs1L^{E**_N}(%+3KG>ngWDc;FNEs;KFT<5~9tyP94bv^Y8HR)2V@ z%{Oic03rK?a{Yt;nxx&mTA~6_-Jfo3&!TeyN*&RSlL&dbX-ua2^DkjIG|R{jte`)w z#XQCe`Cie!(=V}Xu4<#oZ`WQ*>shoQ6{d*esDN5NiKmV%p_$5CZElb>rZ_2iP> z6ZHhyKtgDU@-M}|i8nl|Vqt~o9zFY~XPN+b-WvAA?t9|%jISd8i1GNb^KAaG$-;Q$GF%FAoP6VI1CPb?Q2nXn?&}=n#w%6^;;F$_gE7Jd z9(UcBGSVqy_{sD)8#!?m-LN?J@ln3cjCZ2`?K&Mhjf$G7^9~y7zkA`LVlo@n^4ukS z39OliSE~K;;8N0xa_fM^b8qG{RmhHe;T%-VFtc;|`4NO&>r{jeHy5S>ClseWI;qJ0 z5I#HsTf4cacQ56Fx!6ZJh=ygDHpP(`WKxsJU5vNW2Pe2$hX!TRqweGFtf4&|s<=Bv zHg)mX*A;J8Z-a%)3$yWY+f;--_JVTwdeO^CDOPwThg3jF|e#y_=&N^SRo7P&7)$6;L+zpw|=%;KP_1LIs$`tWHHt z`D_DT&K|y{MQcW1zl$iI@k;CS28W-_uzacB$?65!Kf;ll=+tBz&X9JIPN>$oh^*?q zPA`$5GeVckEBI=5J=g3VqM+sFzHI|kso);0W#5G{15v79Pt`oAO-_FfsTGk6Q3zgDs0du8VgWg|OC6``Xtxv+9ms;I7 z0mNAd9Cc#Cz+-Ixg3%+6t{Q4j#dA5OWBpZxUbs6+x6 zd*uR`3im$Hp=Rs?C-c11eZKge zaBu3Uz2B+Q8s!UlOsub~Euc*vfRNbT7N`PzbsK&si%$QM5m*g75Qz!haZ&qqU4@@sZ53P^ z1vw9Q`@xtuV&^U8eXWi^Y;$AdSRcDx;qa5cES&M{- zX>mE+MkTTlbRLvJMBUd_t}aTs9vYr z?zi^Ln8Ow!0s=ICBStX_!lCTLd7V?)3420i19cANbKi==!D3=X5a{|?$y0`3iNE{R z98u0v;K`CflR08dxhJS5kkVMy6FYHTj?tk`rvF@g_z;ad8s_aSy03TRt26(ymE|&f zhwc*;8KESHW~CmarCRY2cWymG5)*eubk>FZXE|Mr9Dm`Ji-vZJV4+M!B_v|1Hu3OR zO?%zQr2OC($f%pera0zt;Mi=SYH<)PbC1w+KD4g4gb}*;k>B#PkZcnQnt&D0E^ z@KTz*g8_$rZL&dgi@O71UD{P!4%PFXocMhJ?Xl{eIfUxm+II-0Vh+2hOwu|tj1r}d zis5BTK{#3hMZRL{-21_^_v79>3q!YI3PU3V9O|owHux!;E0k<+kP^vEQH_H)@s0`& z&-alrT{2^a7w~FCK|E9=tuP@cy8gk$`-qSE@_GmD7a_0eQ3(Ygs zs%^@dF5@fyK2>{OU)_O6RVSbGCuI-ECFZRYPBR>#Yskr&lV|7y$;6#3pNLs(6L9jf zhk^zwkB1EpIwwU#AsT{1o)baF$CB6k0>Oya7NYy&9hXri5J&qiqHL40OIcp8$+VU! z$%fqm5kAI+VXi!vSjwtJ*RpnnkuqK|SEo>J{f@!on}$z!x1j4jmA3FvhQh zhVRNkwx(-)zH^36i1;++!rH175a#N?d&z-OZq7fGH}HHYI{nPLCALwPhzA&fmJqwN zmN+jZ*4dFQr(21nf8=dBEk|x9-LuR7{^@@MuEUU@#Jz4eO@5y}{oOSSke5-BE|)Y7 F`XAXE67v86 literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-hot-60x60@2x.png b/website/assets/images/app-icon-hot-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..fc56b2ef5dfb8d8f505d6f4af60ca94e52ae2d76 GIT binary patch literal 12775 zcma*O1#lg|vL}4ZOffUW%*>22Q_Rc^F~@k!j@dCYW6bQ>$IQ&k%*?p{-+RCJUVXJ& zyHll6tNYijmPVQxje345DM%r~f6DKQ27b^#Ql7H+P89TVT z2#}HeQ_+7N|Mt_&!|K0lvUmPZvpyTh^pAvzg^`)*zifZ1^8dr-6?3q4a8h+NGBFcm z;r|!#f3p6&mVcv_tUSzYHN~y$%

%Jrd+#Vf~NN|6lUI)ztbwYW@$&e>C}-{%P+2 zX#T(Z_Fvr3&J~2`XZo)TB?u1)-uxUcOtRAABHum0&NAU*^|XF&bhNe=8aNzFSTj@v zPkl4S8Ot()^T=gJHbm#cXpV$2PM29y`z4k^Tl~A$i|mkWwnFU zkrH@|cUCfQ-2gvE{iD<*%c*!|?^>cV#@RPliJG9r<7zvO@4R`(6x`MAd#|h5sj8v? zN4wXe<>iukO zPqWSHmS9Mp8&9T6(m}{6Ti$}%AEPbK2fiPj{t!|Q!}s1-5eB2A^S+qT?Lb%;>FLWd zm=2nkXuE0&SX3M-K~ymSVGflVh%_FTA93mI(?xi^QAsu7JTd2SMX+(%{{l` z-Jr<*tKBaH#uWE03Y^WnIq0q1T!H8ly(5MwUA?Fcsg~_=(jmtu_TN{KV%@;GM#6A% zV+7w`Nb1n|(aLqV$IC5_6G%i!8`GI?dqGL{iLAFXs z=i#VkfT-2g)O6RNl3Jv9VnV!^*sy%#2OkItd4syQ7+dY;M*XGLpy_yfX&<>Uk7nUb zl2EF_4yJ;$ZKCbh!KfHnbE+}|b2rFx(y28++r}6`z(s7nO02*Bf<}vXGa-n6_gWEY zhA&t8M@@!WRgJFWx&Ei(M}Qhm5hoV5uozA*=QZ9RJ6xFL2}!mhO@qxEN5<6%XhP*S z3g-pH%gY{=3$sI3(O*;#8>s3=nsdR=yz!T zh^-?8YmBVbWb(X%`gI81}@re1CKW}Rs5SuNYDB*+G>r7KZ?qGJG zt~AXJydqhE0>z#T`j$0IpVeFVElY1cmQH5_$1h=%G$LA0Vo@{?@8(zvEd7tRXOGOp z{0o4VB-$K35L5!G1}zq6zyw)ai zr2tELJ`21#*H%wDc{>m>?I(N^?J+QKy+YN%LHc3dQ&6PEf1K^3Na%(KM(HHqxvPG?8^e+7l1V#^a;a_6 z2=sOa=PvhcIK^UaHa~H4?mBU1=r)GC9roBh6lhQ}oP)xkbETE`AIWYQ-gUp+wPzNP ztiDGy(w71s99vDOhKsz3&j}n?89)TC31LI}gLAJTcK%XDq$6S+w?AN>QtmKFyl!IDD!uMy-P2AId}j` z4FouQ0BF2s6-~Yp0b(;?bSrF-WB()a15Y*)W3(nn!rembJr3OR275G~lff+fqd}s; zBEI*5E`DFpHx5^1K=tI#rj9&LbYxe<2sR@AU!Gin=Cb&b01yxmTD@b}HIgjeh*=y5 zXF7IsT-3yaWintHX1thme~f`&WDE=82v=q0djQPgCMo!k=i%0*?U$##nJG7pR1OmE;3g?I73X`t~1l8-#3t8Kk@SkTNEM;hen97|Q52 z>k6)G(j7lF5!$-PyI!hqj3Q% z&gn9noo0il7?I>RGvxBpD-``7W&IyR7gHlTu(Z0Imo2xA27QODA7q4;6dx+lC*E7t z6WN;nc4h4Xc4@5jEvG49%L!9hKkRNQ4&=p+DzLQAMzJe6rP+VWc`^(^1)xR{hk=nx zY7}s`MU5;@bO3g2bAV_IOUsTY;rF^P{WA1=FPWS?fFh*xWmDZIod#Mm@8^|$0ST80 zGF6IV3MQ%FMa~UJ@zg-7s!qVj%|PdKu!({bw+~hO&z^}hqcevk5{&o3a!K$Uel==2FnfD4ktX6Q}Ejjl9?{Z ztF za8%_2PW+-_tzEDyca2ieYVXSTygD!;lr_1$UHb$10!MKOM0g-9tcx@8b z^+C5`X8S@$dvI7f>Z)j4I-VZ#GaaR>Sh}8qwVI9K;8&n(AC!m1+5CPy!2_}8xL$`~ z9{-IYW?*w|OA`fPu`E1CLt~#w=Xu(}1aC}d5Bvl%QzYD+1NY~5b%|}iZRs2AUpkgQ ziw-IuLeDsSCSs}KiCWO?FdQprM7*hb02KiJ;tlwxID6v4O7q3b== zFlAT>6a_zY879A7-!0_(X>r&Fd~jW8BqSVtPI!oVE77K=FQ&lxt~#Aq^(Uf`*x}Wn zLW}nZHaQJSxD%%$-Az;!b|f&??ODngviIz*E+-*%-SlL$Gzw$YPvL2CQL%MMo@Xb%i`m{j>boMOY4N9A2!UX#2HRhr5l(+DWRLt zs|7(`I=d#{PmlFWM0F|;sHwP^i3+~hRaSpp{q`#swVlr#Fkj54O#Nfg8yIEQk)BQA zD<8u+p;tS*8mL^wfHuVz_^4qMrtmv6<1CDTUyc2N_2i<5Ek=@P1X>SYgZ2K_I?`d) zy1neDKoES;c$BV@f5-=p4ScFX?cBtjjkB!Y*(JlWOB$~^P=QV}=2gx3&YCSor|h=i zB&9)u9!Ovez&>gx3G&)^U`X*v47C&I5`R#U`|4!~ypIRKR#g80m%93zfPG22 ztElrhX3(?Qdl!`e4oAX83f(NaAPwlmlmK4Jv>R^SCX=|C-c*Hy4YQuj=f@uw{^rGl zufJsDzrw6sv3U%KNqEFY=Z2dsqQP`Pg<=s)O>@<)r9B~1DQ-7?zxfDke&u8;2Y3qD zldC$2A__yq`yZsGINiVgTy43DAvqr!SJug~`12ssv*5x&Tyd^^QI+X8+&y&hmuR)! z5yud?sbsVbZ&%{6f=Uz~*tM!_xWqU5ePo~Bc{g9Z#iib!*wWzn?-~faJaayo074he zD^t`Z>Xr3y@w5&LD@H;b8)A3IoCFN#L!i6a^q!#(M)>j=y9SM3l<$XBI>vW;9K$+V zme|3OO7`sTmAI3Xj#+gCK4nlKw(&4q=Yna$~p-%f5P?>sM2e zS8Q2sXXXQ$E&s=J>bXGW$0O3Bx6~P1jzPRWXGJYXXng-7-)=2BluhAl=btxh;ntN+ zRl#7^h-it9C}NO3h+41P6vsLCERcQX`aY9o*forjBDi;=_F1YLh?8Y=d=gyK9-uGn8ja`6?thJeHrTC# zJQ;yhiXQXZbW!U}G@b1Bzd|0Ld_>!6s|2mrYot<%Z%JAg900vETvIWu>qNHqc zZETasFm+;Z{{AZpWFWJM(eSjC;D|Ab8yL+nYLLtHtg;t4JzBCi#LUQ8hwKDiC-!M9 z6#c+8iCcv*Gn}e0wj3>VtbP}bF1P)Ai_{etY)(2IMGxRu%PuyVoi>B75ooEwpY6!d z3KN>%-A4x0(XaT%et{c;5N6Pe5H=T^`K*j+6qEuN@H_Y|jbS#|R&b%pOo=|ky%PXJ zn>x_q*0$u1w>AcPg0`Njn8A!VbCc)!c)SMyRTZ_SIEHr2<TScM}&ch&-XbR=Rrf2{c(i~+>kFIK4~C$7$D z1svvVHk$NOkpT4Xy#(HYWHWH~+D;%4#B;#VH=#PIX}sf!dRW-P5?k7%dIR ztFJn~9K;M6v#q{3nz8WZ+@W(yBqFD21pdttncD|7X>i(B)CS#Vh@Ju;#+T5tcXlGL zJ1{8%(RWu+`mue=7bU{1^IKs>*%RHS4qQSK5*oF9;tuW~3tKvOe>@)s689=wsW~J~ zu&Wx|$;vC7Rd(iVcGfpske?~il8fd1=I`FG$w1j#B=az@hIrBda1QWZ6%yzUU&e$c z9U8BuV36&CjKKqwce4Jt{y;R?=3g9C7Q;7KtQgkSYD?81t%ZW?_|kkjxavwf8wOpy zSyDbvr5nd#VRojZdQm}|L5ArY9O&ae^984co->O!qMW|QAK;;ExW1R@hKz12r%LrY zr#&rdUq;pR9kx2{d;L&GF0tqZuH>n%P3rlY>Uw3+As!JS8m7r^soLnVkkCBv?;S+H zknlw7hR~EdHacbz5%c(n7g#T%Ko|zw9KZd&7mZ~1N%6i@5ct_{A)w=RwV4aUtp{W@ zNNu1!2X8^_g{&dhoQAQKDV#PzIBL@LbmXpm)bkwbmX&g(vOy%3ZfixYIka$zS)ol2 zrb6rC+_W5S*kVLC1}tN`M-`-fV=7Bp@;Dy6Kz(u^igG6+P%?2oDBH?PB$^zBe05U? z6+Kfx)#mfe-xZd#YXn^O-W!dUc2XIG4*;|u;QXW;!l1@%Q$gS`2BD7^Ql%#D=jaAz z7bK!XdhRi_VXp{xI(ZGq!BJL)_4wewCBJ=lnD&b|0S1veJKvAQpq+datEX~DgNMaS zfn}$PWU$?irhui5i@1SxwD)g%UIaq_28U?6MD`SpVlWtf^x4HPil3+ z%8B1T#wunqO8@x=Dri(X6GI<&|CgOo)5eyL4~;0VF9&v0mf7S&D|olA1n|+8Z8vB z#=UZPspvrxD3?p?w=i51B4k9#6o&ONDTec!?;lv;A~-`a+YbgQz)9CL;&8gdUi5=r z@hbFY+P5Hg-4zbAOrO5F?D`lWyd}KyDl!1d|-`kpdSB&3Xxm8`Xn!3~M0P6eBDa0#4o%56ZSf~0jb))7u zqcL9*l}C0^v1l|1N4S$5B6j(pyBRCX;@$TPx=tFVknMc0RMB^_*dgs7mu{X1G7?HX z0sA{!00UARg+p*7hvCLm0m+MlR=!$tS$Iq8uvFj)jaUB9{0HXY$mVro{tt_NbnoqX zyxzU84E@q`5nFRWR&pR=^bkgjW-71w))G@4+}%g6K$;C@>hB(RQN&oookND@6q-Te z+(3WZq_&r5!|q=fq8M6_uw%M|RX}c$W(GoVLT&h z;OP=>3?8O&c{PbkRA4v;Zo}J+6Oh5FV9sv%Th?PlFF$F8%Tj{Ai~b?v7Hpg?(4lVj zo{wIDdAOX!Var`m%|LuPl8in&SXMdzyX}nf{d4*6mOd?#KPi7ylRrWZatj%^z6!@B zV6xSad-G**EzjF6ja8g9Mv8C5qe;LbS{D<(wP7FvrMV`XLMaz}u+8XCyRfPW1%T9< zjdB2!N1EZm>6UpU2$#hfDLs>sCiwM0Dex>fDzmNlU(epnPt9+ehO(uVV(uXW8$Vao9RB zK`wue;$pdyeFfl4%#mlkuJ92tBiWw8KAu%4Ovuc!dYC6^1ef>R1t2n-1knjHiz;yp zB`E6IY9RC0MCCF#w&|n+EdF6cL~k~KGW_6dR`LoX1`L5{p7c|HH723>hhf?9;I-4> zi~?*8b^OAJ{0>gWIxzoiB(YfZBXzw0xVfd#vG^LT9lSY!l9MShMYpZL;lj8G%Z4sD zAYi*cI-EPY`*qjke!E<@1g%`Ugtgq#E%w`&cJ%I_29qrLe|NB})ii?K z6s#gf&C<5?;t`r+4!;@lVZ_r zc6Cqh#5MX)NY}~qBSaDko`Vaz4@T7|?CQqS?9u>G%6AK^fZ~x6NF0(O=u-MGMyqpp zJ6-}$fnkaXT)~D<)W)FC6;mORrz^3X=)}Fdtr(vL*rA+{FC$IPcc$?NEZEIVV{Y?7 zM}6Xl*|)g7dA1jZKl~31-ZQw8J?DnD7+Z*bw!E0E=P#HTLU2%t3oe85-YjoBNq7RC z^>q`|Ro)?wo#@_s5sAa&TR=$Eib4eGG9I{U^=$-z2K7M$)m@G0wD!tgP7W%Kfj36! zcl@Z$yctMl;0y$L|IaM*77e>1(L=82%%4~Rw9^*eR2wwnc=a$I5kk$)??|8}@BAN%{t+CNnr6GaVC&vC0}Kg%;a3 zg*v$`sdVG{QU*9s8S+8otsNT7|0;iOiG#VX)^an+elVc%E z@w$lE%;Z`n4lXoc{+usMz;c1A65&?m{I|O6`ATFgb17XRTRNRWJu_CCb%D9pk7SD; zGJm_LCo2|?2jtGMTKO;aPjDd=&dm%SF{Xd<6s8Mw@;?)S?HyBxdZRa=%PMKDZ5G}U zVy=2#yqLH$!y-=8(0Rg4LZMyVCEz8qE==b6)Zem?G|H+nciO^9cY+0ecZ+26voOyw z%GtY2y@l~cG=_q3loE4uLy;`X1yG=i&7MB}CEvuI<7Dd!uxt9&4pVM{&1e#-lA26h zo6yeOE!USARX7=+SUL_UJY}2(m(=M)YfjJL{3hcFt7Nl~mC-|$Y0fdupiX}lW(fuM z3TFJ$Xk$<4kND9;Z6*8k2wem}zG0x%dw`PnM@)<^jF>IZKoY*5)&(5@(v0{}V6mtB z_ee@89GQrN^9mA)axclSYB|z!>go#vn{Sm_<9XfX?E=Hga5fK=THiOkM+%JT=LAI? z*lIWFmifyHbV!jVXCf>nUWKd+qRYElH z3`h$x7!j9Q!>fXU23No{(~&*L8a~AULSLf5G^T7TX?KK#7)h})ST}_ zi>0ex3^;!Icc+UE%RkBwN`=D0D%O$w?^415!{5 zyEq(4{G8yXEE&a4C37mV^mJLhNgn5i4af1cR%*ojwK*>fljJ#umG?`TVw1xsMXWtr zrmL>5#ogHbk#yvYUpVNJ<>cw!ulxmp{kzq27$^tY8!d_eV)PD8Z?+>7m%c~E#^)^E zZ>;s&<8Li{UO9{FD8N=e`n-mnOwukfV8*sh>#LG>DE2)o(y3pjJkvVWsw7WJiFo#G+h@U^{ML2Ah1bCEIF@x9Un> zMny(jiZ{{}Db=9f)OCv)JO7ZneHGJuV${Bm+vukqDmG1{4-uKrk_2!|l23{dstP>l zxIVfeIKNFsGz710=8f@F|?QfOBi!d$uibj zkK96m_2wEe(nyghLN3Lb*)LPDr9UXk5IrpzI6ScWQ5#PLv_S4SnT9WyzyCDl-2qj` zch-rsR5Ac!%9DOXA%*lD z2Ahr;OX}vW%MsP`fuzWL}qv zJ3fy=&$PWxe9qizEm4{v$<#9<8xH#ve3C4OVusyyqvU;Lrm3a9;yb5@qS+gQeSEpt zbw1m!$_mC;Su`Pd^3qzBk~!zY8dq<2mj+=VE;qq${`9xFKE4h6QXPW{yg-o=-RGWSdnX6c@g|kAJP;-Rriuks%xI9dBK)s%P!jT z1BlEV9Enm19JIf~rXMNca!6iG4=PmAsBjTWx2jlhL68YZJa$ID2R zgQpwT@36xJWNqPJ+{af;ZsfMoQaerRXks}0&JyYX>0)=AzBdMnk(-l@Bm57^Nxc2< zz`Gh35s7`a%yYY1E=VWOC}$=mu3vx`Fn=3< z-PL}6{4bix<1+_ZWczT&G;2jt0JU`y>M|U22KR8$b5*}B?@8H0bNhNWMt=>ssAb!O zu@&sFlfZ1}3VnLVU>@9s`F&i=;=JPK0&oE@xFKux&ge2b3Hr{D7`vv^Yd8bX=KEre zVuP}NkDf%KK;rsTP}p(vvwf+!g#u1TygAXaiZJcsruC><6SPt!xnbkedcR}bFGac` zs`9Jo*W)#-`dyrYVoU-vD)V}R}{FL1%K{GB&Ll#cKQN<29CUeuQBA7Dy*W8 z!3L~<-ab5{3f()p6cRsb#`bl{!BTy|U%FqVLe5mlOBlqU2Nw)-XYJeob1{7PIdFSL#u9=@I_(-VKFl0!YQN8jk>8oKnWylB>tgNw5} z9v~F9o^2;R=xm%XXqiKv7-$dM3{Xd>ukX`aq~Ii_{K7C>pu=YPr*p?-H9&JLE}tG>gs)n=Lr-8XX|;dm>+rNt2>Btn|{%1t#*abtPSZG9;i&B}jF~<>-0E;8yctQSN?`nMAk}>fmohA0!P8Gj$q1 zMNCj96K+(J=Yw#9Ci$SkZ!e)~biaoTKg`k@R%WUN?^vW2B*ca!NyY<_~a#r{#A1Jb&_XuO$evq{@5N z{6+iV<8<5m)32P&58k)PSwg#13uv?jN?3pB;ZBx9Q*n!D;+STHVLMZZ5wYlfsAd$O z$k~@;;pLPSC)(HG#T**mK~1^!=RF}{JseW#Qd;PbBN&)4Y7|`CAz$S|iQ))TL9)#) zb+a{)IghNWUHM~kgRE-jD+<(HTZ_#~@t9tBX$0uZefR`*>sJfQoBm!E^(R!PiJKN@ z-cQWGi`Nr)(IG7qjE5u4C44#S+tKbHNH^KoYFCQf-<8C$V^=i1UX*+j$~X;{#w?b# z@Z8SLj9(0PwZcEtMpnJX+lXjdmB){k1n!SlVJh0*25c|qTj`s8gnnBuvRHzuAr-%T z^m3qLs-17N*!HSWxTei6Io-{dPb%*|DCc zNrJ3J88iTa^`eL ztU0m1z{0*3(B0HSQ_hG-%}C!>Cpebg?lR0`-Qtc&g7^5jA&p*U!)}`B>i!k1&B5nH zXTk_AV^60+cJA=cd>@+Cs1#u_r{}CnQZHkMLad2?yKBtd8K?&uW!+(&;i4X0Ovr(1 z#zB&ojUkadMbA(RSGI053;-kVd4*dPh3aNnH5RqL5{6$wXDt|#mAb7@_dw7c5ZUx& z+sq>{_LdMKiI*fD3_7bX1LXNky!`#RxPtga_@ljtp2CC}OmuD`;!!kX|NUqPyMnzw z1{c7B;;J11{W+%dY=>8*kHf(P->+hbv$M1PLYUMT=L)Y%>dlBrP-~p8BrM8wJ)4QJ zXLs^*i=mseP=<{@-dig^Cev;0CtgnXavxS)npbjr_@oHBcrt`=+*N)irI4no_yi_x z_-30R;yPQCOhvuzmCM)i)AtP<+KKPgEfo;R9QCxtlxJk)HE1Y&M5=}Otu_+0t$4b3 zV1dZBCE9GCG`r8##Fed&Q%*Gd;vl{)Se|NdIXtxAw8{J;pK>_!ZZ#Ro!e)^_pF*_G#u}EKR8UUF=>@Q6kYsgrZ^Kpkm@q zSG!4dPW|Hd`tLV?5IC~oLxahlrPTyKDf97M0nOYy(BdWt{9I6M0EXv9q}7C)L#rmq z@ob8Jo4a2R?NB?WUV^=*gzHNdT=j5-UDbr{Yhpl-`=hBs6P8Aj&H*?Pt(p|^*`i-i zDfjvpPC6kwN#g&ozp>vutgkgKk@Sde%@fz{c=>kI9z34vfYCsOvqvFLlFC5fBtX}> z`Th{fY9(%LzY0_+fMHfeqEW`hskY8uI&!{f7=6SqcbFj6XiO@p8j&l;jnS38wP37P z`PC4Nz-+J^XgR6bjEy9YP|H={o#a$`Uzgjb$FP8zg@l5V-EolRwGKg|MX!9P%dM}Z zQno~T!t)Z;szFK8&2v_%q>$G{fn=H(6n5PmY~MBk8tcyZFTi zpH9%zaNr@kyoul7DD=a{EtSyIkl$UDgZEC5u)b$gU_=8mP^vF^8VXF9xF4U)>np@KRtQ9?L}%E%-Z3F*20|wEh<@5b0be=am62hTbSlCG&-Q`)x=r6y z;O#}oAvWvmOAGI^R}N7XZ$&Vexb($hjR_OzuEOC>q@ZijiL#S3 z7GILM6Oyk>gKxja5bc2K2(=HT60iT9O$Luy04Wyy%ah0lCw2yDu(C?GN%Ob6n9U!v zK6!4YpczZGWHJ>-v32SE@3g{wXUekz>!=6FTY$Tq#&Xwzs4){L6H$8 z-1hdwAP~~H{{ZHguwcp1(v5_r2-ZOxs6Otp6NdggP&~$`sc~2w&$dW+Z9fEcg3I+8&S0T+NDivGpg#0F&`2mVsa;6J@9r5=+>anx zxdzMx>Xi`0sj%+J;NGwP{;@2LDvw*lbax>tLiFcEl36;Plx4*2F6^z8$?s{Tna1Sopy87)*{6d4huzqP|)XA}Y-zar3<;`fDUV zSFrw4oY|pt-Se-O_nFA2kE~mHM}Cy({E}EmrC4$ZSORHqBpA@cn)}A1l+g1O%9`)X z88Hs|kjY#Y+HKlz9MR3NuW4N>4o!dU_&r9WcyB_WoUXM#WWK$J@Sz3p=~I9dgs%ka#* z8SI7P{PJYf``c@}GEE&Ch{Au_dH!Go%(Xyw_+$iprieA_3lyyT7e~lrYosyBk&uFr|6C?EAZ6SD*8lSck-vm2; zy-82$od;@fDO^CPiAF2o4(5$DvWzcBk24EJRW&sXS$%x;a9e4#TUuXVM?{Pp-*X~0 zF#=k)={tfeIQ`143^`Ywa^i*6?{zRBaiWTO;Y69jCTSGsMJs0%Z$Pw{*_3=>Z_A+;gU=HyCS?+!@q^@ zU_2AO#!NJ^;G0}mez{Fi6mU~LV1T*rz=m_1a;Q2I?wFY`q*;1%1Je2bDFFRnVd~9R cESDbuPpqpr{B~i@fBuP(mQWC{6g3R^UvV~PfB*mh literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-houdahspot-60x60@2x.png b/website/assets/images/app-icon-houdahspot-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..fc71d79129ab1d98601c6c8cd4510e7b1fee2c2d GIT binary patch literal 11713 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 IZ!E(97k@hixBvhE literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-hp-easy-admin-60x60@2x.png b/website/assets/images/app-icon-hp-easy-admin-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c839e8b52de67e0f4d2f5620fa3cc054fc9a5c97 GIT binary patch literal 14667 zcmZ{L1#lg`lI}TXW=PD;6gy^SW{#PenU9%b$BvnqnVI95nVFfH?dSjQ?!8;D-kU0o zTHRku>gkb2HEM+`$cZDu;lKd^07OX%5v9)@^iP6;`n>n?8H{{p5N3k1f&f6xFZfpj z$j>s7k%W>g0N_dSi3tPGct zoehJ5v7Mm_gS(CWKL7xaJJ%;^W8!Q;%`^GOY$!S*C+iCn~{X*Ul3<2UJ?yi z1tMWPM-w781||k354StqlLY*g`F+YKlK_I+POIMl92q< z(7&($>Zggj#eZ6|b^33!J`H62N5c4xfr;_ob$_bz{KMrEwzIZ#RJJ!TGU5Bi^Dp54 zX8os?|3WKRxSLpOh*;Q|*gAdoh>!If^M5P--;)2Qrsn@w^M6VHTa$Zf^Ye9KtCAEERB;EMWk7>;R5L#OE@Ur!rbqJ8U~;HYQe!bS z1at&Sw_BwZ{@fvxFobO%>lrMpVZxWe(@^z@s$i8!Cy@l95fS@4PkUt}XX6!|}LQS>)DeG)u8JmMe^Ng)eJA-nsW3G$qR$NRZzUC82t zAY?u5vc^|#d$}@_jx`pirmog;3i^<^%NcS4kW8dDU|@)za`#ifhGn1M@}r};xLopC zSlwJ*D-|Fg%GS$%{P=ecc`QBUMT*3`JtudM}gExH%1ZC%`WbVDDc`LAC;{r31KKra@#IqjGdxY_72a_QH|`z+!@hZ5&``XJ>a& z;6wswK`7+pm4hWR#y004xAIdI2>q$Dj(%@krTGzr{4ChsP9 z$8%k&JRXkHU{5otdmsV8(7rUpqn5~B-1Z&T@oJsfud~IPJ|Gxed2z9Qd~$w!w7Six znSD@)*8`VGko06`X(^3c^pny9_}!l9-HVt*smI%%?7P0mvMih$53%$YcZHe?+^W<+trk&tV{>_35xuTJ+ ziFBINs_Fw6!mIUyBtT_1iJ2Hjz|h6?_V)G%%19fJ8e?ohD##&XE%}>KdLusVMUTB6 zksF@%NFsfqBz2y=gNS-r%;pL+?}w_-%0)iM7cQKlD5N2XSBK+O=__*q7B`)ngNci6 zx_dTt@=k}9jYQdOOc_8YmRza+LVta2Yu$7NOf{ac0(S`JW@kBA7=Cni1$k*8S}jz%q}!Y>)_m)T>WvBg16wueK3iC~aU=qO_Fg&~ zh&cObs$Wet$M1<=I4xCGSI32$`3NS1bMyK8i^*a-KN*IR%>BpeB}?k-vP*STq%d8I z$3R#DOA-OA2c4b-%H5ORv+NP1+;0C#SIi#g7$~s_9yr|t#M_HJBUDsSxYYPQjIEE4 z`$wJ8F8QXgpezvDvn33|0}}rs5ME3gr;4(GU7Mz8q0@XKt_6GJ8{g$`{7ca#qrGAe zk?sql9q`u#T6HeHm)R0!^!ozjc53JW+~$fJq)GTouT5D5il`mqmUK!LH8sBb-8gwM z(}sW)D31(BBqB7A#VN*;uL_krRWAH8;VH?Jr=qj-w;f-V%vCg&-_NE%$a~=4 zh3dd}g@VL;Ijy#)xx_Qe#yzhe);pbQEAz9qZCYIY!CX2lLIJ*-t|5pMW7V zMZJjEl={KXLtbw9efWr9nRgt?d8Kim&dJ{0pSE&&Ia%dZR9V%vssXjnh#&;$=I}H+ z)*}-IAeT!%C_?lhQw(r*l1&B>Mw+^Cw9Jd58R`vM<=hMdERLoNY&*dh+~Q}6CJqP4 zX>?~<*v}QO$-GB!1A_FzeowIqNo^b{JrgW!-aF_MZ6u3{?iY~)6{de@$hv+^^WOhC z_GwfTu*3dd2QgNi39b)A&`HhICIBuE6e@OgW>JX{!n;I*nPT`Rcti?Udx}8ZYcex@ z`bTlCZjR_@W&!gQ_NZ_SfPtuGqsYC%D)_c|hBZ@i08>P)QXUh$t;YRoduygp)=Myo z5}{4qP$@{Wy$_jxwMF3TtO_~uWu)8prHqTyYH`TNABwHew`|#!1c?%pQKRrni?1^guAL^P*OA`|8PLW?JN6!4Di2Sv0&?Y*BI&c9E9sqMgq=# zsF~a(`E*dr3g7`=rsYE?N8i*wAORv5xs- z;Q|^$W3G?TF+NGSp-5arq*Ph?Q@d(=70b0t(dn<*e|NHwhE*uikce^bTF`vHwwCcl zWlwh^uv&UI)vXO;_lEoz!KB@yzI|vPm&vT@mlr?)P0^ zh5|C?3v0$_JFqbMYnY6)@Ua_N#H7*~sjJ&_(ME>GoH|{R7uP+AYz#n5=>E28fcJWo zEwj>>y9(LFBauMOHj%!5WvR1yWpND?U(;VM-(oy-_wGdS5`moov83YnLxnXRdJdTD zr^lcY>uMMf+8VXVUY1GcDuy+tAfCuT_cJuhVb66l)MLZ+d6l0*+}lH`Pa>kwzVMvK zeI$$6O8zw-v7jXfPy(a`gO)8Ktl~dQ%((UB*v?z{((NRG`Cz!>A7G@@D)lEdT7_sA ze>nbRLc++w#_+`GhBECCQKhpbXN>P*7Rt+0r(OQ8Q_)n@R>n!{<1jyHIW;YzSNkY-ssP$FuHOqSzN%52b=G<| zr>RRo7JW6>VwuaNR6B35%G|Ja5mKtJ($-9@$0gHHTQODVZ=1SjYv6n{$=-v$Vac@T zj2A@Jzx-yz=P_TdnREmMmuEqf0v80poyF_;r5Aso_e?8319%WcPJV?Bh4YMzA}rbM z&9#|HRwzGC-cH~UG@cX&(aA?Bh^jUy--e`KTX-cd-v=1KCFw01BFZf(fBM3YpJs-S zpIBJUf9N~nQrSxC8MhNVJQ?a9Ppt32h_K#Pr3^7T_g9&1F!c?$4Ih)%EH(&%#tE#u z2giqLCJppidFbD=)nf^cz1|m5_(C)+Jf194!nxk`Bf}#N5yPeR=1<}E+*w+NO&61MWy%gsUrGe(C1k@t`nSHjIpyhGol>ljC;ssk%tX26275o6 zBc`P)tN*=?mc~gk;ep&Vn1P_~E&s;hr4pThv1{)An-WC?2m#%M$$mZu)JYnmdtGby zxDg2OrNs?{Is7esZ3pp6;}-=0Yx7Ia)l>q;TPuFdl%1rnnsqDY^79j0hhm177nk>@ zB$gBpY=nyV_Dy5k+SSsEK5-ZP)Q2;L)$Ag!bZ!OnxRxfBo?Rw;r*Z6aJ&~MKD@IU) zwpJBRdOHZf$FjUAYbRG~;z#y@KBSW~$s|t>vZvJZd%GJr@)go1QiOo<*@D*_OzQBE ztQHyr<0@sOVMr{Nmb*#nv_?!FeH!XrtGugzM@|YpjdKKbXDpVf63+9^{{{nV>sv}GdljB#aU9~A!bbSz2SW?#SS zr&y8z_f#jetRaNx<)R$;w!QYl%ho7QyD!%}mRk%g0!w@Mr~;qO%c?>ax9m#Fp8>=i z_Kt}_k?~!+0)C&D-shn0Pq2iE_B~gBQ%_Ah)eOn0`fLd zj(fZ21^No-u^!dkT>jgf>S{^Eq&K1k(YYfN}N! zX&>rx%vrOOXIOj()NFoQP?F7fI_Hdu-+FOYNBT=L2^?S!uWi3?C|LyT5Mg^n>kkRJ z9Flr@KjuzDOIE$*>3dG0Z!4I6k*YCwhjC9dmf4Qpx6YB_Ki4C)!)KU^&tp|*)qYuB zD~Vys0O!BB+k8r(kI?Y2h-w?FvFhN43^`(JEVXo2ZNn%&MM<=9))4Dp@GHo?@H;xa z^XC^mk3GzNXhXF*Lg;MqjM@wN>6WB3sz40JNhVXxF&ekmya0!O0sLnig59D#qfLk)@`HkG&yyZ7*Z=_W{dgrrgm5 z*3rVFRNvanRgyA(U^YhNdYhH%#LpQZ+pKP*czJZR2XW)rm|C>CP#2S@1Wh9Xhfkd- zn!D(ZjFlPMPHRgxKHeV=j`;ASru*L6^|t$EEH)@#;18N82-CIyl1XB5Y}ZFD+SIB3 zu1i+uP~)Rp%8JdfN9Lc!@b`c54FO0pU`EI9;5 zr3^D1B$YwJlWc%Xs>?zl&!7(JoS*AG42T0Rf@yyFAh&sSIl}P@0$f&ZpH|~jtN9J> zl86EhxNSENV0L>t+BD;MCM@QW)fk((x(U}1AL9zD6M>JtXcmX3iWpz9Nn)i{-$P3s zty@rFa`iN5oj!+fgkv1G4GIx7L^$id{4~7WEGzNuH)S5w?qrt?w{?%5eAQ^!M9}@j zJI`R2F)CnIyS}bJhidk_>UEa_8xby(qHFCQIKuQVtkaqgje2zk?cCt4!C2@Qh&9%` zsQW+9Vr|ZbId326w7V<6%r9fv#~ea-LJyWTjjnY%(P@}Z15okzfqd$qq7Je%wX!}h z7Dv8Du7Ptc&5P!tW2n025G-0MV8d_epNN@)uipeAPz*<#4|5}>2;4XQlck5Bg+X$% zf^w?pFN1y>a?x~vU4_~b(axUV=G6z)4{kIN;!Kg5evxneiP`9RNO$O%h(p_nOh^Ya=PGAbIp)bkqpyfU%; zxIO{zHdd-X1Gf>x2U)(T@xSOt($d%P&%#oQA;VBm2N+d#J|CkBfjT_*VYrfu_#wJy zId~q?OhcOk!06+WK2QugD4t*|9Hr~O59T?w(v=tM_@S6pBZlklXs6P0pBCl5dIJF| zd_N9fm%izw>Q95Ah{D>LkJNar+d1s(c53wbRasOYT?_ag6~kF6`ZCst>9-q>QYM&k zA``}oUz3I>E%^OS{ZgsXgXYk%R$=%d^q3K0c@%?<3~{NtMNV&l~jXtglItr8W zc%sVZ&ViTk`=t%})Sg6bA99Rp5j+j)3cFN;ClC~UuQqZT5fl%t`*o6Bz$_hR;O3UO z3ZMxacbf*q((Z${Lr5D;A(I?KDew^ck?g0h!(2X6hQT>nZy6WFPjBp6q2Ns&*!)Ho zw`r~=YHK$V5_-l0ryhM)e-%N*P+r_Lmy5_rt`d-UTzbax3o=1V;Nn1Pp9T>Ebu zaHP7E8OuuudHvXGTmgTS-|j*H17$cgBN(*qlt9S{{iyS)f?^mHt9YG#c*gc>iC|=8 zEV#m!@UJcunsAUbXUV!an1DY5CL;~Qy~x9Ih2Bu6btwACWJURR#B3cJw4v7#8SmQ< zx@h*yIUF;EVI33bz0NMd);2yxtkPN&u>nak+{L)YA`nyJXm>8oVM%05;={RF_PgdV zAcAZ^!cMDM+iFfD``CxcO!7L3m#XxDp1B((bQlp za_1zrOpvp7K)_nAEnd)x)(84#FT(H#(IH73BwqC0n=uK}~kB#MsEA=KqQ0{`et zE`TpdP~BrFI&RNIBm=%MtT;1A9i5=RgaELcG57Vl=-C&njHDQDD{?H@SfXv~yN_yW zSX9OpCHe?EHo&}m*jTsX*V4YA1EB2HN66vEMuuZLh5%k2q;jYm#r@r zn;ZHo>i#$(tJMg8P>1I2?Fpb>Vz5=BlGVCAksL$Y#h%?=VZlv3J(5+@6@C6?W8SpT zcu`$K;xsxwXZWJPw@;`j!Rjci$0x<+sn$4;O<`9^?9e!LUZuKKkIf6NtUewc^t?Ee z;?CcS+KmbxHkT0u_$+k;_0WzGS5p?Rn zVk*@`lpzWzw55-Exg$Kwa!=zKIEzT_BkIyXHl)Ua8Wa$-a4qc%2Qta3hze=N@Qdue z@#i!~L-=BEVXc+QWm0M3>F!n}OSokDHT8$6hp?iTzE9nosYxCPdXqGc3qTO%t7a0K z!Ct;*YOWr`)uKsTv-Wg=`;{sthQ7B!o*>bt2#J!eOkk$<8uKs(eiC5#e74~7`v_Nn za^B!+-PPCzS@5AY5Ke21yPqhX|;{v(&U z##GfK_f^+SFGKN=ieXXB+N&@_G8P#5Girp=Si)pj#VafBT9c6h^jnh@KaWB_j%{sZ zG0+CrdQHPDdA}$BdS$*+2X{_TVEuCf7@oQ(^(Mq-n2bY)(4WjkLH??}Pxb)_U}^B& zpR(oESM&*avzLtQP-`1eJdMTW!zD2|cgK>aI45>Ka3a0vvsn*~Zf;9}8f0Em&p zz!l^q;F0fPCuMuf2VFH*F^Iaq(>TLy9@Mn64vJ9ChtFxU366Bl50Y8Mzk57zd5ntm z33g}km(L+FqHe;+E(9kgWsqn2g}(Kz@-~W;C)!(&wls!xsFj`Y1ScT71pG2C!~a!f zSA)sSlH+^&p*#`>R3K{r?fo%_!x7Vwp%*8WAl9sCOg}jxJ+EwH9Dc;fw~;)a9sElK z2C^uZFc4!>ML_4FNn+fLGjcj@e834B!(oa=*%o9exvwd8<*sTSLju24x^xu1s|SDT zQmui|^R&sLU(RE*$X2A`r?h$BMy;5iOV^R zs}RtmjUGfz)S%WL0C@(?J$8J(-RsuAxAaBhYg+Hk^_2_cY}*rS^Lh0fR(a{9eIFd{ zW$YHvN`m~j4k;(Wc(abcM#h!Hs0iK0iWxu)GF0D&$-L| zl^iuy=BdYxSb~vk44IMoI?d(m2+-Z29x(uH)%7}Sppa#<#_TS7*&spt8%!kFh(|32 z@Rku=WJrrK;`f%Hsm5v0>0P_GPgEncKn)qM+`-|gKY_A%`FIQg<7sMYQDD?=rV6SP zZ!(X8hj?W+6Xc=)ia;yYB15*7$yZ4;!pBWMp$QY-zB3`b!e&W6IFZE4Ie?rvY?1q( z7a0Wb5Ry1jtmz$i-6MO(g(3Rg0Ym=bl}e&pWz|5$RTmx!@GMdNQlHx5=SOlJB;TUw zaNJE;lB20{c@*Aq&yV}#^o^^(GmA?Vk}X4ZOTQxTi^=dO=mefwHxxrWyw zZ8!9_t`-%zfW1J5&Njp-Cj>Hv_BBW$18#n?)ZNQ(GDKasou&MvOO16Y5BGa zfejn09tMpG#uVnon?D~ol?*sKayP03{c;T=1b`8r2Ylio&8-J|jWMYHV#0BZ!ru@T z8swV|j#3l38m?p!p9|#*&tU(z*t$*Px!cEzYy>hsl+A6)*yDqbyo$e1V)mgO|87m2$-`vfS&yXLSIGeye^eN}{yn!4%o{lt6^V&tyU z;vlO(7Dey*=r)!Vp8G7XLfySq;rZ(W6= z%CNf&2L2Au&VYPNjzmk~FaZ$NMq5m5>TCogm zaG>P%$J@(ASC+d&>LG6Y8>dk?z_A(I_c|`?bdscR??o^Cm1Z6ZbF6fcmUGUmIDzR{ z>(|(V+(v9d3jlAkt~l^uV5k7@GSacGLZllxPul_%Xmiz+@vw;BULeiw3l$x9V(xdY z&skHcDRTXHoUKiaU{L3p%b(vq-iquu1*WqlP~zzwg$t9gEWKw{oYFGM9DxC;0Q-8E zVKRc)8-T*n{~-BBEKsBdU>zd9HNBLj5rLKnCD;TNM{nV!{`hUsM37Xq#BwL319;Sc zCuJ>ozJnc8OUN=Q0OLz_v7Vt>^o)WEL*pQcKhN{+z#84@5{sN9%S()GSZ=6dH!sl? zF;lE@olC~z^jU8B*{*WR$u76@+}Nil-o9}QcPx$oofvvkEX|<53AG6w1(55Q{X1dj zjGe1YrbzsQ@_GRAYlmE4PxNY$ipg>pEbL+^G9o_QN(pSz`@4Lg=~q<7)FTlwzVS9`$q7g>y+yWBzx z-xl9sS2fgo@J02x_z$by_hlRDR6Mg>-I(nkHE%bia|9Nzr#67!`LzBTC`8=B5OEw2 zuUYT6MJvu(Q10SPX=zo5PIWIK4@w6<4{J?2wYv@aVl;mt4Ez9$POalaJ)@-vZBC~C z_yyE@bdZJNifC1y6;quZ*+XosV&_wG0m8bg)0HXBY{99byR{4N?lxq|-DY1OR(VtI z0~%d4o7;r1piWZTYaM|?@`VC|dmY2THpFT`D!1pghrjCY2U6KtTZLO#x%3tVUnY2Kdsf%0F5i^dZ`?q z7L^y6C~GB+w0kzH5@+th>|gmTJ=dB!h^X6Imy~llFO$N^V`rTMmmo7mWjiAdORNF% zT9ccF45x9(+Kk9*OZv6hKPrx^OJf?cJbVwo?&<@uFw~ z2Q#MEoNb73A%=kV)`pk?o88MN>LtS~PS=YU&0I%K^5b)3PVaXY!wx((j}Do9nbc_R zdD{G!pDy2Id&nO$(UyoIYM^irBFR2z7ze>|8*rq`H{V*3+U~-TXiF5b!%_0`$~c%? zSRhm`SW~{42D9m5z*D3IpV+pYH72bP>_om6{N5f&@eC)SM^h8)eEE;@EUGvPn1aJyL%fsMndF z<-u=RXgc=o>ONQ#LG5+``qbt-Oy!DpA*v0p0<^PrSK?zx`Z(&%_{jWS6qHexvZ^X| zR>thYtu|vuXj|od*TEg7rpr^A)MdWY*nLCuvn$0@+x-~XV zi%p1ZdSkzvxung!*MJSzah(MmQ^3=vE{q)^v+kAoJ!-|gO@SDX?P87|aBGh)PyJf) z*by;+REzoWJPhO(4%NmeAPYl`Vj?fNec1ul4wG+(2b5N0S)ji)&EIASRKLe`?kCwN zxW8ka9o37oUrTZ*c3HpuQmAPPbR3mEKO~U1b$LgSxeg2SEyIvzJD;t+9?5SeC zVYf3Kw>6ihTF%GAbf(77n6+-21C7VqBL25{wn%T$g$}eE@V#aJm?$!SDn&rycxJI| zVa?-rPh2gQhGvm6$eOb|x^;iAC-Nf{#*45+)QsP6*lMgTEpK2pD6$a`zCSWyj~*;} zfPA@Z$+tdRoExwE>`6y_pa(qu?*$v*Q6RFJP`W*mFsNsCu9M10;5k?NpMTL=*C|Vr zthC-kbRih{>AzWn4Pgt_gS#8^`1rB@rM(M|@p6V=bdS&z>Mlz5CjmfuY0Nu3?Im?l zGj4WZ?89Fe2^s?2hfRrm#tkwEHh~MkA!vHAuvgRcD{k=*vyl z)K8Ikyd&FsVTWwGf%Np!^)@*x?&`BwPQx=a zZ<^Q$-$&|84l?qQL`f85li2gd!!mRi#;G3~MbG{;vojD*nb`sMKs->5#Vg+X=Q^G6nZ4BWl-Q#TkY9G_*PbW9eP=+u1 zRw9eMOCnDW=)a-ldFdPg3yhrsb~43G`BmyJk_MWOisXvkjG3^|0+D-tQ0B%*8qz3L z3kn>=n=D!wEo2ajYXpty<7(WBsA8I)kEx6A_{-w4-e<#?Zhg3ChrO<}bkt7K749ZQ z*C|C;=vJ^(B0D^e4`|6wk?BGxx_QxpHNI7ALqs6;kWdc;AI*B*<&W#UXs%-f7cphq z7j%J#7{JmmKUhqePJJK_#1SNlfZodG_ zNvt@*5(!1Ms$AsET#4@9&Y#N|zztKXavv=n{sAo9(({bk*$3_4rF>T43F}gw1kBZM zk}wkgtYs2km5!DEJPCN|JVkx3WziG>;Rx*TFDP$npEQhJkFj5VuRE&4NSj*#@cHLE zxvE)sfsRasS1<^BiR`MM9aWb#o<3HWDr>?Y$C7{yDw0uQ!{rtNIGR9s70U%-jaOQ3 z5@04SCd*|eULqi?pM)}@eo-_5(YA5I2bO*f4-Q|%Wpl635bW_#riV=Z!Zzwiy|QIL z^~n=zGRJrP5b*OUdqzK@TR*s(s9s?=R?XqZOE_ibV;Z@1;;Tg03z@a0Pw1je@8E&F z4)XUeM{-m_*uUUcI7xe#Gj;Pqm5QZ4!&D?a&h8)jZi(r_X-r>!EL0fH7QwLR@#h)}atWlVVq|0E`ZrI48^n9h8fX%tqoI&;`8XEz`wFFW-5AyQ8X7vMb5cT{Et1z zm2F!gxG?7e^Q1R#@mb89Wvlu7VD9|7*QCI(m=g0j7sD&NL3t+G`}51q5d^GOzy@g$ zX*SXCNkkqRxK5{R-5K3xSYmCuJn`|q>paUsTi5BB|0=GR7tokqrmK=`^Z@n9; zmH;KmmI=~5UJIk$l|Ip62a3eKW9g4MB4()hteR~Tq0jBq!x1M1fk5cBU_d=k&!lJ- zE_+n}ItFkekk~8?b_+`XjQYH?ljAzduL^rpht|8+t0PS*?jr`v1q%&#nhxt#8b*Fg zK-z2?$k4zBZVCcO^7QYfuxy_ru^hW7#~dfla!Sn+Gc$tydTKqQDI$Q$vP~fzS z$p`H)k??fr_gy6LIa1)P-Pw>7+Q9JU#$DSoYBrY%P-x4XI)8I8McQo6C?4!0~tUi z#SX*cadkV|4uOmjtpj%pL{Qps^5^E$-QX}B;NmI|XGEOA;!E%ML<_+0VS~VJOewn( zw9U1`ctswM_lGC?sr&svWWGmb!nwX{-tN3d;A1_wo(o677Ee5EJ~%8->?X001|b)L z#|V9sw-~wyxm1QBZM+-q0jj8WB}(;5w`ZP zIYt4|)LexYNUv3Ua_>1*UMV0~0ZNB7tRu=Q-jCOtjbv7m6Q6@(eVY6JA+V)DpcR>gtD7=5v?yM@^tQaz?#ol_!e?>+Ro=hYarcmnA&X6%01u}EYJA^T)uZu zEC~OF-ftK@zq}94HK- zV`dpremqQDm7Y^&IF7-LN7}-pYmJA>OeUF|FX#DJ>WOl{ z0JTW4sd&zT^rgFuo&nz+X45W-5cO5NM;PWjmeT0;@k+GLY=VGv+&Ea^fiQXkdEVbWF0SP?2-*<7zn=5xknA!% zp#c)bE7Ci56*(q&0nih>59@az-)^w=lVm?oyBGBHl2skF0x~fV5-N|^L`U6&ZoRK3 zXdeNkqYvEna?}a=@ZBvh!AD^I2I>Z6tsM}Ri~Qb~=Z(C%zBJOuO8sNwP2iT)|D#EK zZ9S#d-B+Q|JkVaj_0NKNl{`VW$L`zxc<1SP3L$9SZhT$vebdhGEA*M2T{Y4&5<>M> r`2B)#01(TM>g9h9o20;cv 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 R`}I&J^} literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-huly-60x60@2x.png b/website/assets/images/app-icon-huly-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0a75c2c865bc884722dc6b771002cb943e79158a GIT binary patch literal 19643 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 N002ovPDHLkV1h|Hidp~w literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-hyperkey-60x60@2x.png b/website/assets/images/app-icon-hyperkey-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a40878f758d2430f646baedc7f1fcf3b7c28bd8a GIT binary patch literal 15646 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 (<7&lUF`~q3VtCh%Yac6^pK91%KAJrSZ59xPa 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 Date: Wed, 10 Jun 2026 23:33:41 -0500 Subject: [PATCH 2/2] Update index.ts --- .../SoftwarePage/components/icons/index.ts | 81 +++++++++---------- 1 file changed, 40 insertions(+), 41 deletions(-) diff --git a/frontend/pages/SoftwarePage/components/icons/index.ts b/frontend/pages/SoftwarePage/components/icons/index.ts index 579759ba4ce..22e9dce937c 100644 --- a/frontend/pages/SoftwarePage/components/icons/index.ts +++ b/frontend/pages/SoftwarePage/components/icons/index.ts @@ -46,6 +46,26 @@ import Git from "./Git"; import GoogleCredentialProviderForWindows from "./GoogleCredentialProviderForWindows"; import GoToMeeting from "./GoToMeeting"; import GrooveOmniDialer from "./GrooveOmniDialer"; +import Hammerspoon from "./Hammerspoon"; +import HandbrakeApp from "./HandbrakeApp"; +import Hazel from "./Hazel"; +import Hazeover from "./Hazeover"; +import Helium from "./Helium"; +import HexFiend from "./HexFiend"; +import HeyDesktop from "./HeyDesktop"; +import Hiddenbar from "./Hiddenbar"; +import Hides from "./Hides"; +import Hidock from "./Hidock"; +import HighlightAi from "./HighlightAi"; +import HiveApp from "./HiveApp"; +import HomeAssistant from "./HomeAssistant"; +import Homerow from "./Homerow"; +import Hot from "./Hot"; +import Houdahspot from "./Houdahspot"; +import HpEasyAdmin from "./HpEasyAdmin"; +import Hubstaff from "./Hubstaff"; +import Huly from "./Huly"; +import Hyperkey from "./Hyperkey"; import IbmNotifier from "./IbmNotifier"; import IconComposer from "./IconComposer"; import Iina from "./Iina"; @@ -328,27 +348,6 @@ import ZeroOneZeroEditor from "./010Editor"; import Zoom from "./Zoom"; import ZoomRooms from "./ZoomRooms"; import Zotero from "./Zotero"; - -import Hammerspoon from "./Hammerspoon"; -import HandbrakeApp from "./HandbrakeApp"; -import Hazel from "./Hazel"; -import Hazeover from "./Hazeover"; -import Helium from "./Helium"; -import HexFiend from "./HexFiend"; -import HeyDesktop from "./HeyDesktop"; -import Hiddenbar from "./Hiddenbar"; -import Hides from "./Hides"; -import Hidock from "./Hidock"; -import HighlightAi from "./HighlightAi"; -import HiveApp from "./HiveApp"; -import HomeAssistant from "./HomeAssistant"; -import Homerow from "./Homerow"; -import Hot from "./Hot"; -import Houdahspot from "./Houdahspot"; -import HpEasyAdmin from "./HpEasyAdmin"; -import Hubstaff from "./Hubstaff"; -import Huly from "./Huly"; -import Hyperkey from "./Hyperkey"; // SOFTWARE_NAME_TO_ICON_MAP list "special" applications that have a defined // icon for them, keys refer to application names, and are intended to be fuzzy // matched in the application logic. @@ -449,6 +448,26 @@ export const SOFTWARE_NAME_TO_ICON_MAP = { "google credential provider for windows": GoogleCredentialProviderForWindows, gotomeeting: GoToMeeting, "groove omnidialer": GrooveOmniDialer, + hammerspoon: Hammerspoon, + handbrake: HandbrakeApp, + hazel: Hazel, + hazeover: Hazeover, + helium: Helium, + "hex fiend": HexFiend, + hey: HeyDesktop, + "hidden bar": Hiddenbar, + hides: Hides, + hidock: Hidock, + highlight: HighlightAi, + hive: HiveApp, + "home assistant": HomeAssistant, + homerow: Homerow, + hot: Hot, + houdahspot: Houdahspot, + "hp easy admin": HpEasyAdmin, + hubstaff: Hubstaff, + huly: Huly, + hyperkey: Hyperkey, "ibm notifier": IbmNotifier, "icon composer": IconComposer, iina: Iina, @@ -689,26 +708,6 @@ export const SOFTWARE_NAME_TO_ICON_MAP = { zeplin: Zeplin, "zoom rooms": ZoomRooms, zotero: Zotero, - hammerspoon: Hammerspoon, - handbrake: HandbrakeApp, - hazel: Hazel, - hazeover: Hazeover, - helium: Helium, - "hex fiend": HexFiend, - hey: HeyDesktop, - "hidden bar": Hiddenbar, - hides: Hides, - hidock: Hidock, - highlight: HighlightAi, - hive: HiveApp, - "home assistant": HomeAssistant, - homerow: Homerow, - hot: Hot, - houdahspot: Houdahspot, - "hp easy admin": HpEasyAdmin, - hubstaff: Hubstaff, - huly: Huly, - hyperkey: Hyperkey, } as const; // Maps all known Linux platforms to the LinuxOS icon