diff --git a/app/Jobs/InstallEgg.php b/app/Jobs/InstallEgg.php
new file mode 100644
index 000000000..1ae869403
--- /dev/null
+++ b/app/Jobs/InstallEgg.php
@@ -0,0 +1,33 @@
+fromUrl($this->downloadUrl);
+ } catch (Throwable $e) {
+ Log::error('Failed to install egg from URL: ' . $this->downloadUrl, ['exception' => $e]);
+ }
+ }
+}
diff --git a/app/Livewire/Installer/PanelInstaller.php b/app/Livewire/Installer/PanelInstaller.php
index 9b2dc780c..5a3a7bfff 100644
--- a/app/Livewire/Installer/PanelInstaller.php
+++ b/app/Livewire/Installer/PanelInstaller.php
@@ -2,13 +2,16 @@
namespace App\Livewire\Installer;
+use App\Jobs\InstallEgg;
use App\Livewire\Installer\Steps\CacheStep;
use App\Livewire\Installer\Steps\DatabaseStep;
+use App\Livewire\Installer\Steps\EggSelectionStep;
use App\Livewire\Installer\Steps\EnvironmentStep;
use App\Livewire\Installer\Steps\QueueStep;
use App\Livewire\Installer\Steps\RequirementsStep;
use App\Livewire\Installer\Steps\SessionStep;
use App\Models\User;
+use App\Services\Eggs\Sharing\EggImporterService;
use App\Services\Helpers\LanguageService;
use App\Services\Users\UserCreationService;
use App\Traits\CheckMigrationsTrait;
@@ -53,7 +56,7 @@ class PanelInstaller extends SimplePage implements HasForms
public function getMaxContentWidth(): Width|string
{
- return Width::SevenExtraLarge;
+ return Width::ScreenTwoExtraLarge;
}
public static function isInstalled(): bool
@@ -82,6 +85,7 @@ class PanelInstaller extends SimplePage implements HasForms
RequirementsStep::make(),
EnvironmentStep::make($this),
DatabaseStep::make($this),
+ EggSelectionStep::make(),
CacheStep::make($this),
QueueStep::make($this),
SessionStep::make(),
@@ -99,7 +103,7 @@ class PanelInstaller extends SimplePage implements HasForms
wire:loading.attr="disabled"
>
{{ trans('installer.finish') }}
-
+
BLADE))),
];
@@ -125,7 +129,7 @@ class PanelInstaller extends SimplePage implements HasForms
return 'data';
}
- public function submit(UserCreationService $userCreationService): void
+ public function submit(UserCreationService $userCreationService, EggImporterService $eggImporterService): void
{
try {
// Disable installer
@@ -141,6 +145,9 @@ class PanelInstaller extends SimplePage implements HasForms
// Write session data at the very end to avoid "page expired" errors
$this->writeToEnv('env_session');
+ // Install selected eggs
+ $this->installEggs($eggImporterService);
+
// Redirect to admin panel
$this->redirect(Filament::getPanel('admin')->getUrl());
} catch (Halt) {
@@ -218,4 +225,35 @@ class PanelInstaller extends SimplePage implements HasForms
throw new Halt(trans('installer.exceptions.create_user'));
}
}
+
+ public function installEggs(EggImporterService $eggImporterService): void
+ {
+ try {
+ $selectedEggs = array_get($this->data, 'eggs', []);
+
+ foreach ($selectedEggs as $category => $eggs) {
+ foreach ($eggs as $downloadUrl) {
+ InstallEgg::dispatch($downloadUrl);
+ }
+ }
+
+ Notification::make()
+ ->title(trans('installer.egg.background_install_started'))
+ ->body(trans('installer.egg.background_install_description', ['count' => array_sum(array_map('count', $selectedEggs))]))
+ ->success()
+ ->persistent()
+ ->send();
+
+ return;
+ } catch (Exception $exception) {
+ report($exception);
+
+ Notification::make()
+ ->title(trans('installer.egg.exceptions.installation_failed'))
+ ->body($exception->getMessage())
+ ->danger()
+ ->persistent()
+ ->send();
+ }
+ }
}
diff --git a/app/Livewire/Installer/Steps/EggSelectionStep.php b/app/Livewire/Installer/Steps/EggSelectionStep.php
new file mode 100644
index 000000000..708591cf5
--- /dev/null
+++ b/app/Livewire/Installer/Steps/EggSelectionStep.php
@@ -0,0 +1,70 @@
+title(trans('installer.egg.exceptions.failed_to_update'))
+ ->icon('tabler-egg')
+ ->body($exception->getMessage())
+ ->danger()
+ ->persistent()
+ ->send();
+ }
+
+ $eggs = cache()->get('eggs.index', []);
+
+ $categories = array_keys($eggs);
+
+ $tabs = array_map(function (string $label) use ($eggs) {
+ $id = str_slug($label, '_');
+ $eggCount = count($eggs[$label]);
+
+ return Tab::make($id)
+ ->label($label)
+ ->badge($eggCount)
+ ->schema([
+ CheckboxList::make("eggs.$id")
+ ->hiddenLabel()
+ ->options(fn () => array_sort($eggs[$label]))
+ ->searchable($eggCount > 0)
+ ->bulkToggleable($eggCount > 0)
+ ->columns(4),
+ ]);
+ }, $categories);
+
+ if (empty($tabs)) {
+ $tabs[] = Tab::make('no_eggs')
+ ->label(trans('installer.egg.no_eggs'))
+ ->schema([
+ TextEntry::make('no_eggs')
+ ->hiddenLabel()
+ ->state(trans('installer.egg.exceptions.no_eggs')),
+ ]);
+ }
+
+ return Step::make('egg')
+ ->label(trans('installer.egg.title'))
+ ->columnSpanFull()
+ ->schema([
+ Tabs::make('egg_tabs')
+ ->tabs($tabs),
+ ]);
+ }
+}
diff --git a/database/Seeders/DatabaseSeeder.php b/database/Seeders/DatabaseSeeder.php
index f1d885862..0ccfad910 100644
--- a/database/Seeders/DatabaseSeeder.php
+++ b/database/Seeders/DatabaseSeeder.php
@@ -13,8 +13,6 @@ class DatabaseSeeder extends Seeder
*/
public function run(): void
{
- $this->call(EggSeeder::class);
-
Role::firstOrCreate(['name' => Role::ROOT_ADMIN]);
$plugins = Plugin::query()->orderBy('load_order')->get();
diff --git a/database/Seeders/EggSeeder.php b/database/Seeders/EggSeeder.php
deleted file mode 100644
index 5e8beb868..000000000
--- a/database/Seeders/EggSeeder.php
+++ /dev/null
@@ -1,101 +0,0 @@
-importerService = $importerService;
- }
-
- /**
- * Run the egg seeder.
- */
- public function run(): void
- {
- foreach (static::$imports as $import) {
- $this->parseEggFiles($import);
- }
- }
-
- /**
- * Loop through the list of egg files and import them.
- */
- protected function parseEggFiles($name): void
- {
- $path = database_path('Seeders/eggs/' . kebab_case($name));
- $files = new DirectoryIterator($path);
-
- $this->command->alert('Updating Eggs for: ' . $name);
-
- /** @var DirectoryIterator $file */
- foreach ($files as $file) {
- if (!$file->isFile() || !$file->isReadable()) {
- continue;
- }
-
- $extension = strtolower($file->getExtension());
- $filePath = $file->getRealPath();
-
- try {
- $decoded = match ($extension) {
- 'json' => json_decode(file_get_contents($filePath), true, 512, JSON_THROW_ON_ERROR),
- 'yaml', 'yml' => Yaml::parseFile($filePath),
- default => null,
- };
- } catch (Throwable) {
- $this->command->warn("Failed to parse {$file->getFilename()}, skipping.");
-
- continue;
- }
-
- if (!is_array($decoded) || !isset($decoded['name'], $decoded['author'])) {
- $this->command->warn("Invalid structure in {$file->getFilename()}, skipping.");
-
- continue;
- }
-
- $uploaded = new UploadedFile($filePath, $file->getFilename());
-
- $egg = Egg::query()
- ->where('author', $decoded['author'])
- ->where('name', $decoded['name'])
- ->first();
-
- if ($egg instanceof Egg) {
- $this->importerService->fromFile($uploaded, $egg);
- $this->command->info('Updated ' . $decoded['name']);
- } else {
- $this->importerService->fromFile($uploaded);
- $this->command->comment('Created ' . $decoded['name']);
- }
- }
-
- $this->command->line('');
- }
-}
diff --git a/database/Seeders/eggs/minecraft/egg-forge-minecraft.yaml b/database/Seeders/eggs/minecraft/egg-forge-minecraft.yaml
deleted file mode 100644
index 58934f26d..000000000
--- a/database/Seeders/eggs/minecraft/egg-forge-minecraft.yaml
+++ /dev/null
@@ -1,219 +0,0 @@
-_comment: 'DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL'
-meta:
- version: PLCN_v3
- update_url: 'https://github.com/pelican-dev/panel/raw/main/database/Seeders/eggs/minecraft/egg-forge-minecraft.yaml'
-exported_at: '2025-12-09T21:55:23+00:00'
-name: 'Forge Minecraft'
-author: panel@example.com
-uuid: ed072427-f209-4603-875c-f540c6dd5a65
-description: |-
- Minecraft Forge Server. Minecraft Forge is a modding API (Application Programming Interface), which
- makes it easier to create mods, and also make sure mods are compatible with each other.
-image: 'data:image/jpeg;base64,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'
-tags:
- - minecraft
-features:
- - eula
- - java_version
- - pid_limit
-docker_images:
- 'Java 21': 'ghcr.io/pelican-eggs/yolks:java_21'
- 'Java 17': 'ghcr.io/pelican-eggs/yolks:java_17'
- 'Java 16': 'ghcr.io/pelican-eggs/yolks:java_16'
- 'Java 11': 'ghcr.io/pelican-eggs/yolks:java_11'
- 'Java 8': 'ghcr.io/pelican-eggs/yolks:java_8'
-file_denylist: { }
-startup_commands:
- Default: 'java -Xms128M -XX:MaxRAMPercentage=95.0 -Dterminal.jline=false -Dterminal.ansi=true $( [[ ! -f unix_args.txt ]] && printf %s "-jar {{SERVER_JARFILE}}" || printf %s "@unix_args.txt" )'
-config:
- files:
- server.properties:
- parser: properties
- find:
- server-ip: ''
- server-port: '{{server.allocations.default.port}}'
- query.port: '{{server.allocations.default.port}}'
- startup:
- done: ')! For help, type '
- logs: { }
- stop: stop
-scripts:
- installation:
- script: |-
- #!/bin/bash
- # Forge Installation Script
- #
- # Server Files: /mnt/server
- apt update
- apt install -y curl jq
-
- if [[ ! -d /mnt/server ]]; then
- mkdir /mnt/server
- fi
-
- cd /mnt/server
-
- # Remove spaces from the version number to avoid issues with curl
- FORGE_VERSION="$(echo "$FORGE_VERSION" | tr -d ' ')"
- MC_VERSION="$(echo "$MC_VERSION" | tr -d ' ')"
-
- if [[ ! -z ${FORGE_VERSION} ]]; then
- DOWNLOAD_LINK=https://maven.minecraftforge.net/net/minecraftforge/forge/${FORGE_VERSION}/forge-${FORGE_VERSION}
- FORGE_JAR=forge-${FORGE_VERSION}*.jar
- else
- JSON_DATA=$(curl -sSL https://files.minecraftforge.net/maven/net/minecraftforge/forge/promotions_slim.json)
-
- if [[ "${MC_VERSION}" == "latest" ]] || [[ "${MC_VERSION}" == "" ]]; then
- echo -e "getting latest version of forge."
- MC_VERSION=$(echo -e ${JSON_DATA} | jq -r '.promos | del(."latest-1.7.10") | del(."1.7.10-latest-1.7.10") | to_entries[] | .key | select(contains("latest")) | split("-")[0]' | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n | tail -1)
- BUILD_TYPE=latest
- fi
-
- if [[ "${BUILD_TYPE}" != "recommended" ]] && [[ "${BUILD_TYPE}" != "latest" ]]; then
- BUILD_TYPE=recommended
- fi
-
- echo -e "minecraft version: ${MC_VERSION}"
- echo -e "build type: ${BUILD_TYPE}"
-
- ## some variables for getting versions and things
- FILE_SITE=https://maven.minecraftforge.net/net/minecraftforge/forge/
- VERSION_KEY=$(echo -e ${JSON_DATA} | jq -r --arg MC_VERSION "${MC_VERSION}" --arg BUILD_TYPE "${BUILD_TYPE}" '.promos | del(."latest-1.7.10") | del(."1.7.10-latest-1.7.10") | to_entries[] | .key | select(contains($MC_VERSION)) | select(contains($BUILD_TYPE))')
-
- ## locating the forge version
- if [[ "${VERSION_KEY}" == "" ]] && [[ "${BUILD_TYPE}" == "recommended" ]]; then
- echo -e "dropping back to latest from recommended due to there not being a recommended version of forge for the mc version requested."
- VERSION_KEY=$(echo -e ${JSON_DATA} | jq -r --arg MC_VERSION "${MC_VERSION}" '.promos | del(."latest-1.7.10") | del(."1.7.10-latest-1.7.10") | to_entries[] | .key | select(contains($MC_VERSION)) | select(contains("latest"))')
- fi
-
- ## Error if the mc version set wasn't valid.
- if [ "${VERSION_KEY}" == "" ] || [ "${VERSION_KEY}" == "null" ]; then
- echo -e "The install failed because there is no valid version of forge for the version of minecraft selected."
- exit 1
- fi
-
- FORGE_VERSION=$(echo -e ${JSON_DATA} | jq -r --arg VERSION_KEY "$VERSION_KEY" '.promos | .[$VERSION_KEY]')
-
- if [[ "${MC_VERSION}" == "1.7.10" ]] || [[ "${MC_VERSION}" == "1.8.9" ]]; then
- DOWNLOAD_LINK=${FILE_SITE}${MC_VERSION}-${FORGE_VERSION}-${MC_VERSION}/forge-${MC_VERSION}-${FORGE_VERSION}-${MC_VERSION}
- FORGE_JAR=forge-${MC_VERSION}-${FORGE_VERSION}-${MC_VERSION}.jar
- if [[ "${MC_VERSION}" == "1.7.10" ]]; then
- FORGE_JAR=forge-${MC_VERSION}-${FORGE_VERSION}-${MC_VERSION}-universal.jar
- fi
- else
- DOWNLOAD_LINK=${FILE_SITE}${MC_VERSION}-${FORGE_VERSION}/forge-${MC_VERSION}-${FORGE_VERSION}
- FORGE_JAR=forge-${MC_VERSION}-${FORGE_VERSION}.jar
- fi
- fi
-
- #Adding .jar when not eding by SERVER_JARFILE
- if [[ ! $SERVER_JARFILE = *\.jar ]]; then
- SERVER_JARFILE="$SERVER_JARFILE.jar"
- fi
-
- #Downloading jars
- echo -e "Downloading forge version ${FORGE_VERSION}"
- echo -e "Download link is ${DOWNLOAD_LINK}"
-
- if [[ ! -z "${DOWNLOAD_LINK}" ]]; then
- if curl --output /dev/null --silent --head --fail ${DOWNLOAD_LINK}-installer.jar; then
- echo -e "installer jar download link is valid."
- else
- echo -e "link is invalid. Exiting now"
- exit 2
- fi
- else
- echo -e "no download link provided. Exiting now"
- exit 3
- fi
-
- curl -s -o installer.jar -sS ${DOWNLOAD_LINK}-installer.jar
-
- #Checking if downloaded jars exist
- if [[ ! -f ./installer.jar ]]; then
- echo "!!! Error downloading forge version ${FORGE_VERSION} !!!"
- exit
- fi
-
- function unix_args {
- echo -e "Detected Forge 1.17 or newer version. Setting up forge unix args."
- ln -sf libraries/net/minecraftforge/forge/*/unix_args.txt unix_args.txt
- }
-
- # Delete args to support downgrading/upgrading
- rm -rf libraries/net/minecraftforge/forge
- rm unix_args.txt
-
- #Installing server
- echo -e "Installing forge server.
- "
- java -jar installer.jar --installServer || { echo -e "
- Install failed using Forge version ${FORGE_VERSION} and Minecraft version ${MINECRAFT_VERSION}.
- Should you be using unlimited memory value of 0, make sure to increase the default install resource limits in the Daemon config or specify exact allocated memory in the server Build Configuration instead of 0!
- Otherwise, the Forge installer will not have enough memory."; exit 4; }
-
- # Check if we need a symlink for 1.17+ Forge JPMS args
- if [[ $MC_VERSION =~ ^1\.(17|18|19|20|21|22|23) || $FORGE_VERSION =~ ^1\.(17|18|19|20|21|22|23) ]]; then
- unix_args
-
- # Check if someone has set MC to latest but overwrote it with older Forge version, otherwise we would have false positives
- elif [[ $MC_VERSION == "latest" && $FORGE_VERSION =~ ^1\.(17|18|19|20|21|22|23) ]]; then
- unix_args
- else
- # For versions below 1.17 that ship with jar
- mv $FORGE_JAR $SERVER_JARFILE
- fi
-
- echo -e "Deleting installer.jar file.
- "
- rm -rf installer.jar
- echo -e "Installation process is completed"
- container: 'ghcr.io/pelican-eggs/installers:java_8'
- entrypoint: bash
-variables:
- -
- name: 'Build Type'
- description: "The type of server jar to download from forge.\r\n\r\nValid types are \"recommended\" and \"latest\"."
- env_variable: BUILD_TYPE
- default_value: recommended
- user_viewable: true
- user_editable: true
- rules:
- - required
- - string
- - 'in:recommended,latest'
- sort: 3
- -
- name: 'Forge Version'
- description: "The full exact version.\r\n\r\nEx. 1.15.2-31.2.4\r\n\r\nOverrides MC_VERSION and BUILD_TYPE. If it fails to download the server files it will fail to\ninstall."
- env_variable: FORGE_VERSION
- default_value: ''
- user_viewable: true
- user_editable: true
- rules:
- - nullable
- - 'regex:/^[0-9\.\-]+$/'
- sort: 4
- -
- name: 'Minecraft Version'
- description: "The version of minecraft you want to install for.\r\n\r\nLeaving latest will install the latest recommended version."
- env_variable: MC_VERSION
- default_value: latest
- user_viewable: true
- user_editable: true
- rules:
- - required
- - string
- - 'max:9'
- sort: 2
- -
- name: 'Server Jar File'
- description: 'The name of the Jarfile to use when running Forge version below 1.17.'
- env_variable: SERVER_JARFILE
- default_value: server.jar
- user_viewable: true
- user_editable: true
- rules:
- - required
- - 'regex:/^([\w\d._-]+)(\.jar)$/'
- sort: 1
diff --git a/database/Seeders/eggs/minecraft/egg-paper.yaml b/database/Seeders/eggs/minecraft/egg-paper.yaml
deleted file mode 100644
index 30a3a63ac..000000000
--- a/database/Seeders/eggs/minecraft/egg-paper.yaml
+++ /dev/null
@@ -1,142 +0,0 @@
-_comment: 'DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL'
-meta:
- version: PLCN_v3
- update_url: 'https://github.com/pelican-dev/panel/raw/main/database/Seeders/eggs/minecraft/egg-paper.yaml'
-exported_at: '2025-12-11T12:51:20+00:00'
-name: Paper
-author: parker@example.com
-uuid: 5da37ef6-58da-4169-90a6-e683e1721247
-description: 'High performance Spigot fork that aims to fix gameplay and mechanics inconsistencies.'
-image: 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA5OTUuMyA5OTUuMzEiPjxkZWZzPjxjbGlwUGF0aCBpZD0iYSI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTS0uMDA1IDQ5OC43MjggNDk2LjYwNy4wMzJsNDk4LjY5NSA0OTYuNjEyLTQ5Ni42MSA0OTguNjk2eiIvPjwvY2xpcFBhdGg+PGNsaXBQYXRoIGlkPSJiIj48cGF0aCBmaWxsPSJub25lIiBkPSJNNy43MDIgNDEwLjQ0NiA1ODQuODQ2IDcuNjc0IDk4Ny42MTggNTg0LjgyIDQxMC40NzMgOTg3LjU5eiIvPjwvY2xpcFBhdGg+PGNsaXBQYXRoIGlkPSJjIj48cGF0aCBmaWxsPSJub25lIiBkPSJtMjguMzUzIDMzMi4wNDcgNjM0Ljg2LTMwMy43NjUgMzAzLjc2NSA2MzQuODYtNjM0Ljg2IDMwMy43NjV6Ii8+PC9jbGlwUGF0aD48Y2xpcFBhdGggaWQ9ImQiPjxwYXRoIGZpbGw9Im5vbmUiIGQ9Im03MS41NTkgMjQwLjU0IDY4My4yMS0xNjguOTUyIDE2OC45NSA2ODMuMjFMMjQwLjUxIDkyMy43NXoiLz48L2NsaXBQYXRoPjwvZGVmcz48cGF0aCBmaWxsPSIjZjdlMzQ2IiBkPSJNLjAwNSA0OTguNzI4IDQ5Ni42MTcuMDMybDQ5OC42OTUgNDk2LjYxMi00OTYuNjEgNDk4LjY5NnoiLz48ZyBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGZpbGw9IiNhNDk3MzEiIGQ9Ik0zLjUyNSA0MzguNDIgNTU2LjgzMSAzLjQ4bDQzNC45NCA1NTMuMzA3LTU1My4zMDYgNDM0Ljk0eiIvPjwvZz48cGF0aCBmaWxsPSIjNDI4ZWRiIiBkPSJNNy42OTggNDEwLjQ1NCA1ODQuODQyIDcuNjgzbDQwMi43NzEgNTc3LjE0NEw0MTAuNDcgOTg3LjU5OHoiLz48ZyBjbGlwLXBhdGg9InVybCgjYikiPjxwYXRoIGZpbGw9IiMyYjVmOTIiIGQ9Ik0xOC45OTkgMzYxLjQ2NCA2MzMuODMyIDE4Ljk3bDM0Mi40OTIgNjE0LjgzMy02MTQuODMyIDM0Mi40OTJ6Ii8+PC9nPjxwYXRoIGZpbGw9IiM5NmM5M2QiIGQ9Im0yOC4zNjYgMzMyLjA1MiA2MzQuODYtMzAzLjc2NSAzMDMuNzY1IDYzNC44Ni02MzQuODYgMzAzLjc2NXoiLz48ZyBjbGlwLXBhdGg9InVybCgjYykiPjxwYXRoIGZpbGw9IiM2Yzk4M2YiIGQ9Ik01OC43NTcgMjYzLjA2OCA3MzIuMjYgNTguODI3IDkzNi41IDczMi4zMyAyNjIuOTk5IDkzNi41N3oiLz48L2c+PHBhdGggZmlsbD0iI2ZkNGY1NyIgZD0ibTcxLjU2NiAyNDAuNTM3IDY4My4yMS0xNjguOTUgMTY4Ljk1MSA2ODMuMjEtNjgzLjIxIDE2OC45NXoiLz48ZyBjbGlwLXBhdGg9InVybCgjZCkiPjxwYXRoIGZpbGw9IiNiMDM2M2MiIGQ9Im0xMjkuNzgxIDE2Mi40OTIgNzAzLjAyNi0zMi43ODUgMzIuNzg1IDcwMy4wMjYtNzAzLjAyNiAzMi43ODV6Ii8+PC9nPjxwYXRoIGZpbGw9IiMzZDNkM2QiIGQ9Ik0xNDUuNzYgMTQ1Ljc2aDcwMy43OXY3MDMuNzlIMTQ1Ljc2eiIvPjxwYXRoIGZpbGw9IiM0NzQ3NDciIGQ9Ik0xNjQuNjEgMTY0LjZIODMwLjd2NjY2LjA5SDE2NC42MXoiLz48ZyBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGZpbGw9IiMzMzMiIGQ9Ik01NTQuNDUgNDYyLjMyYy01NC4zOSA0Mi4xMy02OS4yMyA1Ny4yMi0xNjQuMzUgMTI3LjZsLTkuNjItNC44NGM1MS42LTQxLjcgMTI3LjU4LTEwMi42MiAxNzkuMTQtMTQ0LjI2IDE5LjI1LTE1LjI4IDM4LjY5LTM5LjExIDU3LjctNTQuOTF6bS0yMS43OCAxODguNzZjMy40NiAxLjcyIDYuMjUgMi42IDkuNjIgNC4zLTI2LjAzIDIzLjEyLTUzLjc2IDQ5LjI1LTc4Ljk2IDczLjYxLTQuODkgMi4zLTkuMzMgMS43OS0xMy4zMi0xLjU0bDE4LjQ1LTE5LjQ3YTQzMzAgNDMzMCAwIDAgMCA1Ny4zOS01NC44MmMzLjItMi40IDMuMTItMy43MiA2LjgzLTIuMDhabTExMy42NSA0Mi41NWMzLjcyLTIuMzEgNS42Ni00LjEyIDcuMDctNy42NSAxOS44Ny0xMjYuNjIgNDAuOTktMjUyLjk2IDYzLjM1LTM3OS4wNiA1LjA5LTI1LjMyIDYuMDgtMjEuNzYgNi4zNC0zMy43OSAxMS40MyAxLjc3IDE2LjE4IDguNDYgMTQuMjUgMjAuMDYtNS4zIDMyLjUzLTExLjI5IDY0LjkxLTE3Ljk1IDk3LjE0LTE1LjQxIDk0Ljc1LTMwLjk5IDE4OS40Ni00Ny4yNiAyODQuMDYtMS4zNyAxMC40NC0yLjE1IDE3LjIxLTQuNDcgMjEuMDktMy42OCA0LjUyLTguNDMgNi4xLTE0LjI1IDQuNzUtNC44My0xLjMzLTMuNzgtMS4xLTkuNjgtMy4zNGwtMy4yMS0xLjMzczMuOTktLjk1IDUuODItMS45M1oiLz48cGF0aCBmaWxsPSIjOTk5IiBkPSJNNTMyLjY3IDY1MS4wOWMtMS4yMy0uMTQtMi40OC0uMzUtMy41OS40NWEyMDA5IDIwMDkgMCAwIDAtNjIuOSA2MC42NWMtLjEzLS45NS4wMi0xLjg0LjQ1LTIuNyAzLjI5LTQuNzkgNS44OS04LjU3IDkuMTgtMTMuMzYuNjUtMS42My41NC0zLjA3LjQ0LTQuMDktMi4zOC0yNS41NS0xMC4wNS00OS40Ni0yMS43NS03Mi40MS0uMjUtLjQ4LjI1LTEuMjEgMS4zNS0uOSAyNS44NyAxMC4zNiA1MS40OCAyMS4xNSA3Ni44MiAzMi4zNVoiLz48cGF0aCBmaWxsPSIjY2NjIiBkPSJNNTU5LjYzIDQ0MC44M2E4NTM3IDg1MzcgMCAwIDEtMTgxLjk1IDE0Ni40NmMtMzYuNS0xNC44NC03Mi45Ni0yOS44LTEwOS4zNy00NC44Ny0xNC4wOC01LjgzLTE0LjAzLTE4LjU0LTEuNi0yNy4wMS02Ljc0IDguNTQtNS41NCAxNS44OCAzLjU5IDIyLjAxIDEyLjQ5IDUuMyAxMDYuNDEgNDQuMjUgMTA2LjQxIDQ0LjI1cy0uNzYtMy4wMyAxODIuOTEtMTQwLjg0WiIvPjxwYXRoIGZpbGw9IiNiMmIyYjIiIGQ9Ik02MzYuOSA2ODcuOTNjMTMuOTQgNC45OCAxMy40MyAxLjUgMTkuMzktNC4wOC0uNTEgMy45Ni0uOTUgOC4zLTUuOTkgMTEuMTItMy40NiAyLTYuNTkgMS45My05LjgxLjZhMTgyMCAxODIwIDAgMCAxLTEwNy44Mi00NC40OGMtMjUuMzQtMTEuMi01MC45NS0yMS45OC03Ni44Mi0zMi4zNWwtMS4zNS45YzEyLjY0IDIzLjYyIDE5Ljk4IDQ4Ljc3IDIyLjAxIDc1LjQ4LTMuMjkgNC43OS02LjU5IDkuNTgtOS44OCAxNC4zOHEtLjY0NSAxLjI3NS0uNDUgMi43bC0xNi4xNyAxNS4yN2MtNC4wNi0uMDEtNi4zMS0yLjExLTYuNzQtNi4yOS0uNTktMzMuNzMtLjYtNjcuNDYtLjAyLTEwMS4xOSAwLS40MS4wMS0uODEuMDItMS4yNC4xNS01LjA3IDUuMjYtNi41MiAxMC4zMy00Ljk0cTkxLjg0NSAzNi42NzUgMTgzLjMgNzQuMTNaIi8+PHBhdGggZmlsbD0iI2NjYyIgZD0iTTcxOS42NCAyNjcuOTNjNSAzLjk4IDQuMjMgMTAuNTcgMy4yOCAxNi4xNy0yMi42MyAxMzIuODItNDQuNTYgMjY2LjMyLTY2LjUzIDM5OS4yLS4yMSAxLjI0LS43NiA0LjE1LTIuNDIgNS42NS0zLjc3IDMtNy4xNyAyLjQ4LTE3LjA2LTEuMDEgMS40My0zLjM3IDIuNDgtNi45NiAzLjE0LTEwLjc4IDI1LjM0LTEyOS40MSA1MS4yNS0yNTguNjUgNzcuNzItMzg3LjcxIDIuMzMtMTMuNjUgMi4xMy05LjcxIDEuODctMjEuNVoiLz48cGF0aCBmaWxsPSIjZjJmMmYyIiBkPSJNNzE5LjY0IDI2Ny45M2MuOTIgMTAuNiAxLjA1IDUuODktMS44NyAyMS41LTI2LjQ3IDEyOS4wNi01Mi4zOCAyNTguMy03Ny43MiAzODcuNzEtLjY2IDMuODItMS43MSA3LjQxLTMuMTQgMTAuNzhxLTkxLjQ1NS0zNy40NTUtMTgzLjMtNzQuMTNjLTUuMDgtMS41OC04LjUyLjA3LTEwLjMzIDQuOTQtLjYgMzQuMTQtLjYgNjguMjkgMCAxMDIuNDMuNDMgNC4xOCAyLjY4IDYuMjggNi43NCA2LjI5LTEuMTIgMS4xNS0zLjc4IDEuMDctMy43OCAxLjA3cy0xMS45Mi0uNjktMTMuMzYtMy41NGMtLjM3LS43MS0uMzgtMS40Ni0uMzktMi4wOC0uMTgtMzYuMy0uNjEtNzIuMzktMS4yOS0xMDguMjktLjAyLS44NyAwLTEuNzIuMzUtMy4yNHMxLjM2LTMuNDYgMi43NS01LjIyYTExNjExIDExNjExIDAgMCAwIDE1OS4wNC0xOTEuMzkgMTM0MyAxMzQzIDAgMCAxLTMzLjY5IDI2LjA2QzQwMi40NCA1NTguNzggMzc2Ljc0IDU4MS42NiAzNzYuNzQgNTgxLjY2cy03MS45LTI5LjYzLTEwNi40MS00NC4yNWMtOS4xMy02LjEzLTEwLjMzLTEzLjQ3LTMuNTktMjIuMDFhNTA2MjggNTA2MjggMCAwIDAgNDI5LjQ5LTI0Ni42NGM1LjI4LTMuMjYgMTAuOTctNC40NiAxNy4wNy0zLjU5IDEuMzEuMTMgNC4xMS41OCA2LjM2IDIuNzZaIi8+PC9nPjwvc3ZnPg=='
-tags:
- - minecraft
-features:
- - eula
- - java_version
- - pid_limit
-docker_images:
- 'Java 21': 'ghcr.io/pelican-eggs/yolks:java_21'
- 'Java 17': 'ghcr.io/pelican-eggs/yolks:java_17'
- 'Java 16': 'ghcr.io/pelican-eggs/yolks:java_16'
- 'Java 11': 'ghcr.io/pelican-eggs/yolks:java_11'
- 'Java 8': 'ghcr.io/pelican-eggs/yolks:java_8'
-file_denylist: { }
-startup_commands:
- Default: 'java -Xms128M -XX:MaxRAMPercentage=95.0 -Dterminal.jline=false -Dterminal.ansi=true -jar {{SERVER_JARFILE}}'
-config:
- files:
- server.properties:
- parser: properties
- find:
- server-ip: ''
- server-port: '{{server.allocations.default.port}}'
- query.port: '{{server.allocations.default.port}}'
- startup:
- done: ')! For help, type '
- logs: { }
- stop: stop
-scripts:
- installation:
- script: |-
- #!/bin/ash
- # Paper Installation Script
- #
- # Server Files: /mnt/server
- PROJECT=paper
-
- if [ -n "${DL_PATH}" ]; then
- echo -e "Using supplied download url: ${DL_PATH}"
- DOWNLOAD_URL=`eval echo $(echo ${DL_PATH} | sed -e 's/{{/${/g' -e 's/}}/}/g')`
- else
- VER_EXISTS=`curl -s https://fill.papermc.io/v3/projects/${PROJECT} | jq -r --arg VERSION $MINECRAFT_VERSION '.versions | any(.[]; index($VERSION))' | grep -m1 true`
- LATEST_VERSION=`curl -s https://fill.papermc.io/v3/projects/${PROJECT} | jq -r '.versions | to_entries | .[0].value[0]'`
-
- if [ "${VER_EXISTS}" == "true" ]; then
- echo -e "Version is valid. Using version ${MINECRAFT_VERSION}"
- else
- echo -e "Specified version not found. Defaulting to the latest ${PROJECT} version"
- MINECRAFT_VERSION=${LATEST_VERSION}
- fi
-
- BUILD_EXISTS=`curl -s https://fill.papermc.io/v3/projects/${PROJECT}/versions/${MINECRAFT_VERSION} | jq -r --arg BUILD ${BUILD_NUMBER} '.builds[] | tostring | contains($BUILD)' | grep -m1 true`
- LATEST_BUILD=`curl -s https://fill.papermc.io/v3/projects/${PROJECT}/versions/${MINECRAFT_VERSION} | jq -r '.builds' | jq -r '.[0]'`
-
- if [ "${BUILD_EXISTS}" == "true" ]; then
- echo -e "Build is valid for version ${MINECRAFT_VERSION}. Using build ${BUILD_NUMBER}"
- else
- echo -e "Using the latest ${PROJECT} build for version ${MINECRAFT_VERSION}"
- BUILD_NUMBER=${LATEST_BUILD}
- fi
-
- echo "Version being downloaded"
- echo -e "Project: ${PROJECT}"
- echo -e "MC Version: ${MINECRAFT_VERSION}"
- echo -e "Build: ${BUILD_NUMBER}"
- DOWNLOAD_URL=`curl -s https://fill.papermc.io/v3/projects/${PROJECT}/versions/${MINECRAFT_VERSION}/builds/${BUILD_NUMBER} | jq -r '.downloads."server:default".url'`
- fi
-
- cd /mnt/server
-
- echo -e "Running curl -o ${SERVER_JARFILE} ${DOWNLOAD_URL}"
-
- if [ -f ${SERVER_JARFILE} ]; then
- mv ${SERVER_JARFILE} ${SERVER_JARFILE}.old
- fi
-
- curl -o ${SERVER_JARFILE} ${DOWNLOAD_URL}
-
- if [ ! -f server.properties ]; then
- echo -e "Downloading MC server.properties"
- curl -o server.properties https://raw.githubusercontent.com/pelican-eggs/minecraft/refs/heads/main/java/server.properties
- fi
- container: 'ghcr.io/pelican-eggs/installers:alpine'
- entrypoint: ash
-variables:
- -
- name: 'Build Number'
- description: "The build number for the paper release.\r\n\r\nLeave at latest to always get the latest version. Invalid versions will default to latest."
- env_variable: BUILD_NUMBER
- default_value: latest
- user_viewable: true
- user_editable: true
- rules:
- - required
- - string
- - 'max:20'
- sort: 4
- -
- name: 'Download Path'
- description: |-
- A URL to use to download a server.jar rather than the ones in the install script. This is not user
- viewable.
- env_variable: DL_PATH
- default_value: ''
- user_viewable: false
- user_editable: false
- rules:
- - nullable
- - string
- sort: 3
- -
- name: 'Minecraft Version'
- description: "The version of minecraft to download. \r\n\r\nLeave at latest to always get the latest version. Invalid versions will default to latest."
- env_variable: MINECRAFT_VERSION
- default_value: latest
- user_viewable: true
- user_editable: true
- rules:
- - nullable
- - string
- - 'max:20'
- sort: 1
- -
- name: 'Server Jar File'
- description: 'The name of the server jarfile to run the server with.'
- env_variable: SERVER_JARFILE
- default_value: server.jar
- user_viewable: true
- user_editable: true
- rules:
- - required
- - 'regex:/^([\w\d._-]+)(\.jar)$/'
- sort: 2
diff --git a/database/Seeders/eggs/minecraft/egg-sponge.yaml b/database/Seeders/eggs/minecraft/egg-sponge.yaml
deleted file mode 100644
index 9fd4b8713..000000000
--- a/database/Seeders/eggs/minecraft/egg-sponge.yaml
+++ /dev/null
@@ -1,159 +0,0 @@
-_comment: 'DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL'
-meta:
- version: PLCN_v3
- update_url: 'https://github.com/pelican-dev/panel/raw/main/database/Seeders/eggs/minecraft/egg-sponge.yaml'
-exported_at: '2025-10-31T12:41:03+00:00'
-name: Sponge
-author: panel@example.com
-uuid: f0d2f88f-1ff3-42a0-b03f-ac44c5571e6d
-description: 'A community-driven open source Minecraft: Java Edition modding platform.'
-image: 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMDAgMjAwIiBmaWxsPSIjRjdDRjBEIj48cGF0aCBkPSJNMTkwIDBIMTBDNC41IDAgMCA0LjUgMCAxMHYxODBjMCA1LjUgNC41IDEwIDEwIDEwaDE2LjFjLTEuNy00NS43LS4xLTUyLjUgMy4xLTU3IDMuOS01LjYgNS41LTYuMyAxMS40LTExIDUtNCAzLjItMTAuNS0uNC0xNS4yLTIuMi0yLjktNS4zLTYuMy03LjctOS42LTEuNS0yLjIgMi4yLTE1LjEgMy42LTE5LjggMS40LTQuNyAzLjgtMjAgMjQuOC0yNC4xIDcuOS0xLjYgMjkuNi0yLjcgNDQuNS0xLjgtLjEtLjYtLjMtMS4zLS40LTItLjMtMS4yLS41LTIuNS0uOC0zLjktLjMtMS4zLS42LTIuNy0uOS00LjEtLjMtMS40LS43LTIuOC0xLTQuMy0uNC0xLjUtLjctMi45LTEuMi00LjQtLjgtMy0xLjgtNS45LTMtOC43LS42LTEuNC0xLjItMi43LTEuOS0zLjktLjctMS4xLTEuNC0yLjEtMi0yLjUtLjEtLjEtLjItLjItLjMtLjJoLS4xLjJzLjEgMCAwIDBsLS4zLS4xaC0uMmwtLjQtLjFoLS41Yy0xLjMtLjEtMi43LS4xLTQuMiAwLTIuOS4yLTYgLjgtOSAxLjVzLTUuOSAxLjYtOC43IDIuNGMtMS4yLjQtMi4zLjgtMy40IDEuMS4xLjkuMiAxLjcuMiAyLjYgMCAxMy0xMC41IDIzLjUtMjMuNSAyMy41UzIwLjYgNDcuOSAyMC42IDM0LjlzMTAuNS0yMy41IDIzLjUtMjMuNWM4LjcgMCAxNi4zIDQuNyAyMC40IDExLjggMS0uNCAyLjEtLjggMy4yLTEuMiAyLjgtMS4xIDUuOS0yLjIgOS4xLTMuMiAzLjMtMSA2LjctMiAxMC41LTIuNSAxLjktLjMgMy45LS40IDYuMS0uM2guOGMuMyAwIC42LjEuOC4xSDk1LjdsLjMuMWguMWwuMy4xcy4yIDAgLjMuMWwuNC4xYy42LjIuOS4zIDEuMy41cy43LjMgMS4xLjVjLjcuNCAxLjMuOCAxLjkgMS4yIDEuMS45IDIgMS44IDIuNyAyLjcuOC45IDEuNCAxLjggMiAyLjcgMS4yIDEuOCAyLjEgMy41IDIuOSA1LjIgMS42IDMuNCAyLjkgNi44IDMuOSAxMGwxLjUgNC44Yy41IDEuNi44IDMuMSAxLjIgNC42LjIuNy40IDEuNS41IDIuMi4yLjcuMyAxLjQuNSAyLjEuMyAxLjQuNiAyLjguOSA0LjEuNCAyIC43IDMuOSAxIDUuNiAyMi40IDIuMiAzOS41IDUuMSA0Ny4yIDEyLjggMTEuMyAxMSAyMCA2MSAxNC4zIDEyNC41aDEwYzUuNSAwIDEwLTQuNSAxMC0xMFYxMGMwLTUuNS00LjUtMTAtMTAtMTB6Ii8+PHBhdGggZD0iTTkxLjQgMTQwLjhjLTEuMyAzLjYtMi40IDQ1LjcgMTAgNDUuN3MxMi41LTQzLjIgMTIuMS00NS43Yy0uNC0yLjQtMjAuOC0zLjUtMjIuMSAwek03NSAxMDBjLTguNS0xLjItMTMuNiA0MC4yLTEuNyA0Mi42IDExLjIgMi4yIDEwLjEtNDEuNCAxLjctNDIuNnpNMTMwLjggMTAwYy04LjUtMS4yLTEzLjYgNDAuMi0xLjcgNDIuNiAxMS4yIDIuMiAxMC4yLTQxLjQgMS43LTQyLjZ6Ii8+PC9zdmc+'
-tags:
- - minecraft
-features:
- - eula
- - java_version
- - pid_limit
-docker_images:
- 'Java 21': 'ghcr.io/pelican-eggs/yolks:java_21'
- 'Java 17': 'ghcr.io/pelican-eggs/yolks:java_17'
- 'Java 16': 'ghcr.io/pelican-eggs/yolks:java_16'
- 'Java 11': 'ghcr.io/pelican-eggs/yolks:java_11'
- 'Java 8': 'ghcr.io/pelican-eggs/yolks:java_8'
-file_denylist: { }
-startup_commands:
- Default: 'java -Xms128M -XX:MaxRAMPercentage=95.0 -jar {{SERVER_JARFILE}}'
-config:
- files:
- server.properties:
- parser: properties
- find:
- server-ip: ''
- server-port: '{{server.allocations.default.port}}'
- query.port: '{{server.allocations.default.port}}'
- startup:
- done: ')! For help, type '
- logs: { }
- stop: stop
-scripts:
- installation:
- script: |-
- #!/bin/ash
- # Sponge Installation Script
- #
- # Server Files: /mnt/server
-
- cd /mnt/server
-
- if [ $MINECRAFT_VERSION = 'latest' ] || [ -z $MINECRAFT_VERSION ]; then
- TARGET_VERSION_JSON=$(curl -sSL https://dl-api.spongepowered.org/v2/groups/org.spongepowered/artifacts/${SPONGE_TYPE}/latest?recommended=true)
- if [ -z "${TARGET_VERSION_JSON}" ]; then
- echo -e "Failed to find latest recommended version!"
- exit 1
- fi
- echo -e "Found latest version for ${SPONGE_TYPE}"
- else
- if [ $SPONGE_TYPE = 'spongevanilla' ]; then
- VERSIONS_JSON=$(curl -sSL https://dl-api.spongepowered.org/v2/groups/org.spongepowered/artifacts/${SPONGE_TYPE}/versions?tags=,minecraft:${MINECRAFT_VERSION}&offset=0&limit=1)
- else
- FORGETAG='forge'
- if [ $SPONGE_TYPE = 'spongeneo' ]; then
- FORGETAG='neoforge'
- fi
- VERSIONS_JSON=$(curl -sSL https://dl-api.spongepowered.org/v2/groups/org.spongepowered/artifacts/${SPONGE_TYPE}/versions?tags=,minecraft:${MINECRAFT_VERSION},${FORGETAG}:${FORGE_VERSION}&offset=0&limit=1)
- fi
-
- if [ -z "${VERSIONS_JSON}" ]; then
- echo -e "Failed to find recommended ${MINECRAFT_VERSION} version for ${SPONGE_TYPE} ${FORGE_VERSION}!"
- exit 1
- fi
-
- VERSION_KEY=$(echo $VERSIONS_JSON | jq -r '.artifacts | to_entries[0].key')
- TARGET_VERSION_JSON=$(curl -sSL https://dl-api.spongepowered.org/v2/groups/org.spongepowered/artifacts/${SPONGE_TYPE}/versions/${VERSION_KEY})
-
- if [ -z "${TARGET_VERSION_JSON}" ]; then
- echo -e "Failed to find ${VERSION_KEY} for ${SPONGE_TYPE} ${FORGE_VERSION}!"
- exit 1
- fi
-
- echo -e "Found ${MINECRAFT_VERSION} for ${SPONGE_TYPE}"
- fi
-
- TARGET_VERSION=`echo $TARGET_VERSION_JSON | jq '.assets[] | select(.classifier == "universal")'`
- if [ -z "${TARGET_VERSION}" ]; then
- TARGET_VERSION=`echo $TARGET_VERSION_JSON | jq '.assets[] | select(.classifier == "" and .extension == "jar")'`
- fi
-
- if [ -z "${TARGET_VERSION}" ]; then
- echo -e "Failed to get download url data from the selected version"
- exit 1
- fi
-
- SPONGE_URL=$(echo $TARGET_VERSION | jq -r '.downloadUrl')
- CHECKSUM=$(echo $TARGET_VERSION | jq -r '.md5')
- echo -e "Found file at ${SPONGE_URL} with checksum ${CHECKSUM}"
-
- echo -e "running: curl -o ${SERVER_JARFILE} ${SPONGE_URL}"
- curl -o ${SERVER_JARFILE} ${SPONGE_URL}
-
- if [ $(basename $(md5sum ${SERVER_JARFILE})) = ${CHECKSUM} ] ; then
- echo "Checksum passed"
- else
- echo "Checksum failed"
- fi
-
- echo -e "Install Complete"
- container: 'ghcr.io/pelican-eggs/installers:alpine'
- entrypoint: ash
-variables:
- -
- name: 'Forge/Neoforge Version'
- description: |-
- The modding api target version if set to `spongeforge` or `spongeneo`. Leave blank if using
- `spongevanilla`
- env_variable: FORGE_VERSION
- default_value: ''
- user_viewable: true
- user_editable: true
- rules:
- - string
- sort: 3
- -
- name: 'Minecraft Version'
- description: |-
- The version of Minecraft to target. Use "latest" to install the latest version. Go to Settings >
- Reinstall Server to apply.
- env_variable: MINECRAFT_VERSION
- default_value: latest
- user_viewable: true
- user_editable: true
- rules:
- - required
- - string
- - 'between:3,15'
- sort: 1
- -
- name: 'Server Jar File'
- description: 'The name of the Jarfile to use when running Sponge.'
- env_variable: SERVER_JARFILE
- default_value: server.jar
- user_viewable: true
- user_editable: true
- rules:
- - required
- - 'regex:/^([\w\d._-]+)(\.jar)$/'
- sort: 4
- -
- name: 'Sponge Type'
- description: |-
- SpongeVanilla if you are only using Sponge plugins.
- SpongeForge when using Forge mods and Sponge plugins.
- SpongeNeo when using NeoForge mods and Sponge plugins.
- env_variable: SPONGE_TYPE
- default_value: spongevanilla
- user_viewable: true
- user_editable: true
- rules:
- - required
- - 'in:spongevanilla,spongeforge,spongeneo'
- sort: 2
diff --git a/database/Seeders/eggs/rust/egg-rust.yaml b/database/Seeders/eggs/rust/egg-rust.yaml
deleted file mode 100644
index 8916b6a5f..000000000
--- a/database/Seeders/eggs/rust/egg-rust.yaml
+++ /dev/null
@@ -1,282 +0,0 @@
-_comment: 'DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL'
-meta:
- version: PLCN_v3
- update_url: 'https://github.com/pelican-dev/panel/raw/main/database/Seeders/eggs/rust/egg-rust.yaml'
-exported_at: '2025-10-31T12:25:32+00:00'
-name: Rust
-author: panel@example.com
-uuid: bace2dfb-209c-452a-9459-7d6f340b07ae
-description: |-
- The only aim in Rust is to survive. To do this you will need to overcome struggles such as hunger,
- thirst and cold. Build a fire. Build a shelter. Kill animals for meat. Protect yourself from other
- players, and kill them for meat. Create alliances with other players and form a town. Do whatever it
- takes to survive.
-image: 'data:image/png;base64,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'
-tags:
- - source
- - steamcmd
-features:
- - steam_disk_space
-docker_images:
- Rust: 'ghcr.io/pelican-eggs/games:rust'
-file_denylist: { }
-startup_commands:
- Default: './RustDedicated -batchmode +server.port {{SERVER_PORT}} +server.queryport {{QUERY_PORT}} +server.identity "rust" +rcon.port {{RCON_PORT}} +rcon.web true +server.hostname \"{{SERVER_HOSTNAME}}\" +server.level \"{{LEVEL}}\" +server.description \"{{DESCRIPTION}}\" +server.url \"{{SERVER_URL}}\" +server.headerimage \"{{SERVER_IMG}}\" +server.logoimage \"{{SERVER_LOGO}}\" +server.maxplayers {{MAX_PLAYERS}} +rcon.password \"{{RCON_PASS}}\" +server.saveinterval {{SAVEINTERVAL}} +app.port {{APP_PORT}} $( [ -z ${MAP_URL} ] && printf %s "+server.worldsize \"{{WORLD_SIZE}}\" +server.seed \"{{WORLD_SEED}}\"" || printf %s "+server.levelurl {{MAP_URL}}" ) {{ADDITIONAL_ARGS}}'
-config:
- files: { }
- startup:
- done: 'Server startup complete'
- logs: { }
- stop: quit
-scripts:
- installation:
- script: |-
- #!/bin/bash
- # steamcmd Base Installation Script
- #
- # Server Files: /mnt/server
-
-
- ## just in case someone removed the defaults.
- if [ "${STEAM_USER}" == "" ]; then
- echo -e "steam user is not set.
- "
- echo -e "Using anonymous user.
- "
- STEAM_USER=anonymous
- STEAM_PASS=""
- STEAM_AUTH=""
- else
- echo -e "user set to ${STEAM_USER}"
- fi
-
- ## download and install steamcmd
- cd /tmp
- mkdir -p /mnt/server/steamcmd
- curl -sSL -o steamcmd.tar.gz https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz
- tar -xzvf steamcmd.tar.gz -C /mnt/server/steamcmd
- mkdir -p /mnt/server/steamapps # Fix steamcmd disk write error when this folder is missing
- cd /mnt/server/steamcmd
-
- # SteamCMD fails otherwise for some reason, even running as root.
- # This is changed at the end of the install process anyways.
- chown -R root:root /mnt
- export HOME=/mnt/server
-
- ## install game using steamcmd
- ./steamcmd.sh +force_install_dir /mnt/server +login ${STEAM_USER} ${STEAM_PASS} ${STEAM_AUTH} +app_update ${SRCDS_APPID} ${EXTRA_FLAGS} validate +quit ## other flags may be needed depending on install. looking at you cs 1.6
-
- ## set up 32 bit libraries
- mkdir -p /mnt/server/.steam/sdk32
- cp -v linux32/steamclient.so ../.steam/sdk32/steamclient.so
-
- ## set up 64 bit libraries
- mkdir -p /mnt/server/.steam/sdk64
- cp -v linux64/steamclient.so ../.steam/sdk64/steamclient.so
- container: 'ghcr.io/pelican-eggs/installers:debian'
- entrypoint: bash
-variables:
- -
- name: 'Additional Arguments'
- description: 'Add additional startup parameters to the server.'
- env_variable: ADDITIONAL_ARGS
- default_value: ''
- user_viewable: true
- user_editable: true
- rules:
- - nullable
- - string
- sort: 14
- -
- name: 'App ID'
- description: ''
- env_variable: SRCDS_APPID
- default_value: 258550
- user_viewable: false
- user_editable: false
- rules:
- - required
- - string
- - 'in:258550'
- sort: 18
- -
- name: 'App Port'
- description: 'Port for the Rust+ App. -1 to disable.'
- env_variable: APP_PORT
- default_value: 28082
- user_viewable: true
- user_editable: false
- rules:
- - required
- - integer
- sort: 15
- -
- name: 'Custom Map URL'
- description: |-
- Overwrites the map with the one from the direct download URL. Invalid URLs will cause the server to
- crash.
- env_variable: MAP_URL
- default_value: ''
- user_viewable: true
- user_editable: true
- rules:
- - nullable
- - url
- sort: 17
- -
- name: Description
- description: 'The description under your server title. Commonly used for rules & info. Use \n for newlines.'
- env_variable: DESCRIPTION
- default_value: 'Powered by Panel'
- user_viewable: true
- user_editable: true
- rules:
- - required
- - string
- sort: 4
- -
- name: Level
- description: 'The world file for Rust to use.'
- env_variable: LEVEL
- default_value: 'Procedural Map'
- user_viewable: true
- user_editable: true
- rules:
- - required
- - string
- - 'max:20'
- sort: 3
- -
- name: 'Max Players'
- description: 'The maximum amount of players allowed in the server at once.'
- env_variable: MAX_PLAYERS
- default_value: 40
- user_viewable: true
- user_editable: true
- rules:
- - required
- - integer
- sort: 8
- -
- name: 'Modding Framework'
- description: "The modding framework to be used: carbon, oxide, vanilla.\r\nDefaults to \"vanilla\" for a non-modded server installation."
- env_variable: FRAMEWORK
- default_value: vanilla
- user_viewable: true
- user_editable: true
- rules:
- - required
- - 'in:vanilla,oxide,carbon'
- sort: 2
- -
- name: 'Query Port'
- description: "Server Query Port. Can't be the same as Game's primary port."
- env_variable: QUERY_PORT
- default_value: 27017
- user_viewable: true
- user_editable: false
- rules:
- - required
- - integer
- sort: 10
- -
- name: 'RCON Password'
- description: 'RCON access password.'
- env_variable: RCON_PASS
- default_value: ''
- user_viewable: true
- user_editable: true
- rules:
- - required
- - 'regex:/^[\w.-]*$/'
- - 'max:64'
- sort: 12
- -
- name: 'RCON Port'
- description: 'Port for RCON connections.'
- env_variable: RCON_PORT
- default_value: 28016
- user_viewable: true
- user_editable: false
- rules:
- - required
- - integer
- sort: 11
- -
- name: 'Save Interval'
- description: 'Sets the server’s auto-save interval in seconds.'
- env_variable: SAVEINTERVAL
- default_value: 60
- user_viewable: true
- user_editable: true
- rules:
- - required
- - integer
- sort: 13
- -
- name: 'Server Image'
- description: 'The header image for the top of your server listing.'
- env_variable: SERVER_IMG
- default_value: ''
- user_viewable: true
- user_editable: true
- rules:
- - nullable
- - url
- sort: 9
- -
- name: 'Server Logo'
- description: 'The circular server logo for the Rust+ app.'
- env_variable: SERVER_LOGO
- default_value: ''
- user_viewable: true
- user_editable: true
- rules:
- - nullable
- - url
- sort: 16
- -
- name: 'Server Name'
- description: 'The name of your server in the public server list.'
- env_variable: SERVER_HOSTNAME
- default_value: 'A Rust Server'
- user_viewable: true
- user_editable: true
- rules:
- - required
- - string
- - 'max:60'
- sort: 1
- -
- name: URL
- description: 'The URL for your server. This is what comes up when clicking the "Visit Website" button.'
- env_variable: SERVER_URL
- default_value: 'http://example.com'
- user_viewable: true
- user_editable: true
- rules:
- - nullable
- - url
- sort: 5
- -
- name: 'World Seed'
- description: 'The seed for a procedural map.'
- env_variable: WORLD_SEED
- default_value: ''
- user_viewable: true
- user_editable: true
- rules:
- - nullable
- - string
- sort: 7
- -
- name: 'World Size'
- description: 'The world size for a procedural map.'
- env_variable: WORLD_SIZE
- default_value: 3000
- user_viewable: true
- user_editable: true
- rules:
- - required
- - integer
- sort: 6
diff --git a/database/Seeders/eggs/source-engine/egg-custom-source-engine-game.yaml b/database/Seeders/eggs/source-engine/egg-custom-source-engine-game.yaml
deleted file mode 100644
index 4c104ee3e..000000000
--- a/database/Seeders/eggs/source-engine/egg-custom-source-engine-game.yaml
+++ /dev/null
@@ -1,155 +0,0 @@
-_comment: 'DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL'
-meta:
- version: PLCN_v3
- update_url: 'https://github.com/pelican-dev/panel/raw/main/database/Seeders/eggs/source-engine/egg-custom-source-engine-game.yaml'
-exported_at: '2025-10-31T12:43:00+00:00'
-name: 'Custom Source Engine Game'
-author: panel@example.com
-uuid: 2a42d0c2-c0ba-4067-9a0a-9b95d77a3490
-description: |-
- This option allows modifying the startup arguments and other details to run a custom SRCDS based
- game on the panel.
-image: 'data:image/webp;base64,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'
-tags:
- - source
- - steamcmd
-features:
- - steam_disk_space
-docker_images:
- Source: 'ghcr.io/pelican-eggs/games:source'
-file_denylist: { }
-startup_commands:
- Default: './srcds_run -game {{SRCDS_GAME}} -console -port {{SERVER_PORT}} +map {{SRCDS_MAP}} +ip 0.0.0.0 -strictportbind -norestart'
-config:
- files: { }
- startup:
- done: 'gameserver Steam ID'
- logs: { }
- stop: quit
-scripts:
- installation:
- script: |-
- #!/bin/bash
- # steamcmd Base Installation Script
- #
- # Server Files: /mnt/server
-
- ##
- #
- # Variables
- # STEAM_USER, STEAM_PASS, STEAM_AUTH - Steam user setup. If a user has 2fa enabled it will most likely fail due to timeout. Leave blank for anon install.
- # WINDOWS_INSTALL - if it's a windows server you want to install set to 1
- # SRCDS_APPID - steam app id ffound here - https://developer.valvesoftware.com/wiki/Dedicated_Servers_List
- # EXTRA_FLAGS - when a server has extra glas for things like beta installs or updates.
- #
- ##
-
-
- ## just in case someone removed the defaults.
- if [ "${STEAM_USER}" == "" ]; then
- echo -e "steam user is not set.
- "
- echo -e "Using anonymous user.
- "
- STEAM_USER=anonymous
- STEAM_PASS=""
- STEAM_AUTH=""
- else
- echo -e "user set to ${STEAM_USER}"
- fi
-
- ## download and install steamcmd
- cd /tmp
- mkdir -p /mnt/server/steamcmd
- curl -sSL -o steamcmd.tar.gz https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz
- tar -xzvf steamcmd.tar.gz -C /mnt/server/steamcmd
- mkdir -p /mnt/server/steamapps # Fix steamcmd disk write error when this folder is missing
- cd /mnt/server/steamcmd
-
- # SteamCMD fails otherwise for some reason, even running as root.
- # This is changed at the end of the install process anyways.
- chown -R root:root /mnt
- export HOME=/mnt/server
-
- ## install game using steamcmd
- ./steamcmd.sh +force_install_dir /mnt/server +login ${STEAM_USER} ${STEAM_PASS} ${STEAM_AUTH} $( [[ "${WINDOWS_INSTALL}" == "1" ]] && printf %s '+@sSteamCmdForcePlatformType windows' ) +app_update ${SRCDS_APPID} ${EXTRA_FLAGS} validate +quit ## other flags may be needed depending on install. looking at you cs 1.6
-
- ## set up 32 bit libraries
- mkdir -p /mnt/server/.steam/sdk32
- cp -v linux32/steamclient.so ../.steam/sdk32/steamclient.so
-
- ## set up 64 bit libraries
- mkdir -p /mnt/server/.steam/sdk64
- cp -v linux64/steamclient.so ../.steam/sdk64/steamclient.so
- container: 'ghcr.io/pelican-eggs/installers:debian'
- entrypoint: bash
-variables:
- -
- name: 'Game ID'
- description: 'The ID corresponding to the game to download and run using SRCDS.'
- env_variable: SRCDS_APPID
- default_value: ''
- user_viewable: true
- user_editable: false
- rules:
- - required
- - numeric
- - 'digits_between:1,6'
- sort: 1
- -
- name: 'Game Name'
- description: 'The name corresponding to the game to download and run using SRCDS.'
- env_variable: SRCDS_GAME
- default_value: ''
- user_viewable: true
- user_editable: false
- rules:
- - required
- - alpha_dash
- - 'between:1,100'
- sort: 2
- -
- name: Map
- description: 'The default map for the server.'
- env_variable: SRCDS_MAP
- default_value: ''
- user_viewable: true
- user_editable: true
- rules:
- - required
- - string
- - alpha_dash
- sort: 3
- -
- name: 'Steam Auth'
- description: ''
- env_variable: STEAM_AUTH
- default_value: ''
- user_viewable: true
- user_editable: true
- rules:
- - nullable
- - string
- sort: 6
- -
- name: 'Steam Password'
- description: ''
- env_variable: STEAM_PASS
- default_value: ''
- user_viewable: true
- user_editable: true
- rules:
- - nullable
- - string
- sort: 5
- -
- name: 'Steam Username'
- description: ''
- env_variable: STEAM_USER
- default_value: ''
- user_viewable: true
- user_editable: true
- rules:
- - nullable
- - string
- sort: 4
diff --git a/database/Seeders/eggs/source-engine/egg-garrys-mod.yaml b/database/Seeders/eggs/source-engine/egg-garrys-mod.yaml
deleted file mode 100644
index af9797409..000000000
--- a/database/Seeders/eggs/source-engine/egg-garrys-mod.yaml
+++ /dev/null
@@ -1,229 +0,0 @@
-_comment: 'DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL'
-meta:
- version: PLCN_v3
- update_url: 'https://github.com/pelican-dev/panel/raw/main/database/Seeders/eggs/source-engine/egg-garrys-mod.yaml'
-exported_at: '2025-10-31T12:37:53+00:00'
-name: 'Garrys Mod'
-author: panel@example.com
-uuid: 60ef81d4-30a2-4d98-ab64-f59c69e2f915
-description: |-
- Garrys Mod, is a sandbox physics game created by Garry Newman, and developed by his company,
- Facepunch Studios.
-image: 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyNC4zLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiDQoJIHZpZXdCb3g9IjAgMCAzODQgMzg0IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAzODQgMzg0OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDojMDA4MUZGO30NCgkuc3Qxe2ZpbGw6I0ZGRkZGRjt9DQo8L3N0eWxlPg0KPHBhdGggY2xhc3M9InN0MCIgZD0iTTM0My45MiwzODRjLTEwMS42LDAtMjAzLjIsMC0zMDQuOCwwYy0wLjg5LTAuNDQtMS44NC0wLjMxLTIuNzktMC4zOGMtNC41MS0wLjM2LTguNjEtMi4wNy0xMi41Ni00LjEzDQoJYy01LjktMy4wNy0xMC44NC03LjMxLTE0LjkyLTEyLjU0Yy0zLjkzLTUuMDQtNi43My0xMC42NS04LjE3LTE2LjljLTAuMzktMS42OC0wLjMxLTMuNDEtMC40MS01LjEyYy0wLjAyLTAuMzQsMC4wOS0wLjc0LTAuMjctMQ0KCUMwLDI0Mi42NCwwLDE0MS4zNiwwLDQwLjA4YzAuNDMtMC42NywwLjI1LTEuNDQsMC4yNy0yLjE1YzAuMTEtNC42NCwxLjU3LTguOTIsMy42My0xMi45N0M5LjIyLDE0LjQ4LDE3LjI1LDYuODgsMjguMjUsMi40Ng0KCWMzLjM2LTEuMzUsNi44MS0yLjA5LDEwLjQtMi4yN0MzOS4xMywwLjE2LDM5LjY3LDAuNiw0MC4wOCwwQzE0MS45MiwwLDI0My43NiwwLDM0NS42LDBjMC43MSwwLjc3LDEuNjgsMC4zNiwyLjQ5LDAuNDINCgljMS45MiwwLjE1LDMuNzQsMC42NCw1LjUzLDEuMjVjNy4zMSwyLjQ2LDEzLjU4LDYuNTYsMTguODIsMTIuMmM1LjM5LDUuOCw5LjEyLDEyLjUsMTAuOSwyMC4yNWMwLjM4LDEuNjYsMC4yOSwzLjM3LDAuMzksNS4wNg0KCWMwLjAyLDAuMzItMC4wNywwLjY3LDAuMjYsMC45YzAsMTAxLjI4LDAsMjAyLjU2LDAsMzAzLjg0Yy0wLjU4LDAuOC0wLjM1LDEuNzYtMC4zNCwyLjU5YzAuMDMsMi43LTAuNjMsNS4yNC0xLjUzLDcuNzENCgljLTQuMjMsMTEuNTUtMTEuODgsMjAuMTItMjIuOCwyNS43M2MtMy4xMywxLjYxLTYuNDIsMi45MS05Ljk2LDMuNDNjLTEuNTIsMC4yMi0zLjA0LDAuMjYtNC41NiwwLjMzDQoJQzM0NC40OCwzODMuNzMsMzQ0LjE1LDM4My42OCwzNDMuOTIsMzg0eiIvPg0KPHBhdGggY2xhc3M9InN0MSIgZD0iTTIzNS41NywyMjEuOTFjLTIuODQsMy40LTUuNjgsNy41MS05LjIyLDEwLjg4Yy03LjIsNi44NC0xNi4yLDEwLjQxLTI1Ljc3LDEyLjQ5DQoJYy0xMS41MywyLjUxLTIzLjEzLDIuMTgtMzQuNzYsMC42MWMtMTQuNTItMS45NS0yNy4yNy03LjgzLTM4LjM4LTE3LjIyYy05LjM1LTcuOTEtMTYuMDYtMTcuOC0yMC44NC0yOS4wNA0KCWMtNC44OC0xMS40Ni03LjQtMjMuNTEtOC42OC0zNS44MWMtMS44NS0xNy43OC0wLjk5LTM1LjQyLDQuMzMtNTIuNmM0LjM3LTE0LjExLDExLjAxLTI3LDIxLjA4LTM4LjAzDQoJQzEzNSw2MC40LDE0OS4xOCw1Mi4wOCwxNjYuMSw0OC41OWM5LjQ2LTEuOTUsMTkuMDEtMS45NSwyOC41Ny0wLjRjMTcsMi43NywzMC4xMywxMS40OSwzOS43NSwyNS42OGMwLjI1LDAuMzIsMS4xOSwxLjcyLDEuMTksMS43Mg0KCXMwLTQuNzgsMC02LjgzYy0wLjAxLTUuMTYsMC0xNi41MSwwLTE2LjUxczEuMDksMCwxLjM1LDBjMTUuMjgtMC4wNSw0OS45Ny0wLjAxLDQ5Ljk3LTAuMDFzLTAuMDEsMS45Ni0wLjAxLDQuMjgNCgljMCw2NC40LDAuMDksMTI4LjgtMC4wNSwxOTMuMTljLTAuMDQsMjAuMzYtNS43OSwzOS0xOC44NCw1NC45NWMtMTAuMTUsMTIuNC0yMy4yNSwyMC41Ny0zOC4yNSwyNS44NQ0KCWMtMTQuNiw1LjE0LTI5LjcsNi45MS00NS4wOCw2LjI2Yy0xNi44MS0wLjcxLTMyLjk5LTQuMzUtNDcuNzUtMTIuNjRjLTIyLjIyLTEyLjQ5LTM1LjcyLTMxLjIyLTM5LjA3LTU2Ljc4DQoJYy0wLjQ1LTMuMzktMC41Ni02Ljg0LTAuNjktMTAuMjZjLTAuMDEtMC4yMS0wLjA3LTEuMzEtMC4wNy0xLjMxczEuMDQsMCwxLjI2LDBjMTUuMjQtMC4wNywzMC40OC0wLjA4LDQ1LjcyLTAuMDMNCgljMC4xOCwwLDAuOSwwLjAxLDAuOSwwLjAxcy0wLjAxLDAuOTYtMC4wMSwxLjEyYzAuMTYsOC44NiwyLjYyLDE2Ljg2LDguNzcsMjMuNDRjNC41OSw0LjkxLDEwLjI2LDguMTYsMTYuNyw5Ljg5DQoJYzE0Ljk2LDQuMDMsMjkuNTksMy4xOSw0My40OS0zLjk4YzEyLjUtNi40NSwyMC40LTE2LjU0LDIxLjMtMzAuODVjMC42Ny0xMC43OSwwLjI3LTIxLjY2LDAuMzQtMzIuNDkNCglDMjM1LjU3LDIyMi4zNSwyMzUuNTcsMjIxLjc5LDIzNS41NywyMjEuOTF6Ii8+DQo8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTUwLjc3LDE0OS44MmMtMC4zLTExLjc5LDAuOTMtMjMuMzcsNS41NS0zNC4zNWM1LjQzLTEyLjg5LDE0LjkxLTIwLjc0LDI4LjktMjIuODgNCgljOS42Ny0xLjQ4LDE5LjA4LTAuODUsMjcuOTksMy40N2M4LjksNC4zMiwxNC4zOSwxMS43LDE3Ljk5LDIwLjY0YzMuNTMsOC43NSw1LjMzLDE3Ljk0LDUuNDYsMjcuMzFjMC4xMiw4LjM4LDAuMDksMTYuODktMS4yLDI1LjE0DQoJYy0yLjU5LDE2LjU3LTE0LjA5LDMyLjA4LTMxLjczLDM2LjRjLTE2LjA5LDMuOTQtMzIuNjktMi4yMy00Mi4yOC0xNS44MWMtNi43NC05LjUzLTkuODUtMjAuMjEtMTAuNjYtMzEuNjgNCglDMTUwLjYxLDE1NS4zMywxNTAuNzcsMTUyLjU3LDE1MC43NywxNDkuODJ6Ii8+DQo8L3N2Zz4NCg=='
-tags:
- - source
- - steamcmd
-features:
- - gsl_token
- - steam_disk_space
-docker_images:
- Source: 'ghcr.io/pelican-eggs/games:source'
-file_denylist: { }
-startup_commands:
- Default: './srcds_run -game garrysmod -console -port {{SERVER_PORT}} +ip 0.0.0.0 +host_workshop_collection {{WORKSHOP_ID}} +map {{SRCDS_MAP}} +gamemode {{GAMEMODE}} -strictportbind -norestart +sv_setsteamaccount {{STEAM_ACC}} +maxplayers {{MAX_PLAYERS}} -tickrate {{TICKRATE}} $( [ "$LUA_REFRESH" == "1" ] || printf %s ''-disableluarefresh'' )'
-config:
- files: { }
- startup:
- done: 'gameserver Steam ID'
- logs: { }
- stop: quit
-scripts:
- installation:
- script: |-
- #!/bin/bash
- # steamcmd Base Installation Script
- #
- # Server Files: /mnt/server
-
- ## just in case someone removed the defaults.
- if [ "${STEAM_USER}" == "" ]; then
- echo -e "steam user is not set.
- "
- echo -e "Using anonymous user.
- "
- STEAM_USER=anonymous
- STEAM_PASS=""
- STEAM_AUTH=""
- else
- echo -e "user set to ${STEAM_USER}"
- fi
-
- ## download and install steamcmd
- cd /tmp
- mkdir -p /mnt/server/steamcmd
- curl -sSL -o steamcmd.tar.gz https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz
- tar -xzvf steamcmd.tar.gz -C /mnt/server/steamcmd
- mkdir -p /mnt/server/steamapps # Fix steamcmd disk write error when this folder is missing
- cd /mnt/server/steamcmd
-
- # SteamCMD fails otherwise for some reason, even running as root.
- # This is changed at the end of the install process anyways.
- chown -R root:root /mnt
- export HOME=/mnt/server
-
- ## install game using steamcmd
- ./steamcmd.sh +force_install_dir /mnt/server +login ${STEAM_USER} ${STEAM_PASS} ${STEAM_AUTH} $( [[ "${WINDOWS_INSTALL}" == "1" ]] && printf %s '+@sSteamCmdForcePlatformType windows' ) +app_update ${SRCDS_APPID} ${EXTRA_FLAGS} validate +quit ## other flags may be needed depending on install. looking at you cs 1.6
-
- ## set up 32 bit libraries
- mkdir -p /mnt/server/.steam/sdk32
- cp -v linux32/steamclient.so ../.steam/sdk32/steamclient.so
-
- ## set up 64 bit libraries
- mkdir -p /mnt/server/.steam/sdk64
- cp -v linux64/steamclient.so ../.steam/sdk64/steamclient.so
-
- # Creating needed default files for the game
- cd /mnt/server/garrysmod/lua/autorun/server
- echo '
- -- Docs: https://wiki.garrysmod.com/page/resource/AddWorkshop
- -- Place the ID of the workshop addon you want to be downloaded to people who join your server, not the collection ID
- -- Use https://beta.configcreator.com/create/gmod/resources.lua to easily create a list based on your collection ID
-
- resource.AddWorkshop( "" )
- ' > workshop.lua
-
- cd /mnt/server/garrysmod/cfg
- echo '
- // Please do not set RCon in here, use the startup parameters.
-
- hostname "New Gmod Server"
- sv_password ""
- sv_loadingurl ""
- sv_downloadurl ""
-
- // Steam Server List Settings
- // sv_location "eu"
- sv_region "255"
- sv_lan "0"
- sv_max_queries_sec_global "30000"
- sv_max_queries_window "45"
- sv_max_queries_sec "5"
-
- // Server Limits
- sbox_maxprops 100
- sbox_maxragdolls 5
- sbox_maxnpcs 10
- sbox_maxballoons 10
- sbox_maxeffects 10
- sbox_maxdynamite 10
- sbox_maxlamps 10
- sbox_maxthrusters 10
- sbox_maxwheels 10
- sbox_maxhoverballs 10
- sbox_maxvehicles 20
- sbox_maxbuttons 10
- sbox_maxsents 20
- sbox_maxemitters 5
- sbox_godmode 0
- sbox_noclip 0
-
- // Network Settings - Please keep these set to default.
-
- sv_minrate 75000
- sv_maxrate 0
- gmod_physiterations 2
- net_splitpacket_maxrate 45000
- decalfrequency 12
-
- // Execute Ban Files - Please do not edit
- exec banned_ip.cfg
- exec banned_user.cfg
-
- // Add custom lines under here
- ' > server.cfg
- container: 'ghcr.io/pelican-eggs/installers:debian'
- entrypoint: bash
-variables:
- -
- name: Gamemode
- description: 'The gamemode of your server.'
- env_variable: GAMEMODE
- default_value: sandbox
- user_viewable: true
- user_editable: true
- rules:
- - required
- - string
- sort: 5
- -
- name: 'Lua Refresh'
- description: "0 = disable Lua refresh,\r\n1 = enable Lua refresh"
- env_variable: LUA_REFRESH
- default_value: 0
- user_viewable: true
- user_editable: true
- rules:
- - boolean
- sort: 8
- -
- name: Map
- description: 'The default map for the server.'
- env_variable: SRCDS_MAP
- default_value: gm_flatgrass
- user_viewable: true
- user_editable: true
- rules:
- - required
- - string
- - alpha_dash
- sort: 1
- -
- name: 'Max Players'
- description: 'The maximum amount of players allowed on your game server.'
- env_variable: MAX_PLAYERS
- default_value: 32
- user_viewable: true
- user_editable: true
- rules:
- - required
- - integer
- - 'max:128'
- sort: 6
- -
- name: 'Source AppID'
- description: 'Required for game to update on server restart. Do not modify this.'
- env_variable: SRCDS_APPID
- default_value: 4020
- user_viewable: false
- user_editable: false
- rules:
- - required
- - string
- - 'max:20'
- sort: 3
- -
- name: 'Steam Account Token'
- description: 'The Steam Account Token required for the server to be displayed publicly.'
- env_variable: STEAM_ACC
- default_value: ''
- user_viewable: true
- user_editable: true
- rules:
- - nullable
- - string
- - alpha_num
- - 'size:32'
- sort: 2
- -
- name: Tickrate
- description: "The tickrate defines how fast the server will update each entity's location."
- env_variable: TICKRATE
- default_value: 22
- user_viewable: true
- user_editable: true
- rules:
- - required
- - integer
- - 'max:100'
- sort: 7
- -
- name: 'Workshop ID'
- description: 'The ID of your workshop collection (the numbers at the end of the URL)'
- env_variable: WORKSHOP_ID
- default_value: ''
- user_viewable: true
- user_editable: true
- rules:
- - nullable
- - integer
- sort: 4
diff --git a/database/Seeders/eggs/source-engine/egg-insurgency.yaml b/database/Seeders/eggs/source-engine/egg-insurgency.yaml
deleted file mode 100644
index 3221eef7f..000000000
--- a/database/Seeders/eggs/source-engine/egg-insurgency.yaml
+++ /dev/null
@@ -1,84 +0,0 @@
-_comment: 'DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL'
-meta:
- version: PLCN_v3
- update_url: 'https://github.com/pelican-dev/panel/raw/main/database/Seeders/eggs/source-engine/egg-insurgency.yaml'
-exported_at: '2025-10-31T12:30:16+00:00'
-name: Insurgency
-author: panel@example.com
-uuid: a5702286-655b-4069-bf1e-925c7300b61a
-description: |-
- Take to the streets for intense close quarters combat, where a team's survival depends upon securing
- crucial strongholds and destroying enemy supply in this multiplayer and cooperative Source Engine
- based experience.
-image: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAIABAMAAAAGVsnJAAAAMFBMVEVHcEw8NDctJScoJikRExcAAABQSk1nZGoCAgd+g4zx/P0cGBqSoKyrvsnI4OcMDBE5Qc4ZAAAABXRSTlMA/v46kM4udMIAAHO0SURBVHgB7MGBAAAAAICg/akXqQIAAABg8qwCxpXkiEr5J8Z1vi4Mx3y3kb+YAhYzjGTR8dly+GhGlvzFI02YPRppHMbSuu7uC8JZ4bdmVTPhrDzqbinibbkrzFjt8QY+BG5599lujdj16vXrVz2HiXandf4tZ7f6N7VeVgFs33wmOTh34U23TyxYgK8MFuO1zvpZa/7a0ABMNQN8Kb7ZwuLRMySDc501L31kw9oAwJ2/3JIVt2/qtM9C+Y30AZjZOVPL02fvgAbTJ299y/ppd/21gW86IjMbNtrAv+FUbwXxPe/6q/I9nHMGrgTObuqsn17XX4JXME4buAbck+dlK5w26Q8NeCBaBlwRYNjCtTFvddqnyPVbL5uAAOW388mmfOMX62aPjq7DAY5PyVYQ6Y/+KX1kdFxxA/XIZhIEf7q9gqtg/bJ46qQ7olTfuL5FawHQAjMwskVEPX7V77tx4NH90yuuJ4PttRPMgfjey7zvWba1dsw1WOSmt27W2kwSKT1YIokfeuHidTiYfuSmE+mIUv1NoxqYC6M12Q1k58v3QPXkZpwsmy9Lg6QbvO+OClY4+eFAxtxBBVOa0YTqfDGdbmm2Fjz0+J5YWh4HV0IouTS4jgx8OGifLNe3bn550B+mF4lSt1WD/Yf0gyS4Ph66aXKlHSJgk5NPxqnQ9tI301nU74X9cURZWmVTX79dSV/2/fXhdfG+l12xFRCtZfThQLbC+rG/4xiU4ML+R8Je+EgUjWgrLUqrG+n/vpH+f0E3+NClt9t/JcDyMjwf95x8TuLejROLRRr1x73eoJ/2h/18wUojuG0v/XjV/P+Fg5tWudkuq7fWsXHGD4+LJ88fTzvw0reAOyoswmoni8a9MBoOc/okivS/GUvr/x90k+RPLzN2yYD1/bdaCZWkauHg+IWD9oVOq28ANG3sRL20n4WP9B7pyw7ISi4l8Ijv/d+Ik+ShS6OGAmRGp52msqScTJOT2+vHacwVwTKpiuqvRL0iTMMbb4/GeW7U7NHNRPLei0QcvM/nZARg54zRiksSBogWxycctDuS9WsAIqpsMRqmae/t/SjsPdnPqXjym7+XIvaIP73CWGT0eUpp2s5zKijLcwacteRUOPrAYwCYSGlV6nk2HIoFDqMwynPv+nuHd4MP+ZyMeqrLkr57b0HCQJ6VWb3MyZ31o6xeXB+AS0em1KqgUZbKP5tJk0T6sZz5e4c/O7pJLCOjBVcaupwLAVkh65DIh6adR9eO5lRosj6icVpXpS6pGFE6yvKMVPHkA3Gwn/AcfOiSaM2V5WvmRDRLC1nnBWlzJDlZqr+5XwFM2RnvzkZrRVQoreQrri8OHhwAPvTChB1TlqWUqXxOigRltbxEO0wO2o3rA2s28lFTw64kUyrtXCHS7wb7j2WMkBj9p5dVTk/I20AqjOekt3Wp69XI2D6UM2/NSx+McfWCGdktapha46Q59OQDSTcJ9lv+//IsHDwkW4GnpErKZzrTlTxprdkC4OUDD0jtdhN4AK1lzWw0C9AvVi+l7/9uVz77iIeuPBU+9LcXJsZppYlyRROjtGgQawurnLx+YM1fuT56AgrWLLAWLRhwRWtTvDo4DHR3czJqfXFBk9L5PhhjwVOA2wfzwv1cM+aCwAFgjQ6cqQ1wc8NzT+KVf2hIAsnJL4ysQ6Pl4xaGBQgMCKuc3N5/1y8BnEasHVhkxLIyDgRu5i834+DQEct98idt7YwxzI4tI4LF3Us0CUj76Xte+q7U2jiu6+WI6pwsMC0e2Qy6fuMfBQHdbrMV2CAL0FpEEPgFZ2vn2/v3Ugd3CrGbDWU0e90ho2bwY27i/8jRIUkkIF1kAOsVsCzdgkfjiPsxKtzwshI2sigajoi0Y4PGsGYDsBi/6mu7c56f9o8I/tz1OXlZM/rFPyHqqZPnncf3TMBLYCHjTTQe5RkRs9Z6g9m6uYy5YnxHjK7/JfJNfjkwFnbBiOiMKxcGPrtnAt5Q+BuOXprmmSrIYMWMKrzn9/7EPyL85hpErEbGJRgs+1aposg+s75nAqg3HEeDYZinVNCE7WLW+r0Uf+zgR8Y7qhUHaIxSVGTqp3snoJiF4/7b+28fzanccuL6e7e9A4xIu69WnNOlGk32gYALRRZGUTiLclJL6R9+Vf+fDt73wicZELQmmufVj/ZMwA2jXi+NBjlNZq9aSV+WYwwJ5DIyAjoqi2Lr43tXwDvCYdjPUxlzk2TvTTwU/rriiG93moq8embvOeDV2SCM7pG0u5fMdj0C4oOioBv/6d55ntcv3XsOvq8YRsO/E3OdsY1c1/q1/0jd5pbu7lf/v957uXgH4I9BmhitWyonE1AGdoHjfA98wE3VZLSjdXohlgSygGImsq10YtZDGakLySTT11hanAcsMPE1BGce773UgBLF3dXuGD4GjRlqBtzz3VO+c2657cq6zRZKxUsgdMfIApZeXwAAgetW33j1OXla5EsDwLEwXC4CgJsCz62++jrLlpdA6KGFyOu/sgAAtAu848Uv7YoWLHei5d5fXj8A/xS4fvX919O8eGlEbkbRwlYBAPxt2/erT10vcb9SElkRRUtt0/fcjT+7/n7A3/TctvfkjMxesNHzrDTC4sBSioN2+N0CAPjzDdfzThVPYJ3ZABQRK6jWDRfDnxXQF/uj80HgfuTF4/gvVo48cTH02z8vAoAN13e/WbzJH6DsR37JBwHAi9pFWMAfxiMAPnzQFkWR0jLeosTB5INR6IWFAND1XbfCxVWsRjh/ka5sKvIaLIj+N3aD6g8LAOBPqpHn+Xy1qd652oJtEj1+ESqHF75b9TofKwKAsu/7gSqO6zDn7/AYAORjj6JMjB5vu8Hp662GTT18v++61b1ERU2YK/FBoh6wGzSY/2bLNdbhdE/shuu6FCigGgo8b2W2dpQdCIDd2jJr9WnPW3z99QE9EXn+Q68vAoC7gsj13njgBDcbAJp6zGCCQiky3eR6F08XAsDdVdcPb3uREj8z5RMck9/mV9dqB3Sf6y/0C3GBG3U19Opr15NFaokCWAgH4zdg2A2Ieaw5wGI6N5Lg/DKPCDJnH7P/BVhYDLyCAIjabvj22ZyeL689gZU0l2A7zjCagPVAs8NWWQJgHmciq/Z0ejxISJTxohfGf1kEAP/kR+2F9005J5em8J+VvqTM73fbOsbDSa2xSZh7TGab9DLZgC4zBE63fLh7vpC1In/bPe/5n+Ap9stXQwLYrHIChLRKkPkuR45WzPuA/ZivbIrlvfA6B6IhJHtzc50LhVjA38SR6z3FM1sd00qnu0I+hFAQIM5Le0wCJEXGDDvuORRGINOJXwAfrB/S8d3O9wpZJfLnUdt1T/HVBz9MPEIaAALpi7GCjn2AaSIpYhcbHGORA5GuHLgYopNd/2jvmxqAAhoCXqV6asoWHatAyXz2FbBRj0hSrgvzjgVgAgaHc9R4nC2IYWyMcmT4QLXoiXblvoXvFwOAH7jeN6fHPp2JPuUAAAKEbUeBx/EPOyaizDcZ75A/8KQLENNazpSNEA5SjNLD/px//88KAeAPRwC4H8HUD1oAeHY0snkfgqBqUFY9Jt5t3wYIYhKQZrD50p1rAJMJ+zlYOCj7oP9ZdBfv/2ExAERh2V3kqV/HFPq8655s3legFuSasgYPto8pYCKwEzNx7Y0MIWrH6udvWGWb92inamzt1VhdwQXoBbcc975dCAB/ElUrvkvigELGkg2/USCsKeS8zuICWNRgTYNRIzB9tT7Qy/xWmdj83eDEuFyXIKX9APAri/33FrNI0pv3qy7vb4HO7l4I73lIMoMgAUBh4nmCVICyVwYASEEt8KVBfaAXPjfevaoAcJ4xDtiDwFcrZTd5WyEA/N780bYXrOz5eWJjeqXZFmDjPCSnkqUg+w7ZlrUgWIZAEgISUqOBlLePaQMwCz6bH1YmaJK4FqG73uwtLJtSoICGgOdXvZVpBaWpcvbt9+Rxm1WNlCQYzTEGQCj9mKQMAtAfKYFMMNOj472yZsHjbcK8d029AdxdKS/3X18MAHf53ny0FwBnVgDCDmczZZ7RDxJME6Zjoj0TQQoQZ1ASBEnEl/QRA+aUkcFgOHiKBRsrWTn4DCPdOO/FpiFUBABuxYumOiItE/OnAVA7AFg9BRxIkmytw1IDxjgdlOzadygwTAbQOwTHy12bg5/vcAaTKA/Wi4fnBmGnIABuXAyC9lRHpLSnW4/cMEgCcLS+qsRjD+eaVp4A1hCYD4y3kLlRLKTCo0ZzbQLNZJAkW0oIR07mFQUmviomRIHnht2/LAiAtu+GR6YKbt4FACGP/aVxigMAA4C+hREGSF9qdWH0t34ChwXODhKz2jkZfTaTfjI4YhiAjbRsHoNwrg4AuVEOvI2CAPh73w386SUSK7stkyYqfnvNDlCDlAoMRgYpISBKDCtEjgDADBCIsX2zXew+AiHRy30Hg6csSzBeoMb9EnV1ffJSVAn8839WDAB/W/HK0fQSCUcKZ2YHgPWfYCSD1psygG2ABKBqElqdLIMWpZjlyAGam8nARIFEu0DyaevoTJzjDJT4KvQXtfPz7fB7BQCg5W/anhs8Mq0neHYxZJudgCQlYXQ1elJmAWAHRDBEURpHkeLsZsNEPyPN3mAkjZRX8t4okUF9yvaJ96Mj/3HhRj8uYm7YNAQuBtUpACCIc2Yrbfwf35P+SP1XNozHDLZUELBa6AsQFLReMNGAFY7VzaaPpjYAbf/6xIgjLHc0JeNIQmLn3tRL6SyKcOLHcTUspBo2E+SeF54SU5LtQV7l4yLgQDBSCQVpsoAg/YUdLgfSZHhYm4aSYCXPJQ2zzN0ct9LQm1+SzaeFFdo+W15sAYLW2KiMyRkUKabl4cU4ir9XFABx2S3vWSKRpkI4RDWIXCZ4m1YSCiDkAkUgGHSYrP2DSQmWUGuC5cmR1qNx19v/kkHdbMgbbXewZHr7tQv1Rv1JQNWs9TFsdHCs9ZOYkv9uu2HnZwUB8IdxxZ1aI+JMcp68b4v8AgxOSeY50Fi8tgY9YMYtBIgo5do2Ugh6vj4y/+bmyAEMF6wnw35jcKYlKFsdnaHQiIKgc4tUNRYEhw2ME3ONU0LP+4vRQ98uCoDI9Q5/g/fbrAI5+Z1kWAPVwkZr6cBgQJmEgnGGmhAwHSJIxWC5pu/oiWa3fq4+MOft9Ju9vjlwrv5qoY8ZS+Ig2qh4P25B2RC6t+2yTzX84Wrc+1hRmwYD159bZDElIOWs7GZq9nsFo60ddhipWUQod3xyoIDxo6Bjvc1ksz5sJtoS6o1zw25/2K//hL/W7PXiKAqCarl9ShkAGMBEuNl/cjw8HfffVhQAC27ZdfcDOmWhJgxxop8LCS0iBUuFHcnAwLghBPOcNAAI1Prx4AtNrb4OBI36cL3xgWF/8DN6ot7rR4G3EbTdWzu35B6Vz6ruL3gsvq+gWsg0BPygHKR7dJcm/nJpshHGAIwLSOEoBYCNhoKNMRggpHkekNZmJFrIBMmTw279mWYyMJsfdSa4eHqgD45Rzw/MJulgwfPePP/jVZMzyfBhedl2QBB2F15f1J7xo2X3vr31sNRKlwDWF7m0YGyeHRZrOAmwXJUtpClyo2DrI+aZNVEzmZLx6F3NYT3UPEhDoHFILp5u9HubR04MO904agee7y2Wy6dM3F0BWb41U3CTH3WaxViAqYe9ub0dEWI7goRxmwNEpj0HUhBILfVjvE4C28KRxhHI8JjUdsSYKRvXSpcGT9Q79ZubhgcPNA/uN+vPLDW21p8uDde73Tjww0V//tCXw9tMRX3lpvD98cZycQDc7oVusO8imYzVdkmNcyKRgMl8kpTRX4KVgjTuXlNSQuVBAhLsaNRMgHzgzPGR4x/XZaDe9bnVrG91kqS92Ys/RZ2lThxEVd91F1/+cu9ZoivVAqlZKt6NO8PCALgxCPz990yAbRNM8k4DexzftFUALNVtkAAJqqVGV/MQLARGFUqFfKzxhc3u8FPnksHI/M2xWf3kmfnNent9a5geC7th4C74blCpeO7TmKhGMLNX5nSiTrf7l4UBEHkVb98lEqQcoUMSeNzfyGz9yoYpSQEpJeAQwxEwYvmCCX+KjQL05YH/sy/F9Z/o8NdMGs1ksJkM+1vvvn+wMdh89dd6p7vttuu57arnBTtdIhKpUsoCkE73iWQvXk++VBgAf9/159z9l0iUBDuGAI3DoSTGzjQYjJpGcstn/QhMbZSxjWS14xeW22fCc2+pm2PjTCHc0wfHfe/S/I2D/3thqxt4gev7ZgP392BRA6fEk332PdVwEq53P18YAH8bue9yZ20aQQncgsgEHJMIKV8JqEgCNQAgNqZqnYMMVdaSalWcx3pzxxeGS8lz9ebAOEGSbPaTRr+x+Uzr5E2fevhMN3TjwBshsBCGF2DTP2dEuebTZXLtqXh9+OnCjlD4m/PBvPfI/ms9UxIpOchXNCkoawPsQBJ21IfN/hBIyfIgaZ+i2tArLzzgeV94oZ4MOkndHB1X7zV6STw4cwtecTK+WHVdd370CbzoPIQRzsAsZsrJbtxPCmoHmC0DXrmdAzDVBVWCDQcGEwitDHAgIDKQ5YQpMUCWxLIhSgo1tAwpYjz3TOVwGJ5bevaJetIbJM1BY9Br1gfDM0lv2G+++chvokAvVp53z1eDarSx0xbdTi8DAD+8tdVLCqqGzQR5pR2cmpl1Mk4NNXMIUKwIO+UQoSVbkHZykJQlsdYBlGKSSpvMHe/67g3lpY2lTxwbjf1m0jQ735sjD9AXm1+oLYWB9n/Xc10v6nYVrOldIroMAh9Mer16gQB4fjV8Uuwvikg4pGxtJJBKBhNg+BDdJltCKiiNgbQAgKTICEZYiNK57x7anguD5LalEfXTp7OMUkBvs64PZlrvdZ799TDcqPqBWy67vheFy8pmv9XdUwW0d3I86W8l3y4MgD8M3DD+5sytL8SCSy02UQ0Q2raVEIRMkLZ/oAWlMgiWZPv/MoVUmU0OJxpzt778zWXvjEyWmuNJEf2/JBj2l3vrR27eiLxo0S9Xyr7nL8e9FZNIcRsT7+0FOBPVcLfXHxQJwAj8WQCYoUgZgkFkIuGqNOENMpU1yWw0VQAb6wUkFEFKKNWCQ49/qXLo0IPz65+q2ePX+73Yn3vFUqM57PQ2kgu1JIy8xUrZXXRddzmIOyva8oGWyExVKXj/anhkQIP3FneK0LsCN/iGmCGZKAkHLbBgmGHJYCh/STHVAEZLQo7LXmIipBkU1hQARfJ4vXfxQpz0v/EKv/KK162uZWABem6ERWWrO/jJ82cCL3rFvV7Z810vCMJmi0kIA+nlJskfT9aHyauKA8AdOak/cw4CUghq1ZiV8Uu5LTUA5ABZhmynNVBTMN1hEx0gJQxLWrkvqrz5daurmbEOgo1sJG+ud4fdXu+247EbRO/6SrtyyPP8IArPvdEhQWwSTU6E070+gHs6wyR5fWEA/J5OwhHPXhaXCgCKBQFrJGvqLASJVSVVKTW1rwTkuIIiKOz4hASzeQmwHXPe0YlODLrdTufCyWYnbn9p7itz5TlNA+J4/QhSbfngiUUaK0x7N06PDKBfHAB/fKNf9rxUzBAl1oRWEWOuhxaQspkMswkxY5mpfOkwlOQaII0l8O7OFjuKbbPx7kZvuf3IbwadblWToIrrlv0giDvvYAhoWC9XEtLxJBkWMjecbxkIqsFMAEpcYkhBK2C70mM8F8Rkht8KmflvJTRU29YC5BqhNcYFsBiAWavPQp4bxr1saViN24HrHnJHacA9H8TJ+2EnlFJyBM1aQEune/2tboEA3B62XW9lFtxCiZajIx7DODC2kQpHtqSjUYAWk/kNGbYewWRNRkGO54qUVpyy7dWzZ1/X0nfPNfo/+3Wjux75VTeozJXdYCTV3iOg8fLTfMuRnPqXYX1EBLf+sjgAjm582C2/8TI7wFoSYNlC1lJQKYOxXYPilOAAUrKA5gvGQxgSUpAgtMCAEisCUNn29urq6w55HU0FvrcGJnqg+eA9F6Pqed8Nfd/zAy/oRdH6TwQzGVjzFLgt9orsD4fJF4oEIK4cmg2AKImSUXJ7HNqcVYGVlgKTBqGEDFZ1ocaTgpKZJQDW6KyORt2ovkOBhvVvroHo3xtZf7gRbniuV/5A1fXCOIri9SdVmpIhHUrwjKkxkr1e0r3wZ8UB8LexWzn6ajFTmNcAgVoLUEQaA8Era1IihWCntqYkJBO1FGWpAygFRVAyGw36a8thL9EUqDFodOtJoplw0vzIKrN43fO9YdSNgiAo6wPrwyCKe9248oqzq0pO7SLZJbVovWMmxgoE4M3lt4uZoigDM/E20JKOZSk7A020CkwsGQFtS6kg1facF0adZv3/afu22DaObct5/QPVZ27TiuwcdB+YksPzyuD8z3vm+xjQgIA/iCLmVoW2HIPCRdXtmLJhAe3hBT8I5YN9yrepzDOBjciACChhwJMIPhiIaLtagYOBPe10875tyJfUIAaU0FACz95N5mVFsi7AdKC8X716V9Vea6+965FSpvQqCQ4FfQCx20vAHHIRj5FXwl6g7suy5EiH1bbWSYK3NA283OG2qaX+lk5QDpiYIBBtMn7IFIlavjZOdobPamh5m53DUH92slpfz9cwSRz7gYaj5YuC4N5UP+JlIlcpI5Rx7m/5qUGoNwAy1Lt5DlbT+4PAjwP55zOyKx3HUdqPk6R/c3Dz8d8jmoc0Tq/u6PjuBCPg1chj7K3D5phh+R/TIAgBDPK9OTfd4dAIlxvLpbjJ40oYl8qO3+PULFr8OitTyqQX6/DGOzgdcqf3YDUOb56DZZPEYRRIxSQ+6prWCe5uSRI/dA8DIH+1H932EYCJ8eFAmuzyYQ3eGPT5Iea77fW5OgQ4Uh888OfOpEf9SD3GrWDknKrNxDRDDWLOP6IkQ1ggHVABIbxxSvUDEMXDm9Nu/mykI0wDMtIDAJrhgyTZGsSh3grbqDocIgf4Ovk/kwTA41l+ce6wTSCVPNzqr+DbotaNxeBUFoWvPlYN8Ndfm4ara5GA97ZNm103TFLKlBxQMQGAwQNEoKfDd3ur09WP4qZSXOAe4CgHJ4knzUHoR/raa+4h3aX5p4OevzUxNox8WJbN7MLcYQikUs+oOWAXxTEgwhtAeEH8LYzEws6oK8LFtVBtbZUJNQ2LkMz1PzDGHO7A5DPwxuGU7nAr0bEOw+vtr+LQ8VTD4Q3mKV8nwPIrAIKOwjtYinC/i0CabIyfL+PE35kYG0YAytQkh06RgC8+V4BS8JkqEgB0vYzMAO2l9erXziEXoiGPUnF+b3GT2oTY8At9RIhpNrijbjyIQRGGee2w8iEE/MWtY1e2m13heJLJkuf4YTNMepfSOe7qLsrP7nf6KvPID74tjse6988nOVZYEEpvHT7edQ9/jbt+fgMCf9ZtwdeuQ4KEWyRquIW0gJSvgxhQO7HNCCGAQdku7xQJZ/Oy1/R9YDC9BzdvBu8mvTAOg+Zf1LYd1RCygXJQoEMdJ6uLg3jQC5TexdqcW9/9Qf/8h1t+sPWTSQLATELEQVkQPCNbGP7mNLAUbBIptOspxe8gwcG0LSWLoNiDa/b4NhcmAGBYxDJ7hsUEY9crfth/vBU/TvpJDDGulbr+SX1UD+BcOMqPQ/hL11eSfk8r2fyjufz3/DFnvtur8vJKNJ9Mjg3jTD2zaIojzIwDltZGbgAffnYOeXAVNoEhNn+MuFBaMp0ZdLkBL28btmWV37EJMam4dN0PksdJOBgkWq/oftjtbt8fHteOx4UQbErpMEzC5J2teIDJYfjWSAMYUaLn8uH861rrCbJhdAgQSrh7WC7sDse1n45baMP7r9dQ8QFxJO2cKmABZWwSWXtwT3JqUEJs26QLiW1RwRivqDB8PNA9GFvfHazwMPJUuP5hM5CCEskbjvZ7g5XkvyU7ia+Uo+6kex4CMNy3AvKLYRAiABPkwxlqZnZfMOR59Kul3SHURHaX8kPcCZ9gFKQlw1TH2q0On9x+5JWEJIZl2LZBqA+xwDKe9LUCJTxKou3bSb+7uB10VXjyzwJPBpI7yoM38vv9nb8e9H1133N4d/ze4wAofC8ClFZK/9tJAjBjEsLbh64AeNNRY2gbBALXLcy6dVgAbTcV+gpfQzSsvf6OrDQYYwRe37BNJi/aM8x8eL7iX0uADPrAjaIAXldJiPMrAcsoJqRywgrk93rnVl9r1WWCVzbcsRy3f0xlXetg2ZkoAFOCmJn1Q14flZ5xF+xeygnmZpEU5dfdkYAzNsZAZOzE3fv4/gR3AbtIBLGIYHxRrmwNoDj2rh9uh7oX76iK1/y0FnnvOcKRWumHOzvNrRveqgYEfNmYv/Btg777XGwWEn+74U0UgAy1SOaQsZLwIZD7j/SJNnACNw+KSEoHkCSgiDciAe7VdxNPUSYIPK0ssZmy7Qoz509tB2Fyox+HyXVfd5ul/qL0grvVimCOZKVLlUCfDR8NHkxta4h/AQhe/HYUkfvcp6khRncnCsB/FBYxDxIE3PE4hN1RTNaewVaHWtcQQsFFRWTUQA1ggEz+9F3d9aRgJikaNretjMjZbIr4ju8348d4Xch1HQX9AN0QgT/8uYSHc+WHW42dd8Kd3/f9ZUdKRunyKKwKI9PRc7XhQFbe/PUkAfgPDUKyx+YOQQBpzwiAemfY3qjVEYDhUip2DlEBw90Qng9hEfsOY4Sa1Mhaa+bdc2skw/kbj/ybavVdnfhN3Q0WVdNznMD5+EqXCzYvlA71O2ffPZt8FSsH8VvO+O3qQQ1lV67Pi/+LVvEJCgJl06KvuQcMyUCHGILgjrzge9U6aIPIi6qnq4hIG2qH2EWUOkJ3dKCkZKYBELxHCH0nZ1vkFpOOurmyejtuxr3AW2lWlPKlbNx/5nApPUf5/tYgszN//Uv9VEohmGk4s9UD2fB97pVvTRSAf10u5swD+XABFwBWfUbdvu1n7jq0Sz+ptedmXdwCayCNIStEf+S1XhJ4QjFqGdlc1sjS0LIJWS6JUnNl68EgXt0MpAwWNVbCpFz86ZcNNi+Jo+Ot5K/fuPvfPlIl1uXcY0DPDxQEvoh415wsAP+iYdvWxYOqw7v5XexryeOZhMXxPUwD4CjooFqMGwEaKLCcg5bY3kCFwhMmJVbRmjZ5g1jELDtc+2EM11XqDUdG9z113+GOlOpuPWAVmVFbehD2v3j7wi8i5ZS4ZCxjfOIe0MeffxqV5Pz/njQAC+RAQQAVrzTxx4QYZAD0i55swx6wCwAgR2iPuoChLHrlZhxHSglBTGIW7VyW/VXWYpROsUiF4YOdSDvKk8JXKhCOFGJx9kTDk4ET6+2d3uXm8MSykoKVBWfUGx7UsvPlfYc6fzJRAF71DOtAAFxM8l3MzNbRvYEW/+rc6dPunrs7Wxg7hDATxETgi9UkCWTgCU4IsXMAwKOcbZYzJuVqsPVGHIWB70l5qeJ4qS2If3wlkJ6vwjgeDP7qz46db0iPM8EEFfMbBwHwe7+xPI9seIIACNsyiocMDcFdsACbwQiAjfzcaXjbdm0jzY6GaQCgqXD4+5uwzd2TjqAGgV3AtiUzpk2SxU3QD1binqe9rpx34GEOAMC8Z76vVKTDJAl3ZvO+w6SQgADn5187aFzbhx5/TSEVmKggYBgLBwNQRzlofCjX07q3O/usugGrH+vYQxx576Zs6JXVRHmhlJwWiW1YWcLurtkGMZngnvqrJPajSMqGbC3KMvOZbHD/wleBE6im1rHuvVUPABfBmeBMep8ODxokpxit/GzCAAB1oYf4c78p1LuY/3Xa9fzpPdgM225hzFfg9TEIzq7GuhR2jQYjWQJs2KLLHdgJ6Azn/uonN/tKKU85kvucMolqYHDrSaR0uBWHWBuvdRuccSGF8Li6Wz3ge0zJZfnzyUbAP2PTwF0PuQ+uOvrJj/gZFsNqoIsNYQmgTlgYddjgKQiETztBuUGFWSQ56z12N2e/R0mDSe9aZlU3tVKSS+4J/MjSk9ebs8cDP4x00gwfDpe8BgAjmMcb3IlSr2x+n3UvXzIXzHkEYJKCAHwt7h5MhXbTfWBub/T/UDtTzRfaBRC/hgjAXmFuDMDS40HiJ0HX4RBSBiG2YZZzuZZZFtxRyZeDbd/z7+Pe5wFCGWkqJ2jeuRrr0Ndxc+ty9RcOA2REgwup/eCnwx+cQVmt8CzxEYBJCgK2kZvaPaA0mr7dOMzHugDoQq1adQm40EgMHjuF/xN0BSX9IIgkI+csEzaB+bc7nZZJaEaoh18NwqjreCV4x03BGGFM+srRz8AthlJoPKzFUnCPSV6WU0p5n2COXd1nlS4oZtLg304WgJlz2dzMYYrIuFY/AiDfbs8NTw/rS8PZcU0QIYIH/MC9nThRSjJKKOaAtJyDCqlhzsuVv/hoEALZkyXOWENQMysYX1GieRnU8UTr5OPqVwHF/VOml7sGegCy2w9MdajfaphWY8IAZAwykznCeMchqGFY9K6Bd3p9+GwDM0E8FcbD85Zuo/KbeItMWiRLDcMuNzJGy6bCqwxmX+r5kVKexxm/xCjFcogvg8rDJ5AFRkk8W9OyAQgI6XnK8X2/9wkIDPsBOPNmedNq/KsJAwBLIPsCAEbacA0T4lodXBIt2ANGveNpHpDHX718AxCIAk8JRohlrP3KEobdIm+8ba5cnnvjsaeEs7kpTLlp0gyTkmvpaHBLbodJeHfuA0+UuWC8UWoorX0NIfBDFcLa8gIjZUwEJykIFK1WdvbQbz9eAm2k5wVMCuv52SosAVSG0SRexbPy6k20Anu+pIysAR8+tyZyrWn7jbdLf+XOvbwaNT3F8B0Z90oStgOlfDX45PPrYRgeK/iCmSXZnRKLC0rFK7Hu3fmhCuGV5ZxJ35wwAP+BGB3z2OHDhccdIO7YwrnbaW/kd6upi3wXWQL+hcIbN3b6cRAIRgxiwv5fXLPtTuule/HJufxnO1ElUDLLWIkxrn2lm7FOdDh4thI077lfoEIsuNTS95XfryRbYfxDOuVvGzliYgRMlA9T2yCvHfL2+KJpGjzqbZ49DfSoU223aqP5EePW6l33Keh+OmgIQS3DsnLZ6TNrnZyRff0CMoqXY+VJtklNSaWc7tgm9+MQqsa/+yrRF2qO4oxyx4m5hidWW7HGSTOFfZ3j5RlDTHoJvGoYOesQANw6/Go8FwpX/OlUIW+3q6CMjEYIjFnTb2/DEgiURyh8+ulcixnMAGHs7tAFXr3Ui4VEydhjlKtbaLUH35jF/nRpcH/4XsNcpgyLZIHW3d59vHQ4iYb7s5L/Qplt4lDtifLhot2yLr/wxoCvD/z8mQ2Ug9uwGUI6lDYX7lZHGcHLN3f6vqMMCCnL6HREuLCXyzogFmD19OW+BgBgI6RYMk7ODcceQ5i1UZ/vckuYAhaJ8sNS/HCg9KC39QP/T0+JQWf+ZNIAwGd6IQC40eNbDs8AE8S2gM5wo5UfojQ6XHcLBReNJFdvDBIs+BLLzgEAmbL63dKJ13CdAIJLifIAAC4II6wkm/fsXKuTy3WGe8PPAyH4ckYs3g/8JJ5P3k60juP+o9190fiUzpDsf54wAK9S61fk4ovmnbuj0kAdPz4QAvfM7hB18bFP1K0eg0gAOhD3I8mpZRuk1cpdupD94K+xiyDtIPrFtmSMCEoIpSYrbSXomdl5/Kte1BTcMako6a4fx3GSPIxDnSyGvT/eLwdQYpGfTBqActbOXXzxnYe4JAvYQFcDdbiaP1lLzfJ50ISBMdcvY730y50kDgQrZSEByK0ZLzuzT3ahnjiqnSwlXDDTJKaRYYKhMQpah8LeheSaEg4z0UyFCnE37Mt+iE4Sf58qULUsYvDJsmFsGbAhZT08ABCAtEiO33wP6ODu8ElhF0xy6IuouWcKhWU0TS31BoHyPNOga8CDigZ7G6cIoaCI1ObLzUaJkjIxTBMrpr6+GSZ65XJUaUiOG4PsKx2HQdKTgziJtd/dtzPnpwixShMHgFs5m7woAjbcdEhUwc2DUwLbYgrDvdoQeyTBK3xmrjrfRqPvy6uBL2VaHbZbPy3TP+yOjYQonNVDkSHcJITJkoS0wO+FvSj8WHtS8DLnzPH8MO4n/cfzD1AiCPz95ZoSMVpyomQQBQE+vUao+wIAhvDx8W3aox+YuDdbq7dr2N6QT238x7CR5OogUrLBLAI54Pu/oiwL5x38c3iI4Ba2RQgziWnKGRmoGG2TSfL/fC9DTeEIx9dhr9dvJo9PhFEYBLq5LztzqbXwIwBgGpZtvigC0AeM6jeOhN1wMRCWqu0N3AdHveIfoa0hX2/GsRAZYtjTxc60mWmWNnNYR0UAoKfMl0U+UyQm4Y5ywDECvR/3jzmSMybhCXTS9GH5J7/0+7oXyOa+CCg45IlRmiwZRD6cI0bmRXwYXmGsgeXzaGIHBNbhENzFESrVGqiVn1axVPxlHKgSI8S27NY0mTZax7dzY8oMa+hzf1OwGcO0haNV3E0eDBaGNUcwTnlULukw1nAADOKXktAPVaBO7gPAoy1LTh6AaYPw4YvY4O64ZQDnTbZT6yRapmv5eiHtpvzojovNQlcGgcNoxqR2J2ezjtGyppJpN00h8NfP1iqBQ03GPR/2wMGtDbd+XDc4Z8iPddjX/RNqsL2YBIHuKh84xHMCzbJlE/GvJg1AhrSMTPvFoyx3x74FLI+gMlDDmcLD2oaLHplX7mCzMDS2+oozMVW0cnt2uQV6QFaBMbQ6vp0RYmQvo5QSnpP0IDby9RORkEJyx/OU1rArlrcv/dVioLVyVPPk85pgrUys6vKvJw6AyHD5IgDcsS6EtXLMfTAQXFBG0diK6dArd9BH6X6RaE9QyyR27glwjJbdMpljLWCVe3S7AKwgCIM43EqKQ/hXnIoUFYxKRwU6DP1B+MnL8r9D+FdiqRZPVr///vmlN017bWHiAPzHssXYrHuE+fYbmAqiV2boYgh0QBirwSmP2+NLd9Jc6Wk/UpIyw8p1OtOEdnIWPS69HTgMXNw9Rjlhtd4qLWMU5d+PlccdvqzgAQDCOLr+2cMLkeMFEBHz689LgleWbXvSeggKApSY/Cg3jTzbTQ2TOEoNrXPuEjbJohoC1O7sHbcAe8DTWDmSEmYCFzCKuY5BTO491Dc2R3NKn42G5yEUqa04CST6pbnjqPl4CwCId46dmI64Uk5pWZ18/ktcpUut7KQBwAI5scxjR7ppBOWvXVjqQJF34Xhv59s4DxItMm/cSVusfh8HihEiAIDWdPHi3rJdznjzKtm6n0NhAYoJ41wTU8S1rcBXDTEjMlIFSifwhFt/cWX6fslRUYk77X1s+FzWKi9PHIBXR5LQEZ50OAzSgfGQlI18B03COFABAMDw+DDSgTAJNXKdlkFbOWqSEw+9RtPr/VXahP/1CH5MK56sxEpKwaVgMnCCJAwT7euHxtKdwFPeZmO+vY8NLxRbFrLhiQsCnczR7l51n6Vj4vBjooHzTH2pOjoFC9dSAPK/TLQjGGFle/qJXezYhpXhAvazoJLs5jtztXFIVfH4WByEEQBgSikVzghEEnw/flS9ckt6XMqysx+AHJnJ/ggALLQ61uWj3vuMg6LH9+fgeTgLawCZMAIAi+KVuOIxkUbAk2m5Doo7aZTkYl9Hl4650GY6Gqif9pWcWNWBJ7nJOFMVR/thAgiE/Z/WT0mskAm6b75R/gNqPZnBOWqTFgQ6WfOIAOD8kN18GgIFF9Qcd6PwDN7oWe32nVQseCnWkSxmpWH86omhNp4YJpESV7jj/K6GTZRpobGKtvKB1kEXCwUcByXHsU56se5dhoYLR2TuMSEq+/wh79lW8YOf/QgAfGbRc0e+87a+i13iaJyAg9ldctPZuikAZ6pzZ3eCQO6ZJQIhYMm9FrMJm/cCLIveGc/YwKVyhU31Eu0rz0FHQMkJEt0M9CBs3qpe8bu+WYYAKB3fB4AJYqo5eQB+s2BkyYJ7xFs+hmcwJwZeBBGNxHAdjZRu7cGd1FN0aRAqaWXKC7bVMlknxxk9v6ikVo9kA5WxcUH9g8GgH36hAs8rSXmupPyomegwTrZna+e7Djte5mXK9vV0VzM525j5yeQBKBdJaeGIAZDmAW5K7pAHb9Q25rA2sPQYI2CuvjKAuC5myhZkweZ/b3XW5HJJye2+1xC6DQDURwB8HsXaX24otSx4qez5WgMH0npwoT4VdZkwF0tFxkr7AGB2lnyBAEyaDxeZKB/tttQ6rv86roDUw+mCZa6K41eXbtwp5CE9uJ3orgAyRKAiYDhQFyFM3vZUd6UhXz+GyeDoGIBJerrrSC7LXEivsRWEIewAt/9QfT8uiYwkwmENMf/8/RIFaU8vTE2aDKJDIJuh7Ahj/rFhOGVD+fGgfSyT1oc4LuDKDXT5V2tbSRQJk1EDpHZS3HiPmrjCS961BpO/q3/dZVdd6qtKVynp/VZJ5ag+HoFBeG/4WdAoMSnmTSoZ2bcE6o3cbIsjAJPmw0aGmUcCYDRicXSOjQZfrefXARYEoJpPAdDaM8uQArWM+WlonTYom488VRKC3hmlQGg+PNPvqka34jV44Ei1pcMkjHUyu+RvckkdTk6xMmVT+wAo2+u2+a8mD0DmlIn/tRcDUP92wOaoyTmPr49q0VUAAI7B071eHCjJGDDB7Ca78P4aZ6D3O/dvC3a8UciPd9VhIQkcr8wXywJ75m7qKAni3uX68W5DcqvMyllBGPPc/HNjxBZAaaI/QgRM8Wwxs370ixZxrnAdfpAapPYhtEfcwSLp6Z04DqRHmW201ors4vsGYaKklFQyS77O7DB+VpT0mONxHJ4RDvwwiYO7w58H3nTJgfgpixIzi919jdPl7Jo9cTaMEWCa2DJwZADS6acAQ9pVVsdJCm0EAP7q0mqiIyWocc5uEWKsEUKxFOhUPGGS48A3qmMAfqFU2jOonECF24lOQmgljBveHj/OTXaLccayz29L+aVyzmhhcXziggArNY4AAIqiX98OhS7B0bVkeVTG557e+HTU253EOpBmebqTe8L/W+uWIaaYkjL2OCfmW246VQIj5kok4WENVYl9rWEB6HvVn29mWIZn7h0XpmUKarHnJ8hcKdstOnk2jC0DTMgjAJAfA1BNoajuFnbreB7gmfj0RkqGrsK83CCgjNpQbCE9VioSKhdZV4rXWZFcTOeQjUKghFY5samUH+jV0PfDC0uaO5SVLSpzZWKaZG0Zsu3vs+Gi0UJ3wMQf6JlYsP7ohR6hb82zI/84jhBDgwCOjvsAAUhHvelNRzJm2jRHLwnulTlzuk6FU9YymIu0aYTlU59LgcMztB82ta8fDU/5DI3SGUZPLRisLIzyPq/8AmjqEyeD6BBQxYVDLBLP3SHtYhMB8J9xQlhNTZQ/HwHwdBAHGgn+mt1qkXtZm6+UGiWvG3FKLDq/DgAgfUYqFQnpOU4Cbx/H2k8u1wJRFjyTEaLI//sMcY6Xnx/6nn/ftG2KAEycD0vDsA4F4NvhRvlqqokPQRdLYwGDGmLjwzEAq2FcUcIUdqe4dmKT0qlGSZQcpUWG2fZxKCHjZD4E1D3lcUf52sdmcu1vD7/y0FtCM2TBNIgxw5cbC89/g/exqjRxNjyaIUCtPz30YhP3W8MIYDHqIRgti6q7Xpvb/SWQIbTzwyYY64a5yeyOffy6TYkj3l6UjsMEsT8jb6VtZvkUuCuxLCmt9fZAhzr8uOZ7Dc4YNQ34yeZI2Zv66+dYWf6D98jCqclTAXTMs+lDBQGk8d9VBMYwQFffEKkBzF9+ZXRlxIc70VbkeI5ctnNrxHvPIGVClRKS0mKLzHz63atrPtdO4MeR1kHg+8OnXc6EQZm5xowstUxWevPy8z7BGbK2NvWzHwOAClvIXDzKAhjFImb9+BnBGLKbioND9yVkg1AguxkvatWVjBi2dfyuRSxCuBN6UlBqGab47tU9hZk4DiP/3VDp85/UK+gTJ2UKuYNBLFNkmB4+vwdkjLW1zI8BwG/Qp7xwGAD75ltjO+Vonh4yvPbc2Ruf4P/iK4NerAMlJOnYnak3LVsyLlcc6cllI2eQVOZEEEaq8Il3wx3dj4NIz37eZekKsIoMdoEsmTYbzr7RLgCrySe/BHCmHjc33zwqAJiejP2hODMHt8Ja/myaCMFdCv1E+54QdNrOTf35WouxqbMeWgepYRB6/tgYADAOTsPcgfP9pPtA6+bd+vkGEyadMSBOmE2FTQif2jfqtExsU/4YAPxmXlC+fOTr7r5tqMQhiS5i8eyNUSZ4NgnDOPAkM4sgixdb9oxp8uZ9trlgkjWLVD4G8NBqAm6fVfCJnb6UbA22YNL+5xGThAnLoISSIjGtTJa8+cfu87Vh65zNJs+FcMK4YznL7mFpwP5wGF004oLEg2nhtccIQPXsztYmRIAUJsnl6ELnV1kzIyrYD2oXLWKxP1RH87EAAL1yt52/0ky6wujUS5KXOS5+AhBYlgm/Ld7dp0YuW8aPBMDPF0qi4f7Drh392j2bgnPm2k66BF4foNaLvtesZZ9fBrmdmuK6ENyE99+06OY34fNVt9KLfgXbCD6nupxjqmQTQkzLYCY5ZznH9p3FC4ZhjOSAifNhzxPyEAAKB15NXM2n8VG7fePv08sgk94g1JFk1Mq1yHKnY5EMVx7j2E7fIrKy/k37V7cb9sJzaZ35cyUZGsjYtG0S3AfX6Jrz031urdrCwtr0xKnAiA97cpPjKx39wVrvNyNGqjV9479Vq6j2JoNmoKWgsASOl23oGaKcR4JgGx1h5uvHxq+V/9L3gzjuLbdd90nopQFg2tQgWQNnEBkzF/ab1ZYu5rKzCz8KAFMllpXr/yAAqlgix9DAXw/P9G5cH+ZP5q8O+oMeNtFT0jKmyiiJ8bOOI0xqYHgX9cffzANCx3jk9+7NVv8/c28CG8dx7on/ARn3We2oWgwlB9X/VdN64ysH7uPd92kD9A6gBYgarL/SRKSDJvKqXMlQgQTQZuC3EChku1xKDwNnD0Oz4gAcQIqNsWzIWHC29XrGkACIGKZ7Ar/DAufNzIMFyAfkwNtFyjJFXRwSbeyX+L66fvyu36++qnpMNAAYp5hgUsBjCFuFkXsV5eeNHDCfCQB/epEyNhwAn268OzZ7ztyqfHLiUvVsulGczsMOOr1IawY0h4qv5xwHKSGVB8giFnLrI1duFcG5z9eCKGlH5ebluRdnQGHfKUDBcoljasDoxdl7pN/nj1JCMgDA8GElaPHgcB6wQQzSxnh9duSbvdV9aQicXEh6zdDMSGCHzJwarSHKYMrDFJExglzMN+Z/5x578+1mrxMF7TDQb37UBo4BpVagLvIQYXC7Cbyx6Q3rT1IQz/8sEw/4k0hhuXc4ANaFjY1HZ4xHL3Z/YUYeXmwlcW9NKyYtZ+o94iCKmeacImRxhIU9Y/wsf7Kz7+1WHLW0Vqr8g7kRvzCGKSBCqIOxa6uD975HzdCELNiweXVPAX9h+4u/sXHnnxmazq/LNvl/qHR/bX77ZNPQQd3g+Ki1f94hgBAIadZfQJY/iU0vmKb95vtv93vhmk6tdHnuo5DCGIXCND0B1PUmH8/P3guAT4hFlgwbzgAArbR/ZPtNwK3nBQ0RmN2oksfPdl4/aZJ7P+lFTd0QtODiH9dyNqJMCBMCFqEIYNL0gnNPlX/9zlq4FuhQr6jy43P7AcBFhSXqQAGLb93nSsW3LILdb2QDgJKKHZndfg00fn/Hlacn2smaCYqXB0k/CrViHCE+XyeEYA4cKEGo4GGOSr8xEdAMPnwn0o1ALn8m+P6f549roNSimCCK5NG0wp5/4V5vjtuWlQkZNIKADvn2JgQ235d965399cmvNPuZgdhXO804ipoNv0gJP1UvOIgCB8/QYgth4FOvmYcHVsLk7ShIzdfK5/6n+Sc8j2JawMRip/Lp+lt7N9S3O0fFMXKyAkCFDfyL4XrhNPTNXZKGC5vO+Pu9wV7zzmAzSuJYN3Rx2lVX6jmC5oEZB7AQog7AzEspFboQhZ0LkQ506CsJfmnf+IkGgiKhBde9mPr/ki6eu3trPo+Rg+1HMwHge0Gk+PQwAOQ3xLGJ23sl7wSrLxmG9GLSTEwMCAuvstx1xypywcGyKEWMAF14KZ8OVJ3tNKdCLcMGNAqMiZ+nGV44HsL7JE/bq6Vlpu4Vd/DkKShlBMAxX8CpYQCYMLNSG1qxaYnTFSx0/nHWABE3k2akubTwMqvXxhBlIIwcgCgFihf2js9dT9rNcqmsAml6JA5cppe1ahgFa0mnz9IvKct97x7fcpJbjjv5h5kA8MhUoPmpYYjAeoCaGF3vBEz2W+z905wpA71OM4q04JTKlVz9MVQCBhYqEIQtYGwhLfFvnw2KkTbSYeQJxl08cnR87hP1itbhvvz4UgOjkSMG462Yc4oQy4IMmlcGYunPD1EFTNSbbzLS0C1CHMfXjHT6cifpxZGWHPHoskMQZYgBRpaHXA5Mtw7m81NNP9JahFypeUYZYHc+3WKUPsq9O5vGP8V8cuMWmdkt54YJIMgGgD2HFFN8mBBYv0TeFEJzYMTYRFn2zxli3EoJcdgWHEnvnxzXQQjAaHkI4SIw3TmXDkcEpXa7MaK0Bs4lAHdLb5qRK6MwfbTCkYXuGY2vUsexMmHDRhFp+FINVQQ2Hkj+6pnYualmZ6/Ru8pxP9btwIRAw0mNAqYI70c2xkKlAIy/tSaDhppiyyUOwGAaKJya35ihnV3SI4jisXv2ZCc8itB7GQGwvxEJPZwgkM9vvJG84azpozp64aV1UagZRe1SKCibmR/NGQ9gFFueTRgIEfRvjD+mtBJF6UsODBgA9UYA9Kh5x2Qp9BAvQOmeX3J8HiHbywoAHUp5bjgANi7auw3H52FzY2sgMsJ4KJhovmHVbBsVBUeMUuzbPAXg3OGekHJZMik4MCoYR5SyMSbmnx7/SHMKlMK9aoAZFXdsOp8RAH8eGV46PpylE2ObLjx8ud1clwXfiqLQDEkwGbwxWsMEAwBFDjL+LnX/xidrRS0Uw4wJRhlj0xQsG3ugJQ0KLnY5Ykfm8lv6QGOvzFPiZgGAsT81LyCfGxIAE/838l96wIlo/ZRX/kDT7PgpJUSw4ow6Y64HgCga4aCYbJ6deypcFkJ4hAsBgBkgxgkFbHuMC4t6dOx8yYgA5rTlFjY8jQskEzZsBIHFBosOPtDh7/4zJ/PpL7cr4/H2utgxEa1fgaH9kkzWnJyzH1Hw5ilVAILpYO1kIoSA+WksgAsssMcwYHBhDDAGB1OOx07d+7/4GbKwbW4Vz4QMrIV+ee+DFMAt3r/xU9/0mfnPo/dNe3A8FlFZh6EuyjY4joMQhdR8SE0G+o3jsdknsz2OGXDMGQU6TcEBDnQUWQzGqLw3L5/77Cj9qPiNjELgO+1QRXsfFO93XzWbkqHNfdrUzLqQ/3YjMM9F6OWiPnbVcZCL7RHGih5gDiwIPrwgGOeAMKOYM8DAkF2gwsI2hSU6Sry3+D1rgBmPsMaWzLnhTELgO80o1KaKDcMGxmc3VYHj0dX1yckDgWgEYRhEelnPOwRhhOyLno/hmuJC6w9KjDMGbxYR58AByXnMbAa28RGLusRj7NR9gvCQB4VsADAh0IxKwS/Gh7b8bQAuBO9vXHurSlrHoW6GrBc5joNTQ5QJbnMhpL58lfucoyXA84zxUWEjAbzg4uJ6NCDmocn7KFN5XKAFmR0AYSkaGgBzCOjLEFlYj4D8y22htW6n/w/EpTccYmPkuj6ALYByLIW/3vlgH4FtCw7SA0Y5IRQxD2P4FeVwv35srjid4vRoRgB8T4cr5X8cGoDb2l3++GA9AvJvaykDWQ6iSAbt/+kQFwqXXd/nAWdXJQjGODBAGEY4ZwJEoTjPAYPNMADz+H4L8yv3u0tRIrx3f1YAPFJqB8GpnYfA3BPBaxuMQBYjHUTNWGh5aeA4qDCCMdBiyRdXR0AAcBijlodAAOPcPzoGlBeAYeSdFxT8U17pyP3SsI9yBfaHWXnA1Fo53or9EOz4cLTRRRxuTLZLjSjpyUDJS6/nEEEeRsyDZca4YMsAlCKKITVDDY7SFACfY0YR8gHbp6S6LyOZ8N6zPJwVAHsea+vk8lAAzN4xw9n/YHY9BQSRDlQYtrUWQet/WgQd8zCygQNwjNazPUWIUtdjwIT58wgDZXyeMg6S8c/DU3P38bVXPSqw93tZAfBUshxfHQqAG5u/7rHWS+sR8HYSq0g0G4Eq6ehShTpHEbVtxLjiHgcfYwSOhzHCIwwYZTbnDKjLlWd7nM7zyevJfXcnTkwyjs3ecEZ0MApMId+hHW7NfLoep1MBD0XU9EPJRSlJpq3pJUCIh1xwTLGHASMySjFlY1ww8DBTgAu8iDkGmzIo7bv/xYbHvWnBTmUHQDMsh0MAcOdxns8WL24A0eBcQiniWikZds4WRgjCnv3G1SKATUyku7RAEAJaBE4Z9+DvOSUFKQW2mQ9Yml2D+9jLHuMjlzMDYORM1Fy7scMUMPHN/pGN2ceY80mz41lsaKlX37ABgJLvS4sx7xAIhCh2jyJCEcbUsD8qznGPFGyfc5sDgPj1Ax4ZKwDg7AD40yhOonPDJ8F1zJ7r9jawu7DSEDOR4IwppYLBGxQhBJQJgRhiVIy6BURGMR1DQCE1ZtggUK8IQCmjLvP8+wPwCRRsZDbHMxIE2gtxc3gANuyt6gcbZ8iORe1yCJxDUQhV7i4WsIeAex6mtIAAOYggSui0y5cKSniCCw8Aey5nfIQzigW+DxFaZ5ucsrEfZuYBv7+YhK2DOwNg4vuDI7d2SBvlwAMw8k5DNCvGA+YxpQwwoi5FCBBGQB0PKDAGnAHnCvs2A+CsCEyIy+P3tQuUF0bM5nhGZCCO40sGgOEt/2z3zI2NbqCn9QznAopS8kg2exayOUZUMTP7ZbQBjChQxy5gsAXjDAlsUJCcCb58iBfV4/d/AvotD9GsOmEjCPTj2MjaO7G3u7cG259slxkTmAHjQivWuQYFkJTa85hgii2EHGpRoIRaGAOAEMBHOLCCZJwKYLx85AEwHwLqZsWGjQd0FqPqCzta/8kfdQ0RNCkgCLkQnFMmi4yXLi1SamGGTSqkXiGHLMchpGhhdxp/zIAKzsGjPhsTwAEzPvmg3cn8iIfd0qPZAXAp6l96aUcAHB+c2fjwE/0kFpKD0EL5AGK1csolroeQgxCyrJpjWaOEEGRZwCgAExwLIniRljRnNpfmRvX7G6MUJrMEoNNcNaLe0Db3ZOU3+Y12qNdMGu2GFDoITCVoniGI0IJl+TbgAiLIHKk3vYAFIBBjAjzgDBSXwAUXwcEH/efz0kOonB0A3ytXeqvv53fSBl+q7t348qf6C+2UC3IhfWEAON3H3LYQImSMohxQZBWWxhB2saDAGQeGWWp+URgNXRQfTEbzmo6A+MPsADjWOWs2+Ie3jytvbLjuxOleEpdD/fNguSgUCHH6LEIIw0eua9kWsZHlIGwhigBwkTOTLXxP+kXGJSjB5ZEHi08XbcAZAvDIi0mvvyNB4MnKrfHX5wbxoN/UKgwTpYFLNriGCsj2iGl8CxZ2csQhCMABapZPha1AMCaYkKCoKn/6YEfzwebmVvGM7Lvf7PT7v9xJDbhUffzWzo25WjuKdVQKfc2VZt03qIUFmkcWAWwhp24aAYu6pvkDxTiTgnKmgPsguH6IGvGq9pjIjAwaQWBxNX59Bx7wSeV/fvn8R6Xa6g3iOI7aOtJCyEtnr1kYGFgWJshzLFJDNqXUtjjGCgTjXDImfAFMeqz42vgD7UQDc/ZehgA8mSRVs5Rh7bHKLTH55OluddAfJK0UgSBSIpSri21CELI8DDniWsQx9RAYxgyDEJzZCkBzX4KUvlh4SBv6keYX2cUMAdjfXKyuDL/+51YXH7/VDnQH3e5g0OnHvThJEQhKlcopgoXrWBQT4niWtd4RFSijniiafkHYomiDb16UkMsP8b5XVBHE5SwBqFRX9eywYmh6aHojbszvpZZCkCRxCkAYNIJKtYAxIIeARSyCCtilyLNNV8iQAOCCF0VRAPjSZ1P//hDC8VNhM/yzDAH488HAsPqhzBDBWxFgYqFSrVQGJgqacTMKhF49IxHG2HIt6jgutiliyJAhI4mJZQFMKO4rGBOK6uBh1/l9JvwR+cMMAfjTs0knfvOh1HeLnegu3gJt4lLFWBoEA3N4sqlk6gFACAaLONRBlk0KBeRiRG3wqGC+RiYPXBSMMqlm9j2Mcn7uAdbmVvGs7E+q/V5naD78eeWDLxlB5ZYZBJKkGUad1TOIuAghjAkiFiLIqCE2uDalYlJwuSwYSP4rEGFzX/5h0XeBMyG/kd3693y7Uh10hwTAPCrx0pc/oS8B6KYA9JNOI+h0z5pZaRP9LjYcyHWITbDnIgpMiA8lF74UCqQs/+Sh688/wTg2W6PZCQLdbrWyd1giWFn8sn/7ZuUOF2gFQdJZQwR71igyYbCEHLuAKGGAXUBsWUnNgAuhmCifMjH2ENtv0eJMlgB8e7BYGQwnCJje55/G70gBxgamEpg60D0LDnWxQxC3cpgSCxPHZawIgnHbV1IIKjVXwcW58YfbJAJ75tEsAWilOXxIQeDk6cqX53ufrdw288RwpxPpcves5bgECEWmGaRuzkWOzTAg4JhxLcUUElIFl2e3U30lZTzIFIDTg4qhNUNY/uOKEQPX7beVr2yw3g5FM5UEWw7JYUIRLiBMz1seZpRzDxAIKUrC4x6Lrt7YzvrntAdc/2GGAHzvdKU6JADjj5kI2JoCKlVDiuKWKlWrloNRzkLYsRzTCVMPKAaWWpFrJQT4onjtze2l2xXEscgUgB9VV7u/Hk4KWa3sva2KfLX+bgpAL2nK0uobtG4u6XLdHMEuOoRcexooBRs8MaaXhc/8UrzNwvNqyDlezhKAR76/Wln9t6Ea4U9MBGxNAQYCEwArspj2AQ4xiqBlYcdB1MaYAVg2Zp4ntZDMY2kDsL1oOxzMMzBcKDPb8zv9SnUoQSC9NeJ2A39h8/r7ST8OrlwtXrqGph3sFOh5jEePGjpg/crzPOCcCe0zKWWwb7vs48QKADcvTmcpCFQqrw9FBLuVx++VAtI2KImbTIx0rlmkQBxSsIAgQiwE+DxQnwp7XkgmVFFdzm+745hnkr6XLQDpxw8lCPy28sbs7WywuQb0y3EcPcGLC28gsx9Eai5CDjlE0K8sly27HIAVhTD76NvuO/IvLzMGlzMF4ED68W8M1wb/5va57spX1k0GcRhe1pRdahMLOaNLjltAyHJwDRyKwTNyABsp8XkZbZ99vrLCQGSbA/anH39mqDa4uvdLD37nqwCoVFNWGQbzK1BsrRQsglDOsVzLRY5XH2UMgLuIATDFfflP2883nzU4V4YNZ2d/nn7+2dntf9KTlf85ezsdbgJgkETtsHzIZ3zhDKUYEUSOUgth7CCHUMCYImF73Lwf8MLs9uOtwfws5QAjCJjP/3SI/ZDbUsj4q93NXUC7EZXDSQV2a81yf3B9NOcWUIFZhRpyRymfR6gAIIqsKIcRoN5RjJeMHJCd/b75/HND7IdUb/cwL1c2M6G4rUtXFAfR+hChF57LnXeOugWbEIpcaoFHGcaAhdBDREAKgCfFZIZk0PDhSmrbB+Cxr0pGflMX0E+pcBoB0gewkzUwHPDnSwX8Y7yECCaQ8whzwQYkysudvcPwTskzZcNmYt748cHtq8GVl2578Pe/ogH9KI7asryfc8rSYWmOsFO33AIldSAOJQ7io1i4XpEJWJkdAoAXGVMLGXuAAWDf+DbtrUr1xu100P0qAqozSSj1VSUA2OAaARhzHDRmFamDRi3TGHPPY7QkOA1+Mz4MALYQzUczBeDbq5XtCgKzRg3+qmt85fb6V6uXWj0VhMsNAWC3Vp5C3nknN+IWwOyNIMcFatkIeJEKcWwo+emYaKvwD7MFwBC6/7rd1rxrsLqrC+ieqcZxEjYP+BwwO72GhWMh57wFNkMEWQQsF2FCwYiBQ82lTjTM4GGmABhBYPuKyIXK4uymlvBLWxz04nY5CLXigOHSGjIkILeEcWkFRimihY8IRcjDionJ/zMU876qJtXV38sWALOOX2/ze35U+eVmUnSbB68mSbISLCsJHEZaH2J+FI4iF6a+tVRMMHamnR8DKjCPAZx+fCgA1kpq5nK2HvCIyeX/tt02uHLk7hTQrVRbSaxlIAU3OaBzhmLs/BKNQZheLXEd/9hxEQGggjEqhpvNP/FBQ8pfZtkHGUEgXcMvt6sGn/3q2uunNrzfeMBMM24EOpgU3BY8TYKoALWxURf/kzlkeOiohYAAxRyJEfGT8WHs2YbU0f8zABgN/J82s8LbGSBK2k0lrral8Isgm9dcxGjdwfTvZ9P97WUPnWfER5jxZRbODgdAO5CtfzIAZCwIvL7NoYjKC5sLwoZ1z1aNEhJqrTgqMmrHH1Kw6jkCj51LcXpxHhHEqcKIicnSb4YD4JWV/aqUKRseShD4phEDv7Sf3moBUh6UBkAU6XhSKKkYKs58OAb1JYtg32xtXXRMASQes4Cx4NPxoeyny1KW/nfGAPzVdgE4sXpbDDQ36d5ugxeimSiMw4YSAhgwcXqN5mpkyRr599n8R2tezZAAB4Axt3FlfDj7h4YuzfwwYwC2LQh8Vqns/aoLOL2+etMGd9qJTqmwLyTzGZfs0hlasyzHOrB3/HAJF0gBEYRME3SoZGYih7ELDRaWDRvO0v7E5LFtiFQnv78+GbhVEO8mZ5tJJBslIZRglAN01+gScabJ5I3xt5Zdx3IpdsDDAGJYB8i/o4VsPZqxB2xXEHi2a8TAuwTxpNtvNttxpEtK+YyBx2auUesicpwr4xMlghyCRykCBAJKj48PaU/Jku5kSgaHEAQudBcMabyTCpv5qCRO4ji8KpjSWADwY9cQcizHfmn8eINMFxA6CgAYGL8y/Cwa14YNZ2vbEwTMROwm9fxwt7u+IbxYHQwW2wvNSCulJQfFQCZvFMgYoAMH594hLrIoRZQiwDBjMsBwNqWUXng0awAMH344R3252tk0VP2xSRxm+UYKKrWDSGupVVFoAZMLHx6tO4iw2ZOCUOJQBAUKDhYfjA9tZb/RSAwAmQsCLzw8HKvVr9xk9ql1AKqDTm/Qj9IkoMNJLaRWTNBi61oNIQv/ZvblectCDkaEYuryY8OfzMk3ZCizlQMMHTSCwN8/NAJWO5c3fdnpdRK02O10Bv1+f6YT6mLImRBMYJl8q4ZqTvGF/FPIcawcJhanLpX/NPxQ/sSKUCsrmQNgFvNQlv5JdfDapopQ6ayTwNVOtRP3W22tpVLmcTXTDb9/cAKPkqkbJ5VFLGRRTKjl4RnTQwxph3tFWbqaOQA/2oYikn8sHmzqFf7L6bi7aCYiuqc7SdKOglDq1EohByFTzYg4zsXZl71CHSGCMAI6DR+MD2+vXhN6yuwNZy8IPEypPDFINs2Um13hbrW/mlR60aCZRM0gVI0UAGU0QXYxBYDg18YPoIJTQzkjDlP64k6Opj0XC6kMGcyeDz9MEfm8PzhyZxE0ttYZDFq9lWY5aDwpG4EWDeCYhaMOcffvPbliWQ6x6KiFMMYpKkNb/niooGTkgKz5cLfyvx42GxwlNzax1Eo3juNu5Wwy6Cx2ynHYfK8kVaSUZ/q9Y790HMLmXikQTHLTLsIu4AP7dgLA8w2pipczB+CxaqX7+kMi4Jflf9oUAb9T6fZ7ndXuYHFQ7l+TM6FWuhQof70ZFtE1WkBX5vZ7jpkWH7OwBcwoYcPbJ7GS5Z9lDsCBbvVhZyaeXGsd2dwULp6urvYrSb/VjAYry1NBEAaq3FZCYbBVs+eQsSPPXUPIWiL8UAGukwNHdgLA7Oeaq8wBMILAYPBgAE4eU2s37tBGu6kS0h5UO53eQqLM9TkNmf5fYQHUDi46TvHG56eI+60aGc3Vc9f5/M4uqfhtexmOZcyGjSBQHVTPPPALP37jjgj4rJr0OoNKq9dv9ldmmu0gKYZhuCLF9IgHnn1JTde88WJhyRl9lnCSox57bXxHdkFK1TKj4lkLAoPu2QdpVXO/Ey9samPmvllNkrQFSKrdQb83iKM4ke1gRUkhBBeULXzg1N5/9jKyLPSqRQkidOrgzgB4SkpuyGDG9vuG1px7UAQ047XZTe1J6vjd1UG3v1oNO82VVjsszkShLmteFBzoSPkD/MS+3xacpQIazVFccNnVna0//1hJyVbmAOz5TqW6+iBFJP9Je/L9zQGx2OqUF7pJ59La2U436YXlqGyukVqXhAwAl8dGTgpKCOLW0zWM3OL7OwTgRVFiZlQ8az5c7Rqm9wA1WCYHNztmslrttJKUQiSDfjiYaQciDsIwZNKXnAMr++TK8csFMylnWw6mTmnv+M5sRksVZg/At/vdwYMUkRP9O6Za8gu62hn0Kpcq3d5grZy0m+81g3KkjBzAfAZ4pj322gXs5Cxn1OWnkOWonV5UFM20G+0/zB6A1ZVqd98D2uB2azOTO7724mIvLYSrlf6ZwWq3FzQhCIJQh1ozDhxwfHXqTUXT5ROrlqshCr/eIQATbSF0I2sAjCDQGTxAEMiX9Ad3jO7poK9Xu2karPZ6ZwdRP9ofNts6DIXSvk0pNFf84xcLZlC+VhutE/SEAXdHAPRFIDNnw4YPx4Pu/QH4uD3zg83t2WPllf7pdMQ8jZuVfpxq4qLcjOKmDiUXAizKguDfn7Qsp+YsOYTUlyz7053e1BULHV7+vTRPZ82Hk373F/d1gAOllU/vqIlqvtXqpylwcKaSnO2tJaWgGRpRMOSKA0Z2ufmtBrFqpE7GOHIQvjK+Q3turaxEyoafydoDvtnud+8rCDx7tXTHDRMvJz+5cqjdL692O9VBMgjDOOirKA6lNlWQU4qD5OVp4lzPIeI4tSUy8sJOc+Cz17TUmcsBRhDodBb/7b6jsX548I6rQ8rLdrkTxWkRTEXRQSsorSTtclTSWgrhAacQvD6SrtypWSkncA5ZUzfGd2gvN9SkvPzMnmxdwAgCV1u9+wEwEYsrd6ZEtfLici9ZXZ8OvZR02p12s1eOw5LUvuJAqf2j9y8vjeYOo6ffKiCoo8vjO7Wf+pofuPhM5i6w58l+MvVP9+0CZ/be8RJ8W8eyMVNNJdHupWo/SXpx3Ow1o8g4AOccWez0ocLSD2rXiYNqyDk39tKOAfhPK0rpnz3zzJ6MfWDPgf7Z0gf3cYCSvFPM+qwRBEUVxoNqtbra6yedXjMOkqaOtBKcA6cWvjaVqxXqRhF3HKc+dW7HAHzeECr6oUmCe7L1gP3VcO3D2Xuf2PhQb85hs/nHloNgZSVe7aWdUKeTJJ1Ov98Om+041D6A4QL2P12r55xajhywcjnr+MXZHQNwwQ/5lGHDZv1Z2p8vhk11bwAONO4c7Z3QWkZNrfvNQZJ2QoPIHBXqh2FDayUEcIaskckPcmkKJDXvqGPl6GvjOwegxOZnHt3z/+3Zk7EH/Gkv7oSz95Rl2/zOBby8wpSKQ5300xDonInTGGj2k0SFYj0EBKNo8sWLTq6W1sE4DYHcyNBb4psKkACZjorvyV4RORME8b3atbkn+Jb7fp+c4kpGcZyG/2pl0OoOkn4KQqwj2fAZeACIev35et3J1Z2bzpLjuPmdA3BAMH4sJYPfzRqD71xTonzuXjxQsCt3IjIjQibVi+1Bq2rIQH8wqAw6cRworTkD4BywlKferRVGc0++m6vVln6ycwDGpfRFOQ2BFIGMAbi6psuP3+vI0vLM3jub0xUeNGTcWmylitigsphmgU4yiIMwCKVQwMU0pqzk12u13PnczTQVjB3c+frzQYmrOPWAPVl7wLcbWt3rXs2TQm8Rsz5jwpcN3RoM4t5qZ+O4+MDcnrNxoSCngCjWqp6WgZuj1+s1h82N79wiEQjDhp/JXBAwu7t779GKLk8duVOo3y9GbKkiGXei9iDpdNNCuBbH0uQApqWkmFI8Ii7m6u/W6rWbo7Wlf9zF+g+vCCWUAWBP1mxIN4r3uN19bhIan255Bp0r4RebM/3FJOr00gzYb/STdhIGeplrwQSn+DwWV3P1Ws6p18/VxgysOyaDbcHZfOZygAFAaC7vFgSeXYYtjzE+r1SRqRGxMOhf6nRTJXExXmsFcTNWk0pJAYxiamE1T2rT9dE0BdaKs7sA4MS1gDGzOZ55EDwigQd3Nyz7eXRjy5UuHgjJolD2y61BSiH7vdag3GoHYUmHRSEUxwQjrL3au/Xaj+ukVpsf34U92xZMpABk3wc8coAzeZcicsK339sqjqGiaBQXgrQBXo07nbVLg16/02yXG6VGJITgAEAdLL36zZpVr9drW99QHXJveFmU6OWvwwO++xT35M/vqoFsq5z9bAPzom5gcaw5qFb6i2kNKA/6OimFkRRKAh+xKKYgaf2LXP36u7WafWN8F/YfV7gozmfOBdf5sM/4VgAmBGzd0vyMM6yllDONZiqipXpAaxA1y1G00iirkEsAhpHlcl2o19+t36y/aSJgNwCohl36WfYhYACggE5tvSrGly/kt1zxixgvNmRbpu6/kPYAC0m/E/XKjaitlaFCAjhYCMsP6vWn33XqNfel8fwuAPgHXSqVUjacfRncs99j6MoWAKZ8PrvFJxRYhgrFWob9Tufs6bW0DQybrWSlHKnUOHALIYQbPFd/890vluojB8d3Y7/Vgs/856/FA/7c92FLz3d8RW6Vcp73ES0qtVwWKq60Oos/qvarSVQKm6GKQl8xwADYRij6df2LNAXedOiu1j/3jpJq5hvZr9/wYSGxv8XdtbyxlZ57CGwpdKOUxn6qgyym6ng7SeIg0VoGHmMAGCOElfX06NPOzXNkvbDshg0raJq94eyT4J8UQcg7a6AU791FzrwREFK19UqQpr5qmgI7azoqJ2ZXSAvwOAZsGoHS1Rs3X71+892xg7sDYL+n5Mw6F8rcfp8hfOcP/DOQ+7Z2pvMUAddipZzMDOKWuTJipZkk5XasjSSuGMfgYURpcfrcFxO5L3I4P74rKzLBDRs2bDBrPuxzt7QZgAnB5rfyuF95YLNiMdBxM2mlEdDtL6iwmbSbMtDBjBI+AKWUI18X6k9fr9evvz++O5Nc+dHX4wHfaWDMNisin0zf/Sr/CEIcbNEMmu0X29VBv3l6EIUpFklYDrlscIBlbHyAsX86OVH/tE727W79eQ1Fpv/QJIDMIfj2PKK/2gTABEZ8bstthxPLBLmMaxVGnXKoe612a7XXKjWDJCxFUinwOC1ySskIn775yez1L+zZ3QEwsbwfYMUAYNafNQAW2n9wU8/L8U/uEgcKCLmiqKNIlZq9Zjcph+U4CZJGU8pACMY5YIEQzo1J78367KevnhrfnR1uIAYb96hlD4C2sNjU+NsFduOuly+RQ6kUKoikXouSHw3CRV1uNqNgpqFWRJELEIAZAkTkqXM3Tr67tG/XAHBYZ8NZbw8bOjgJwDadir2I7qqB+aKDCBaKBW2hZ8pJ63RbJ/1y1EwCGTYEa0iKOGIWpbSB3/104vpbn+6yCDzXZDD5nmmDsw+B74FVwLcVkfS89/7Ht67/xDzBmFHOFNciKJ05FoRr/bWo0dNai4B7vmIURhilFKujX+TffK4wO747e54bDzAAZG+P4CX81SbmBOd31cDxVxDC2BZjXPJQhEyvDrqDTqsf6ijlhkqCzyQlCDBGZGb03Mn8x0d2DUCR2eiiAeBr2B92nRq6nfY+AdsMRW1lgnQM2VwWmYhnQhk0VXPQDHrtsC0bjRnuMQAOlDkWcqdeOPfF06/c2OX6869wDnx+PQFkD8Ah4rIvBYGTfPTuCjbhYWQhYLooSityWevTvWur/ZaOB2tBQwm98X4MEshCBKwbh2+iufFd2ucAVP7wawJgBFvk6C3kx2CJ3pW/jgvsFDwhtRZFn5XaC81F3ez3O+1mqxEoTgUHBhyAEgfB0fq5Ey/tdv35z4HRomHDXwcdtJHjnvqy5bfcu2nc2xayCC2BKjPBpUxU3Dx2NpCGC1yTflECMEaBIWq54E3fnP3k4Phu7YKP+aFvbKw+ez5c+BXZ0K9mx0aXnLu0zDlYchHiFMIp7Jelkm0dRNVy0D8WRkFbFZlPgAITyLOcQ/zp2Ql31+vPv6UAy/+w55ns2wDDhykBvuEA0871QwfH72KCORchwCwQNtdCiEDr3kKnE3d1HDQ4A+57jCFAlmW56un8YRMBuzSbMbv4/xtBzACQsf0JAIiN/+xojbC775JGCDljFLAQgFRZN5gqJeUgWOuflWEccAY29bBNCXYs6o0++5GBcJfGgIE0k9JfRxT8voMpW39FnxaWiLflkYW5JR+5yKGEwRIXIOKGkloEvYZsNmUog1AB9cDmHrWI44zQxyfc/O4BKGIOU49uLD97Pmwt0eINQwNrSxbaQoQO25pbS5aDEFCAES6Ekqws9YpcDJqqLWSomOAN4ARbFiKEPz3xk/HdG/fZvP5Do4Z8HYKAR3PsU+PqFik8sXksKj97HZBTI0vIcAEkaJFLFkghVaAbuqRV+lu97BdtDyFEnIKVc+Ho8b27X/8EZ4B5SgbX1589AO50KgjM0aXRWg2d2wzAkrBGc3WnRi2ExrCComBM8oaSSumWKqtJxTibt8Es39wd6BA+en529wAc9ihn/PdSD3jm6+DDnAA7OPvxt2qonsObH752KXFGczedGnKA2B4AtnwhGAMptF5QsbwWNLgUFDyKYBQ5juNOjxbGd2+HKVCYNyHwddj3pp+nxYMnPKfuWI41ftuus4LjOEcdJ+cQ13IYxQjmGQjFRKgbMvRnuFTKF5pTzx3zrJw1ulQrTe8+Asx8EoBrntw2XCh7AOhxYPvGqJOrW+QHt6cil7hjNrmdby2lvyqQJQycUyEoU0JooXlxRQqh1IeYY4FsYqFRAxVluyNCt1Upjk89k06IfR0h8AhdImMFyN2sX6+RvbeVQRitvVvL5UZv1pycyfAYY4p5akKqkigzFcVaMO6zIoMiLiCX1J36mGea6l3bcY4Q9Z555uupAo8gAJeJ0dEaqn987pb7A8nlaqM330z3OXM5jgilBBC2JTacWOpISVmcUUKKZQacj1E6aqHrhZs1aarIru15iZDtZf/T37DvjuWsGhK5H2An5+ZvZX/v/LtLuVq9lu5012uOQwiyCFDgDEBwEUlFG7ItZkqB7wPG4v8Sdx2sciRJGtAviFht1gx1IOK7mXo6AugB/YIdDfYw5++dFVlwWSv6XD+gG6332/CA5twT635EBTuPPoIjcee9/x1q0NJLAXVVJf0BdTV9MSMJJ5NR+ZmIzKiKgQXJ0Y5HLPPj1++uQjMUg5dhwQdVR4HqCiHJzTQdWqXyr5oPpfRWD2X/DRcAHGL1JzHGUZ9ebkYeePml8UW6f5tSk0KI0uJeTceqan78NMlqMybgIhl4cEXC+YsVtatidHGHghXZVjEtLHvpAAuYiShRDCls1sOo+OZLP/zev6zvXsZ/WqdiTUHYoEsN/3iWBPxlirR5eBETMDUEaheEJoKL4fMfI/tDF3231c46v38lUQRAJLpJ46cyV8Od6aE58uKfh5mOsXO1Wde1RD2gXOhPf+88CWhW1Pzsg8sYobEh0FkpATGG/W8VEfCF2+7g3bZ3Z4MahECEREVKIwLWmy+vv/fDP/lRWm3Kl6GIJYh0+UfuVyOJzo7tVVyvwwmD06c2BAhiuvBYhUNCthZ+8EXf325vkRUmEwYoBgoprZ+nNH1q/0ubv//fwRZyE9cvmInBKD3MX/10OH5DoRgS8OQyCfhcYAEWOVxTLA/Z+8673TEfF7v9rdcH0UpESJgjrVNIm3T34uXffGl4b0h6P65jiiFQIUCL0upfPUukguqXnxkhcBEMfI5xz+69/ZY9+kbnnvucu12+7bt+5w4wFBAmIQoxxU2z2fzNMCg2NITv1k1IFCMRGCCzyQXMj/icNsVnxtU/uEhDoIZBu4X3pDtkc+yu8+OuH8LNQIgEIBBxDGk1IuBl873/ST/8XvMnKaaUVmsKEEHl7YfngcD6BVXpMkejUwLK9hUTusMxlJ77vZfdYZftdb89HloBwCqAgYaI69ik762/t/7ScE6WUkgp0WQDwMx+f32WBPwSNUJxbAdcKAF1B/ecv5jbsuzUPetue8iHvs9qpmqYQihSCBTXq00zmuC7F2kdQ6RYUMXEYlD86jkysKX3uQrx6WUoYGwILH9r4Z3nvEDJ2fqDHxbHw+MuHzu/d4JaCRMIkcREidMmDDZ4/IAurVNBTYxBCqa2u/r8WTbAT1KklG6eXkYExnp42S6ymOdX3lnuvcua+2y7bXZtb4wUVMMgLJEKiuN00Gb6btTYHng/hd+nm1hFoGsfn4MAvrFKEbGop4vCl0lA7B/n1wdDzmrdojvm7Mej5112rxAEEHAJCsQFpVSkZnyP+F0zXY+MkVKIBGKqwzk04FlBxEC4mWqhJ5c5IC873O567d/r4JZ/yzvb9vrah2hdwAqGoCKiakVpiHE+ZL1K6yZwijFQIFYKytszEMB9nUBE4eGlADDkmZYG3x1v+/K9Y9f5cb/rd/t+f6tuXppB5a0aCqUQYxr9cHi+fhmehybSSAKEuhY+BwV8Yx3BVND64dgPugwGHnxclV3e9kf3fDzaYr/v++2z7O2KzQzmAAxgISqalFYhpuauSH+fqrBJKQVahQBWyIfX8xkg1aBKuMBoAx5cigV/nnLvh/1t13vuFgMHHI7bo986u5nCDAyAhFYhhtTEZnO3KQYcTEaAQkE3oqb31RkooNrUvBba3HwwbIDLYeAT1Lt911vu99/ofZu73ae57czUwQqpABUBKJBWIY0W6HlTDTj4kyYSEwUSQNrVGbqhdYMqxWplT4cEXEoFRhDcl99+7Pud9ru+2+X8aAHvcA83gP69hUEmCAQOzfr5OoVmKANSXDe+bGupVgCz/tF8BUgsxCE2+smTqRa8WE9kAMHtYH1vc7vtdttttoUbQStVa1tmMBQhUAo0jg2EIqxp04TnxQ3xqyiUaGn+6r3ZClCRUGKqlh88eTBQ4MV2wJDsT9rSfZuPvuuy7m8XCjKGmKsJAIkMkYg0csC6KdbrlGJK1JAmClwo1O5nX436+h3bKqxWq/bp2BG/HAuOGfj4fnH0frvtF7v+8eEAJzczb93gmCAAYYrDymOTxgipoRhZBSDhCt7O5cDdc6IK1V2jD8erISccjc4DAedtt//Gs7z9zsJdTdXM3N3MBdCWuBVJcVWl0GxGDxRiIhYIjCPD9NFcBFy9T18kwdXyg6cfjQRwyQSMSiDL3W57+8z90LnnEqaq3qspAAFDSEIqkozcF2P1hhFC4PhZY1aVz87cAV/f1HEFCXEAwNQJOcEHz1SCx7vjfsS/dW+2gNv4i6uXAMAE4nHvr0PahBCHSIljZAhXavLp7BogBonS4pOJ/ucPzJ1gh/rBBWc37zv31t2yu/FbH0gMoSIWL1ITQoqBVlFCEQiEmpcMmsmAV5FqFpLygyfj8z/BBc8Hgf3RbX/ofHronbhZ6Y57VdhqQgGt0ibG0f8hRloVFG8IRJGvsEQ5EwAxRhn/1B8/Hdb/0YwEzFIC9X7vQyzdvXT1CQSwFpWCKaSQYqpjoBgSN0QNhZEERMDVLBdwfd3UEgMXxWSBPpphgWYqgWb3rvNF5+5qcHWDCxQCIa7upuo3cqRAoRYSJgq65Kgyqx/67asYpOJUDAAY9/+8FMzIAG5MfTFRn5tlh7FaiVIdIiySYooUi3BDKcTEHEiIb36OCXE7ywKt68BMTRwAMBqAGQQ4EwQtuZt3raNzM4c5SqgSQMIU+C6srgJT1VyN06KRYyAQUIFnWaAUQ4gU3n8LgAczDgTmgoDUzDWbq/fmntUBUweDiYQ5gCgECleJikBJIhdwCH1+lgI0HFjoajkA4KN5CjgfBEvfq7p3Dnd1d5i9tcJEgumAMEgdksQQggq4JpRazXln0KvIJECIowLMLYHmg0A79643L0c+9CHUxcwAcKyRAv3Jv3OMTaQ/qWIkhqnYrFHZXYOaCDwWwfPHpOaDQPTtsg+TDLrB32wCENENUaBVEkqpKCJFZggDzjM2QFUbCUSGGmDsgcx/gdxcEMTOzOHmj8wzFA44BEz3VCeJIbUxUoh/EuO6IgIxgPdmKEAtpQhRPSnAGcelZ4BAOzM1d/MhTBWmgJDUEpmqICFVkVapCpEqEgPow5PX/ywqCypphhpgYICRAv7fQVDJwW2h5mOow9UZKiA2MDFJEEpVWEusiIkZGl6fDgB2oKzDqABvSuD5659vh/T2zdrNFa6AmYGBVkfYU5VqCmNfJKBiEmHlU0vh7dfJzGpUUxdo3ADz1z8fBJ9rucvZ1dUnGMDVALARgxGZamKKTCFFIabS8EenWuBdBBxA0rENPJ8AzqcEuXdz9THgcMWbaEniqk4kLJFjnaRqscDJFyOug6BdAtVYA4z0f14BmAGCuss+xuKgcKhlAOrCIoFCmLhwRIHUsYahfX2yArQtGKAfjwA4/7D4DBCoH8YcqLurDeHmyozAIpVQUOKQqI6BlQTx1KsgcakGRYUBAE/O/86YOd2hauHZ3dRV3aFqrgYSEcJNXMmiXRGpEEW0ao9OZEBB56XrAIBRAc8PgHl2SCcUqLrVago3oGU2llq4zF5RImNekvv9iTboFT9SlGZxBMD5ZyPmgqBUzzBzV7i7dQc1QEQgzGUfmBJzLdYqquNpJ+HLEV6uwSYFOP9Z4FwQwMfA9Iuad2+0sGLQ2/tSRKKAK12fxIBQ2x+MpXz4ZFz40/kMeF4QaPJuoe7whe2z924OY4EQiUUiDmQs4m7L65MA8Kj1ey2nGmB8+v92/uXPVwJ/6wV9XL+am4AiMab9H4gjR+3spCORX6rVDyI2AmDc/Oe/EzcfBOKHbG+IsP/V7FgATAgAUBGkrsVYEPnxSSfBt65mfl8+fLv+J+eXgNkgqCcpdLjn/s1pkTCBiYJUDArElRDJSecANVTMZSqCRwd8ARE44cycfQh13+fe3aEQNhaSiACGSF0RS32KAtQ4lObtAIDpNRmnCMAFQPCxwIcwf913nbuZUC3EIkIEIakrJvAJo5LPAreAaVUObeCPTn74FwABu5u5+y5ndxiYABZBTSBmIYiED09ogzKUIdUAgJEB5uTgAiBQzZ/23rkDwmAADKmIWMBCSCcoANdOok729HJN4BkgyLddN5GAGgAjCDNISFiYUL87AASttuRV+XAEwAVeHTsLBNZ53vfZ3AEHSiUTEwODEUB49ymRn5RubCb1B6MFGvj/EjchZoAg+6d9796ZWSssMKiScV2KCPDup6K/mJy0cpoAMLWA5jDABeyQ9v2zPnt2VTgMEG6ntYOlfvcPiVyL2r1xXQwKMD77i23/GUowJGAyQnCpwIe3JaGg5J8RemcFKMGufD8A4P/IOQ9Vx40oDF/w0tM0wDalzc/ae+EAFvhS0xPT0mMYEAgQcnpPqKGzBgXDFpNH0WG9GIaglEfIC+QV1qBgEOB4xvI2bZGoV9JPGS595uqb/8wpPvJGpzEGKLcQLtQitCFxkoChARKwZyCkrFsVnUUQ0iX+YgeASQKffo3eHqRxnm9tihC0rxLCUCAkOKp5BfjOlCKW+qwBwH7+nnfaD+CE3HQR5imnRXqcMJXWBqBxNq7pAPwSJyIpHOCoVAc4nRDA3WamVkxrJoIkdvjQPDit+wYgkJwKyYc6QANkwiG9uZrmmsCMRBOkkAALgZolkblDeq3plrMDwPz7PeODp1+9E1fYO4CZcVbjR2AqQQDcmlHAbSIJ/jaxWSBzAE3YvoWAKSW97xUAMICRkELXq4pOvmVo14ZAthBc3H+NcAKpd1qDAcFSRsSCBEC1ooDQSRla0sD0Qpl+6GbY4CEcWpk6gSQQICRLQB+Dv60FALQGGDsHaMD1VxorEnqnhAVDwAWkyyB5vo4DOLb3VjtsPgAjEwI2CAIyGULYzWMnaTLEyzoAQLuJSByMR2feLGUBG+AEUqdbnWiAYDkAS6dGGCRJg2gPwDP/Gga8hkHAbk5agiVBYCeHE1GrEEYMqSPjAKeoDly3hZBdDQGHhDkLVM+HzoXOCZLPivHIlgC8pn0BpnEEmogBB5iu2eXqLeKxknJ9ntmBe+lQCG2ejBM4miQSEf3ONh6oDoBA+tKapGMGgnpFANBECKABlsBlAnT1zpAQOodM1/sQqDQP0iAIBmBbF7glQZRUvQJ85P6EtE72ABS10EZCwBGJPjugs4zKV0B8hTKdu8wwAOxuQBMIN1IGAsGAYCGJcLYqAG6YpaFGQjYL5PUaewAGAgmWcOVgqitPichU5Xmqxb4XqpwDa5gTOISz0eBbAa6YD53pq1k40WyaAcvxfwMh+Fledr4VA8jjajdgejXOwqvBLSpGQosYoLkQnIsgHHK+deaqivpxtvQDjaIbttwO3EQnwIDgyE0lAJRahkE2ESYLVjQCNR6Cqf4NLmbTKg6w4yTIVJDQeLd/88MgjT8BEw65TgTNgwqXADKlwkWgDQAmBdz0/RdO8IV0JIOdJ0Kw3iq1VJOFYAtAU/EvF8uiSEpBUjwJgH7sm1VibL7+BtTBKvfRRiCCfpITIlZqofy8eASbIKAN6vXG/OWUBRL3sU4Qz0zVYOsHfOkwEWeWdkCQRHaiOonixwDwkr/vCCBTB2l6BFByAiFcSoaPg4B8uxgHaMPOSxMVINYvaZk90gE2sQqUCmwItAegRQewayafUuJKDfFoB7DZwP9wJw1s1jZBMB1osMsPh8DHfl1Q4QC99kHwBZOm7erhmbFZsRoHsAFQ6w7AtBBKGmraClXWpF+cA0ohYJsgkJynrNbH87ID7JeAxsU8YCtPgMS3eqkmQXl6fl1cBHzznTbZf7lxZLplFaRaxI8AgE0I2F6dvD2gkMNsy0N1n4o/fQuA194z8HYQLLfxcrGS/Vj5DwKgYByguABaKW8HAbI8G/oh4jIAk0MlvKX7L5rJj0M3Trf5XQj84X0O0GZ5xgloQyoN5rf7pRDoZrH/XpvvQQOBWl7dLFaIHwRg7BUjca3W6D05zNVmuV4c3wdAfADAa/f+DQTDmYp1sLnSv88BzCO44SFw9e6pTKUqVwaC2bIYjTUO0AkZCHAcLFWurh6r+cEB3Etl+FsMAWVBttkEs/6vxQeAciGs3U6wCrO5ysLklyIUPLwBel2BYBDPg5VSeaas2h8Clfpoh1c/OR+rxeEN0K3920rJKg4y5S/vvgE6JdNMPt/OVdw/PIKNOgaBWM2X89Bmgcp1kE44QRr7FoBkXLx/vY5BgL7aZspfm2ZAK69rELjzxVCdE925AErZoX6gOHnf6+gBGAjmDo07uf/efsraxdRkgTqrM2MkxURgJ9V7+u+3izeQ180D6PVeHb3ZYQJsD9Q/J95RlzXyXjs56rS83tOd/gT+bw8OCACAgCCAQaHrn04L8NvSZisKgMwGnAEAC2YtAVKLAICjAAAAAElFTkSuQmCC'
-tags:
- - source
- - steamcmd
-features:
- - steam_disk_space
-docker_images:
- Source: 'ghcr.io/pelican-eggs/games:source'
-file_denylist: { }
-startup_commands:
- Default: './srcds_run -game insurgency -console -port {{SERVER_PORT}} +map {{SRCDS_MAP}} +ip 0.0.0.0 -strictportbind -norestart'
-config:
- files: { }
- startup:
- done: 'gameserver Steam ID'
- logs: { }
- stop: quit
-scripts:
- installation:
- script: |-
- #!/bin/bash
- # steamcmd Base Installation Script
- #
- # Server Files: /mnt/server
-
- ## download and install steamcmd
- cd /tmp
- mkdir -p /mnt/server/steamcmd
- curl -sSL -o steamcmd.tar.gz https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz
- tar -xzvf steamcmd.tar.gz -C /mnt/server/steamcmd
- cd /mnt/server/steamcmd
-
- # SteamCMD fails otherwise for some reason, even running as root.
- # This is changed at the end of the install process anyways.
- chown -R root:root /mnt
- export HOME=/mnt/server
-
- ## install game using steamcmd
- ./steamcmd.sh +force_install_dir /mnt/server +login anonymous +app_update ${SRCDS_APPID} ${EXTRA_FLAGS} +quit
-
- ## set up 32 bit libraries
- mkdir -p /mnt/server/.steam/sdk32
- cp -v linux32/steamclient.so ../.steam/sdk32/steamclient.so
-
- ## set up 64 bit libraries
- mkdir -p /mnt/server/.steam/sdk64
- cp -v linux64/steamclient.so ../.steam/sdk64/steamclient.so
- container: 'ghcr.io/pelican-eggs/installers:debian'
- entrypoint: bash
-variables:
- -
- name: 'Default Map'
- description: 'The default map to use when starting the server.'
- env_variable: SRCDS_MAP
- default_value: sinjar
- user_viewable: true
- user_editable: true
- rules:
- - required
- - 'regex:/^(\w{1,20})$/'
- sort: 2
- -
- name: 'Game ID'
- description: 'The ID corresponding to the game to download and run using SRCDS.'
- env_variable: SRCDS_APPID
- default_value: 237410
- user_viewable: true
- user_editable: false
- rules:
- - required
- - 'regex:/^(237410)$/'
- sort: 1
diff --git a/database/Seeders/eggs/source-engine/egg-team-fortress2.yaml b/database/Seeders/eggs/source-engine/egg-team-fortress2.yaml
deleted file mode 100644
index a93a6af63..000000000
--- a/database/Seeders/eggs/source-engine/egg-team-fortress2.yaml
+++ /dev/null
@@ -1,124 +0,0 @@
-_comment: 'DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL'
-meta:
- version: PLCN_v3
- update_url: 'https://github.com/pelican-dev/panel/raw/main/database/Seeders/eggs/source-engine/egg-team-fortress2.yaml'
-exported_at: '2025-10-31T12:31:09+00:00'
-name: 'Team Fortress 2'
-author: panel@example.com
-uuid: 7f8eb681-b2c8-4bf8-b9f4-d79ff70b6e5d
-description: |-
- Team Fortress 2 is a team-based first-person shooter multiplayer video game developed and published
- by Valve Corporation. It is the sequel to the 1996 mod Team Fortress for Quake and its 1999 remake.
-image: 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB3aWR0aD0iNTAwcHgiIGhlaWdodD0iNTAwLjAwOXB4IiB2aWV3Qm94PSItNTAgLTUwLjAwNSA1MDAgNTAwLjAwOSIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAtNTAgLTUwLjAwNSA1MDAgNTAwLjAwOSINCgkgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8bGluZWFyR3JhZGllbnQgaWQ9IlNWR0lEXzFfIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjI1NS4zOTk0IiB5MT0iLTQzMy44NDM4IiB4Mj0iMTQ0LjU5ODkiIHkyPSI1My44NDUxIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIDAgMTApIj4NCgk8c3RvcCAgb2Zmc2V0PSIwIiBzdHlsZT0ic3RvcC1jb2xvcjojNUQxRjBFIi8+DQoJPHN0b3AgIG9mZnNldD0iMSIgc3R5bGU9InN0b3AtY29sb3I6I0QwOTczNyIvPg0KPC9saW5lYXJHcmFkaWVudD4NCjxwYXRoIGZpbGw9InVybCgjU1ZHSURfMV8pIiBkPSJNMjYyLjA0NC00Mi4yMzlDMzcwLjA5Ny0xNC42NDQsNDUwLDgzLjM0NCw0NTAsMTk5Ljk5OGMwLDIuNjYxLTAuMDU3LDUuMzExLTAuMTQzLDcuOTUxDQoJbC0xNjguMTUxLTIzLjkxNmMtNC45MjItMjUuMzM4LTIxLjMzMy00Ni41NTYtNDMuNTk0LTU4LjA0NUwyNjIuMDQ0LTQyLjIzOXogTTEyNS45OSwxNjEuODgNCgljMTEuNDg4LTIyLjI2MSwzMi43MDctMzguNjcsNTguMDQzLTQzLjU5M2wyMy45Mi0xNjguMTUzYy0yLjY0My0wLjA4My01LjI5LTAuMTM5LTcuOTUzLTAuMTM5DQoJYy0xMTYuNjUyLDAtMjE0LjYzOSw3OS44OTgtMjQyLjIzNSwxODcuOTUzTDEyNS45OSwxNjEuODh6IE0xNjEuODgzLDI3NC4wMDhjLTIyLjI1OS0xMS40ODktMzguNjctMzIuNzEtNDMuNTkyLTU4LjA0NQ0KCWwtMTY4LjE1Mi0yMy45MmMtMC4wODMsMi42NDMtMC4xMzksNS4yOTMtMC4xMzksNy45NTVjMCwxMTYuNjQ4LDc5Ljg5OCwyMTQuNjM3LDE4Ny45NTIsMjQyLjIzM0wxNjEuODgzLDI3NC4wMDh6IE0yNzQuMDEsMjM4LjExMw0KCWMtMTEuNDksMjIuMjYxLTMyLjcwNywzOC42NjktNTguMDQ2LDQzLjU5M2wtMjMuOTE5LDE2OC4xNThjMi42NDMsMC4wODMsNS4yOTIsMC4xNCw3Ljk1NCwwLjE0DQoJYzExNi42NTMsMCwyMTQuNjQtNzkuOTAxLDI0Mi4yMzItMTg3Ljk1NUwyNzQuMDEsMjM4LjExM3oiLz4NCjxyYWRpYWxHcmFkaWVudCBpZD0iU1ZHSURfMl8iIGN4PSI5OC4xOTE5IiBjeT0iLTE5OC4zNTYiIHI9IjQyNS45ODcxIiBmeD0iOTIuNzU2NSIgZnk9Ii0xOTkuNDgzNCIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLjk3NzQgMC4yMTE0IDAuMTI2NiAtMC41ODUxIC03Ny4wMzAxIC0xNjcuMzcwNykiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4NCgk8c3RvcCAgb2Zmc2V0PSIwIiBzdHlsZT0ic3RvcC1jb2xvcjojRkZGRkZGO3N0b3Atb3BhY2l0eTowIi8+DQoJPHN0b3AgIG9mZnNldD0iMC40NjU3IiBzdHlsZT0ic3RvcC1jb2xvcjojRkZGRkZGO3N0b3Atb3BhY2l0eTowLjA4MDQiLz4NCgk8c3RvcCAgb2Zmc2V0PSIwLjk4NjEiIHN0eWxlPSJzdG9wLWNvbG9yOiNGRkZGRkY7c3RvcC1vcGFjaXR5OjAuMjE0MyIvPg0KCTxzdG9wICBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOiNGRkZGRkY7c3RvcC1vcGFjaXR5OjAiLz4NCjwvcmFkaWFsR3JhZGllbnQ+DQo8cGF0aCBmaWxsPSJ1cmwoI1NWR0lEXzJfKSIgZD0iTTI2Mi4wNDQtNDIuMjM5QzM3MC4wOTctMTQuNjQ0LDQ1MCw4My4zNDQsNDUwLDE5OS45OThjMCwyLjY2MS0wLjA1Nyw1LjMxMS0wLjE0Myw3Ljk1MQ0KCWwtMTY4LjE1MS0yMy45MTZjLTQuOTIyLTI1LjMzOC0yMS4zMzMtNDYuNTU2LTQzLjU5NC01OC4wNDVMMjYyLjA0NC00Mi4yMzl6IE0xMjUuOTksMTYxLjg4DQoJYzExLjQ4OC0yMi4yNjEsMzIuNzA3LTM4LjY3LDU4LjA0My00My41OTNsMjMuOTItMTY4LjE1M2MtMi42NDMtMC4wODMtNS4yOS0wLjEzOS03Ljk1My0wLjEzOQ0KCWMtMTE2LjY1MiwwLTIxNC42MzksNzkuODk4LTI0Mi4yMzUsMTg3Ljk1M0wxMjUuOTksMTYxLjg4eiBNMTYxLjg4MywyNzQuMDA4Yy0yMi4yNTktMTEuNDg5LTM4LjY3LTMyLjcxLTQzLjU5Mi01OC4wNDUNCglsLTE2OC4xNTItMjMuOTJjLTAuMDgzLDIuNjQzLTAuMTM5LDUuMjkzLTAuMTM5LDcuOTU1YzAsMTE2LjY0OCw3OS44OTgsMjE0LjYzNywxODcuOTUyLDI0Mi4yMzNMMTYxLjg4MywyNzQuMDA4eiBNMjc0LjAxLDIzOC4xMTMNCgljLTExLjQ5LDIyLjI2MS0zMi43MDcsMzguNjY5LTU4LjA0Niw0My41OTNsLTIzLjkxOSwxNjguMTU4YzIuNjQzLDAuMDgzLDUuMjkyLDAuMTQsNy45NTQsMC4xNA0KCWMxMTYuNjUzLDAsMjE0LjY0LTc5LjkwMSwyNDIuMjMyLTE4Ny45NTVMMjc0LjAxLDIzOC4xMTN6Ii8+DQo8L3N2Zz4NCg=='
-tags:
- - source
- - steamcmd
-features:
- - gsl_token
- - steam_disk_space
-docker_images:
- Source: 'ghcr.io/pelican-eggs/games:source'
-file_denylist: { }
-startup_commands:
- Default: './srcds_run -game tf -console -port {{SERVER_PORT}} +map {{SRCDS_MAP}} +ip 0.0.0.0 -strictportbind -norestart +sv_setsteamaccount {{STEAM_ACC}}'
-config:
- files: { }
- startup:
- done: 'gameserver Steam ID'
- logs: { }
- stop: quit
-scripts:
- installation:
- script: |-
- #!/bin/bash
- # steamcmd Base Installation Script
- #
- # Server Files: /mnt/server
- # Image to install with is 'debian:buster-slim'
-
- ##
- #
- # Variables
- # STEAM_USER, STEAM_PASS, STEAM_AUTH - Steam user setup. If a user has 2fa enabled it will most likely fail due to timeout. Leave blank for anon install.
- # WINDOWS_INSTALL - if it's a windows server you want to install set to 1
- # SRCDS_APPID - steam app id ffound here - https://developer.valvesoftware.com/wiki/Dedicated_Servers_List
- # EXTRA_FLAGS - when a server has extra glas for things like beta installs or updates.
- #
- ##
-
- ## just in case someone removed the defaults.
- if [ "${STEAM_USER}" == "" ]; then
- echo -e "steam user is not set.
- "
- echo -e "Using anonymous user.
- "
- STEAM_USER=anonymous
- STEAM_PASS=""
- STEAM_AUTH=""
- else
- echo -e "user set to ${STEAM_USER}"
- fi
-
- ## download and install steamcmd
- cd /tmp
- mkdir -p /mnt/server/steamcmd
- curl -sSL -o steamcmd.tar.gz https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz
- tar -xzvf steamcmd.tar.gz -C /mnt/server/steamcmd
- mkdir -p /mnt/server/steamapps # Fix steamcmd disk write error when this folder is missing
- cd /mnt/server/steamcmd
-
- # SteamCMD fails otherwise for some reason, even running as root.
- # This is changed at the end of the install process anyways.
- chown -R root:root /mnt
- export HOME=/mnt/server
-
- ## install game using steamcmd
- ./steamcmd.sh +force_install_dir /mnt/server +login ${STEAM_USER} ${STEAM_PASS} ${STEAM_AUTH} $( [[ "${WINDOWS_INSTALL}" == "1" ]] && printf %s '+@sSteamCmdForcePlatformType windows' ) +app_update ${SRCDS_APPID} ${EXTRA_FLAGS} validate +quit ## other flags may be needed depending on install. looking at you cs 1.6
-
- ## set up 32 bit libraries
- mkdir -p /mnt/server/.steam/sdk32
- cp -v linux32/steamclient.so ../.steam/sdk32/steamclient.so
-
- ## set up 64 bit libraries
- mkdir -p /mnt/server/.steam/sdk64
- cp -v linux64/steamclient.so ../.steam/sdk64/steamclient.so
- container: 'ghcr.io/pelican-eggs/installers:debian'
- entrypoint: bash
-variables:
- -
- name: 'Default Map'
- description: 'The default map to use when starting the server.'
- env_variable: SRCDS_MAP
- default_value: cp_dustbowl
- user_viewable: true
- user_editable: true
- rules:
- - required
- - 'regex:/^(\w{1,20})$/'
- sort: 2
- -
- name: 'Game ID'
- description: 'The ID corresponding to the game to download and run using SRCDS.'
- env_variable: SRCDS_APPID
- default_value: 232250
- user_viewable: true
- user_editable: false
- rules:
- - required
- - 'in:232250'
- sort: 1
- -
- name: Steam
- description: |-
- The Steam Game Server Login Token to display servers publicly. Generate one at
- https://steamcommunity.com/dev/managegameservers
- env_variable: STEAM_ACC
- default_value: ''
- user_viewable: true
- user_editable: true
- rules:
- - required
- - string
- - alpha_num
- - 'size:32'
- sort: 3
diff --git a/database/Seeders/eggs/voice-servers/egg-mumble-server.yaml b/database/Seeders/eggs/voice-servers/egg-mumble-server.yaml
deleted file mode 100644
index 666f82400..000000000
--- a/database/Seeders/eggs/voice-servers/egg-mumble-server.yaml
+++ /dev/null
@@ -1,70 +0,0 @@
-_comment: 'DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL'
-meta:
- version: PLCN_v3
- update_url: 'https://github.com/pelican-dev/panel/raw/main/database/Seeders/eggs/voice-servers/egg-mumble-server.yaml'
-exported_at: '2025-10-31T12:25:24+00:00'
-name: 'Mumble Server'
-author: panel@example.com
-uuid: 727ee758-7fb2-4979-972b-d3eba4e1e9f0
-description: |-
- Mumble is an open source, low-latency, high quality voice chat software primarily intended for use
- while gaming.
-image: 'data:image/png;base64,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'
-tags:
- - voice
-features: { }
-docker_images:
- Mumble: 'ghcr.io/pelican-eggs/yolks:voice_mumble'
-file_denylist: { }
-startup_commands:
- Default: 'mumble-server -fg -ini murmur.ini'
-config:
- files:
- murmur.ini:
- parser: ini
- find:
- database: /home/container/murmur.sqlite
- logfile: /home/container/murmur.log
- port: '{{server.allocations.default.port}}'
- host: ''
- users: '{{server.environment.MAX_USERS}}'
- startup:
- done: 'Server listening on'
- logs: { }
- stop: ^C
-scripts:
- installation:
- script: |-
- #!/bin/ash
-
- if [ ! -d /mnt/server/ ]; then
- mkdir /mnt/server/
- fi
-
- cd /mnt/server
-
- FILE=/mnt/server/murmur.ini
- if [ -f "$FILE" ]; then
- echo "Config file already exists."
- else
- echo "Downloading the config file."
- apk add --no-cache murmur
- cp /etc/murmur.ini /mnt/server/murmur.ini
- apk del murmur
- fi
- echo "done"
- container: 'ghcr.io/pelican-eggs/installers:alpine'
- entrypoint: ash
-variables:
- -
- name: 'Maximum Users'
- description: 'Maximum concurrent users on the mumble server.'
- env_variable: MAX_USERS
- default_value: 100
- user_viewable: true
- user_editable: false
- rules:
- - required
- - numeric
- - 'digits_between:1,5'
- sort: 1
diff --git a/database/Seeders/eggs/voice-servers/egg-teamspeak3-server.yaml b/database/Seeders/eggs/voice-servers/egg-teamspeak3-server.yaml
deleted file mode 100644
index 1907f7bb5..000000000
--- a/database/Seeders/eggs/voice-servers/egg-teamspeak3-server.yaml
+++ /dev/null
@@ -1,118 +0,0 @@
-_comment: 'DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL'
-meta:
- version: PLCN_v3
- update_url: 'https://github.com/pelican-dev/panel/raw/main/database/Seeders/eggs/voice-servers/egg-teamspeak3-server.yaml'
-exported_at: '2025-10-31T12:25:29+00:00'
-name: 'Teamspeak3 Server'
-author: panel@example.com
-uuid: 983b1fac-d322-4d5f-a636-436127326b37
-description: |-
- VoIP software designed with security in mind, featuring crystal clear voice quality, endless
- customization options, and scalabilty up to thousands of simultaneous users.
-image: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAMAAABrrFhUAAADAFBMVEVHcEw2Qls1QVk1QVo1QVk3RF01QVk1QVk2QltbZn03Q101QVk1QVk1QVk1QVk1QVk1QVk3Q101QVlOWXM1QVk0QFk1QVk3Q101QVk1QVk5RmE1QVk1QVk1QVk1QVk1QVk1QVnEzN41QVk1QVk1QVk1QVk1QVk1QVk1QVk1QVo1QVk1QVk1QVk1QVk1QVk1QVk1QVk1QVk1QVk1QVk1QVk1QVk1QVk1QVk1QVk1QVk1QVk1QVk1QVk1QVk1QVlEUnXEzN41QVk1QVk1QVnEzN7EzN41QVnEzN5EUnU1QVnEzN7EzN7EzN7Ezd/Fzd/EzN7EzN5EUnU1QVnEzN7CytzEzN7EzN41QVnEzN5EUnXEzN7EzN7Fzd9EUnTEzN7EzN7EzN5EUnXEzN5EUnVEUnXFzd/EzN5EUnVEUnXEzN7EzN5EUnXEzN5EUnVEUnXEzN7EzN7EzN5EUnXEzN5EUnXEzN5DUXTEzN7EzN5EUnXEzN5EUnXEzN7EzN7EzN5EUnVEUnREUnXEzN7EzN5EUnXEzN5EUnXEzN5EUnXEzN5EUnVVY4M9Sml7hqKfqcCapLylr8W3wNRMWHDE///EAP81veA1veBEUnWElbnEzN41QVlJvS7I0OCAkrfHzuA0QFiDlLlCUHPI0OI3RF5ATnHGzt80PlqAkbc7SW6Ck7hJvy00OVzK0uOFl7uBk7g+TXDFzd5KxivM1OWzvdSHmLw0Ols8S2++x9u4wdaImb2wutJKwyxFU3e7xNlKwSyMnL7Cyt3O1eakscxItjCst9CPn8CotM6frMlKxSvDy92SocE0PFuZp8VbaYqVpMM3T1SJmr1MWXycqsdQXoBEnzg4VlKhq8I2SlZfbY57jLBreJVBij82RVdFqDWWoLhJV3mAjKg8b0lHrzM5XE9xfp8xPladp741Qll0hKg7aUtIui9peZxCkT1WY4V2gp6RnLRDmDtAhUE6YU0+ekWttst8h6OnsMZmcpGMlrBgb5M/fkQ9d0ZicZU0O1yHkq01CmWoijUQAAABAHRSTlMAI1oT2hf+7AYBCV94/CZFwBD3A/q9kB/u4Q3eLxuplVIO9HCZi8SkfSrx5cdjQDeuZ8qe0le5STwzzepr1qH+B4Gzts7WTWTxh6LnJBxR/MGXhIkV81fQRqb4mUDISlx4dLzBgsnvYTHcLONo0SeU7IRDsK46OTXi6rj3KamztlKPfo1NcGkv2a5a6PXIn+jh7vIpKf/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////aV2+1twAAGmhJREFUeNrsnHlQlOcdx7lvEFhYBJYjoMByyyHLmShqKhqx4lU01TKjM8200dTp1Fpt2mZs/mhn2uSf992TXV1Yl2VhlUu5BYFVFEyMNdGSqDReMRlTM0mvP/ou4PFez/s87767YGZ/f2Yy+D6f/f2+v+M53Nxc5jKXucxlLnOZy1zmMpe5TDCLiZIs8kjelBBfmVJS7hVdOmcZXuUFmaG5FeKgrMScEE+/7+HKw6RFZeLcvOgkHwWXRfiWh1ZsCpS5B3w/lh4QsiYoNS8jWIFq4bGRCctkcS/y2kXua1ZUxkYo7LHFJUuyJDEv4OL9pFn5BUkKQcwnOjc550UKCP+QrIryYIWwFpsa6P5iyF2RuCRC4RALT0kr9l/gy5eIM6DWEhwxYz7I0bBtRfECXn5cQjh7cvPKrKwQp5UFJhbJZMXSkBmT5MiyEz3Kgpbmr8z08oWLGp+8IOkCXb8Hw6/v41temRBUKAvx5ipv/Lyl2R5p+Smx4dyxUOkRtgDXL6Z8pm9malCixFuEWi26L0rOzyzlYBAtliy0giee/IWRa7zt+XOesrKKAqAvRKxMXEg1s38q+fPiRfb/TZF7YUIJCEJB2cKJhLWUKA0RCqx7YGosIBLSFkitXEj9bYTM1zGyTSWsGaJ0bdRCyH8UzaqPtP3Xl9bv3HW0ZseRA3UbN9YdOLKjZverG3a+8dpLfBxBkpbHxsB3rfe8A6AIoOLz5Zs31NQdrJXTrXrLwVWHqt56dfvhzahF1optLAgyguZZC2TUiu7z999rbrbIgVa9btWRt3b9CgWDSJbAUmh6ZYnmE8By6vfUH++9/jcNF4IZ27+n6uhOeAqegaHM9XNm0fytv9iHDgDrbP34jqZZDmd79+zbdfgVyH8uJ4G5SooPmS8ASxQMADCstfPSneZjclirXV21az2k5iaXMxFIT5ufoUFMBjMAAkHr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'
-tags:
- - voice
-features: { }
-docker_images:
- Debian: 'ghcr.io/pelican-eggs/yolks:debian'
-file_denylist: { }
-startup_commands:
- Default: './ts3server default_voice_port={{SERVER_PORT}} query_port={{QUERY_PORT}} filetransfer_ip=0.0.0.0 filetransfer_port={{FILE_TRANSFER}} query_http_port={{QUERY_HTTP}} query_ssh_port={{QUERY_SSH}} query_protocols={{QUERY_PROTOCOLS_VAR}} license_accepted=1'
-config:
- files: { }
- startup:
- done: 'listening on 0.0.0.0:'
- logs: { }
- stop: ^C
-scripts:
- installation:
- script: |-
- #!/bin/ash
- # TS3 Installation Script
- #
- # Server Files: /mnt/server
-
- if [ -z ${TS_VERSION} ] || [ ${TS_VERSION} == latest ]; then
- TS_VERSION=$(curl -sSL https://teamspeak.com/versions/server.json | jq -r '.linux.x86_64.version')
- fi
-
- cd /mnt/server
-
- echo -e "getting files from http://files.teamspeak-services.com/releases/server/${TS_VERSION}/teamspeak3-server_linux_amd64-${TS_VERSION}.tar.bz2"
- curl -L http://files.teamspeak-services.com/releases/server/${TS_VERSION}/teamspeak3-server_linux_amd64-${TS_VERSION}.tar.bz2 | tar -xvj --strip-components=1
- cp ./redist/libmariadb.so.2 ./
- container: 'ghcr.io/pelican-eggs/installers:alpine'
- entrypoint: ash
-variables:
- -
- name: 'File Transfer Port'
- description: 'The Teamspeak file transfer port'
- env_variable: FILE_TRANSFER
- default_value: 30033
- user_viewable: true
- user_editable: false
- rules:
- - required
- - integer
- - 'between:1025,65535'
- sort: 2
- -
- name: 'Query HTTP Port'
- description: 'TCP Port opened for ServerQuery connections using http'
- env_variable: QUERY_HTTP
- default_value: 10080
- user_viewable: true
- user_editable: false
- rules:
- - required
- - integer
- - 'between:1025,65535'
- sort: 6
- -
- name: 'Query Port'
- description: 'The Teamspeak Query Port'
- env_variable: QUERY_PORT
- default_value: 10011
- user_viewable: true
- user_editable: false
- rules:
- - required
- - integer
- - 'between:1025,65535'
- sort: 3
- -
- name: 'Query Protocols'
- description: "Comma separated list of protocols that can be used to connect to the ServerQuery | \r\nPossible values are raw, ssh and http | \r\nE.g.: raw,ssh,http"
- env_variable: QUERY_PROTOCOLS_VAR
- default_value: 'raw,http,ssh'
- user_viewable: true
- user_editable: true
- rules:
- - required
- - string
- - 'max:12'
- sort: 4
- -
- name: 'Query SSH Port'
- description: 'TCP Port opened for ServerQuery connections using SSH'
- env_variable: QUERY_SSH
- default_value: 10022
- user_viewable: true
- user_editable: false
- rules:
- - required
- - integer
- - 'between:1025,65535'
- sort: 5
- -
- name: 'Server Version'
- description: 'The version of Teamspeak 3 to use when running the server.'
- env_variable: TS_VERSION
- default_value: latest
- user_viewable: true
- user_editable: true
- rules:
- - required
- - string
- - 'max:6'
- sort: 1
diff --git a/lang/en/installer.php b/lang/en/installer.php
index 51094872a..801b903a6 100644
--- a/lang/en/installer.php
+++ b/lang/en/installer.php
@@ -61,6 +61,17 @@ return [
'migration' => 'Migrations failed',
],
],
+ 'egg' => [
+ 'title' => 'Eggs',
+ 'no_eggs' => 'No Eggs Available',
+ 'background_install_started' => 'Egg Install Started',
+ 'background_install_description' => 'Install of :count eggs has been queued and will continue in the background.',
+ 'exceptions' => [
+ 'failed_to_update' => 'Failed to update egg index',
+ 'no_eggs' => 'No eggs are available to install at this time.',
+ 'installation_failed' => 'Failed to install selected eggs. Please import them after the installation via the egg list.',
+ ],
+ ],
'session' => [
'title' => 'Session',
'driver' => 'Session Driver',
diff --git a/tests/Integration/Services/Servers/StartupModificationServiceTest.php b/tests/Integration/Services/Servers/StartupModificationServiceTest.php
index 3325efc96..36c74d1c1 100644
--- a/tests/Integration/Services/Servers/StartupModificationServiceTest.php
+++ b/tests/Integration/Services/Servers/StartupModificationServiceTest.php
@@ -70,7 +70,7 @@ class StartupModificationServiceTest extends IntegrationTestCase
public function test_server_is_properly_modified_as_admin_user(): void
{
/** @var \App\Models\Egg $nextEgg */
- $nextEgg = Egg::query()->findOrFail(6);
+ $nextEgg = Egg::query()->findOrFail(2);
$server = $this->createServerModel(['egg_id' => 1]);
diff --git a/tests/Seeders/EggSeeder.php b/tests/Seeders/EggSeeder.php
new file mode 100644
index 000000000..086c640bc
--- /dev/null
+++ b/tests/Seeders/EggSeeder.php
@@ -0,0 +1,36 @@
+isFile() || !$file->isReadable()) {
+ continue;
+ }
+
+ $filePath = $file->getRealPath();
+ $uploaded = new UploadedFile($filePath, basename($filePath));
+
+ $importer->fromFile($uploaded);
+ }
+ }
+}
diff --git a/tests/TestCase.php b/tests/TestCase.php
index ac07330fb..ecba942ee 100644
--- a/tests/TestCase.php
+++ b/tests/TestCase.php
@@ -2,8 +2,10 @@
namespace App\Tests;
+use App\Tests\Seeders\EggSeeder;
use Carbon\Carbon;
use Carbon\CarbonImmutable;
+use Exception;
use Illuminate\Foundation\Testing\TestCase as BaseTestCase;
use Spatie\Permission\PermissionRegistrar;
@@ -35,6 +37,13 @@ abstract class TestCase extends BaseTestCase
$this->setKnownUuidFactory();
$this->app->make(PermissionRegistrar::class)->forgetCachedPermissions();
+
+ try {
+ $seeder = new EggSeeder();
+ $seeder->run();
+ } catch (Exception) {
+ // Don't fail all tests if the fixture/ seeder isn't present or import fails.
+ }
}
/**
diff --git a/database/Seeders/eggs/minecraft/egg-bungeecord.yaml b/tests/_fixtures/egg-bungeecord.yaml
similarity index 99%
rename from database/Seeders/eggs/minecraft/egg-bungeecord.yaml
rename to tests/_fixtures/egg-bungeecord.yaml
index 352d048ce..22b9f3cb0 100644
--- a/database/Seeders/eggs/minecraft/egg-bungeecord.yaml
+++ b/tests/_fixtures/egg-bungeecord.yaml
@@ -26,7 +26,7 @@ docker_images:
'Java 16': 'ghcr.io/pelican-eggs/yolks:java_16'
'Java 11': 'ghcr.io/pelican-eggs/yolks:java_11'
'Java 8': 'ghcr.io/pelican-eggs/yolks:java_8'
-file_denylist: { }
+file_denylist: { }
startup_commands:
Default: 'java -Xms128M -XX:MaxRAMPercentage=95.0 -jar {{SERVER_JARFILE}}'
config:
@@ -40,7 +40,7 @@ config:
'regex:^(127\.0\.0\.1|localhost)(:\d{1,5})?$': '{{config.docker.interface}}$2'
startup:
done: 'Listening on '
- logs: { }
+ logs: { }
stop: end
scripts:
installation:
@@ -60,8 +60,7 @@ scripts:
container: 'ghcr.io/pelican-eggs/installers:alpine'
entrypoint: ash
variables:
- -
- name: 'Bungeecord Jar File'
+ - name: 'Bungeecord Jar File'
description: 'The name of the Jarfile to use when running Bungeecord.'
env_variable: SERVER_JARFILE
default_value: bungeecord.jar
@@ -71,8 +70,7 @@ variables:
- required
- 'regex:/^([\w\d._-]+)(\.jar)$/'
sort: 2
- -
- name: 'Bungeecord Version'
+ - name: 'Bungeecord Version'
description: 'The version of Bungeecord to download and use.'
env_variable: BUNGEE_VERSION
default_value: latest
diff --git a/database/Seeders/eggs/minecraft/egg-vanilla-minecraft.yaml b/tests/_fixtures/egg-vanilla-minecraft.yaml
similarity index 99%
rename from database/Seeders/eggs/minecraft/egg-vanilla-minecraft.yaml
rename to tests/_fixtures/egg-vanilla-minecraft.yaml
index b0f0a120b..ff884ed8c 100644
--- a/database/Seeders/eggs/minecraft/egg-vanilla-minecraft.yaml
+++ b/tests/_fixtures/egg-vanilla-minecraft.yaml
@@ -24,7 +24,7 @@ docker_images:
'Java 16': 'ghcr.io/pelican-eggs/yolks:java_16'
'Java 11': 'ghcr.io/pelican-eggs/yolks:java_11'
'Java 8': 'ghcr.io/pelican-eggs/yolks:java_8'
-file_denylist: { }
+file_denylist: { }
startup_commands:
Default: 'java -Xms128M -XX:MaxRAMPercentage=95.0 -jar {{SERVER_JARFILE}}'
config:
@@ -37,7 +37,7 @@ config:
query.port: '{{server.allocations.default.port}}'
startup:
done: ')! For help, type '
- logs: { }
+ logs: { }
stop: stop
scripts:
installation:
@@ -72,8 +72,7 @@ scripts:
container: 'ghcr.io/pelican-eggs/installers:alpine'
entrypoint: ash
variables:
- -
- name: 'Server Jar File'
+ - name: 'Server Jar File'
description: 'The name of the server jarfile to run the server with.'
env_variable: SERVER_JARFILE
default_value: server.jar
@@ -83,8 +82,7 @@ variables:
- required
- 'regex:/^([\w\d._-]+)(\.jar)$/'
sort: 1
- -
- name: 'Server Version'
+ - name: 'Server Version'
description: |-
The version of Minecraft Vanilla to install. Use "latest" to install the latest version, or use
"snapshot" to install the latest snapshot. Go to Settings > Reinstall Server to apply.