mirror of
https://github.com/fbelavenuto/arpl.git
synced 2026-01-03 23:22:05 +08:00
Compare commits
10 Commits
v0.3-alpha
...
v0.3-alpha
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ae78abc404 | ||
|
|
71df9e5a92 | ||
|
|
a74537aa02 | ||
|
|
16716b2172 | ||
|
|
027a412b65 | ||
|
|
4ea6b9ad5c | ||
|
|
c0209e0aae | ||
|
|
2c3ad3e7fb | ||
|
|
74f09ffcd9 | ||
|
|
acd413ab61 |
@@ -121,6 +121,7 @@ CONFIG_BLK_DEV_SD=y
|
|||||||
CONFIG_CHR_DEV_SG=y
|
CONFIG_CHR_DEV_SG=y
|
||||||
CONFIG_SCSI_CONSTANTS=y
|
CONFIG_SCSI_CONSTANTS=y
|
||||||
CONFIG_SCSI_SPI_ATTRS=y
|
CONFIG_SCSI_SPI_ATTRS=y
|
||||||
|
CONFIG_SCSI_SAS_ATA=y
|
||||||
CONFIG_BLK_DEV_3W_XXXX_RAID=m
|
CONFIG_BLK_DEV_3W_XXXX_RAID=m
|
||||||
CONFIG_SCSI_HPSA=m
|
CONFIG_SCSI_HPSA=m
|
||||||
CONFIG_SCSI_3W_9XXX=m
|
CONFIG_SCSI_3W_9XXX=m
|
||||||
@@ -184,9 +185,31 @@ CONFIG_SATA_SIL=m
|
|||||||
CONFIG_SATA_SIS=m
|
CONFIG_SATA_SIS=m
|
||||||
CONFIG_SATA_ULI=m
|
CONFIG_SATA_ULI=m
|
||||||
CONFIG_SATA_VIA=m
|
CONFIG_SATA_VIA=m
|
||||||
|
CONFIG_PATA_ALI=m
|
||||||
CONFIG_PATA_AMD=y
|
CONFIG_PATA_AMD=y
|
||||||
|
CONFIG_PATA_ARTOP=m
|
||||||
|
CONFIG_PATA_ATIIXP=m
|
||||||
|
CONFIG_PATA_ATP867X=m
|
||||||
|
CONFIG_PATA_CMD64X=m
|
||||||
|
CONFIG_PATA_EFAR=m
|
||||||
|
CONFIG_PATA_HPT366=m
|
||||||
|
CONFIG_PATA_HPT37X=m
|
||||||
|
CONFIG_PATA_HPT3X2N=m
|
||||||
|
CONFIG_PATA_HPT3X3=m
|
||||||
|
CONFIG_PATA_IT821X=m
|
||||||
|
CONFIG_PATA_JMICRON=m
|
||||||
|
CONFIG_PATA_NINJA32=m
|
||||||
|
CONFIG_PATA_NS87415=m
|
||||||
CONFIG_PATA_OLDPIIX=y
|
CONFIG_PATA_OLDPIIX=y
|
||||||
|
CONFIG_PATA_PDC2027X=m
|
||||||
|
CONFIG_PATA_PDC_OLD=m
|
||||||
|
CONFIG_PATA_RDC=m
|
||||||
CONFIG_PATA_SCH=y
|
CONFIG_PATA_SCH=y
|
||||||
|
CONFIG_PATA_SERVERWORKS=m
|
||||||
|
CONFIG_PATA_SIL680=m
|
||||||
|
CONFIG_PATA_TRIFLEX=m
|
||||||
|
CONFIG_PATA_VIA=m
|
||||||
|
CONFIG_PATA_WINBOND=m
|
||||||
CONFIG_ATA_GENERIC=y
|
CONFIG_ATA_GENERIC=y
|
||||||
CONFIG_MD=y
|
CONFIG_MD=y
|
||||||
CONFIG_BLK_DEV_MD=y
|
CONFIG_BLK_DEV_MD=y
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ dd if="/dev/zero" of="${IMAGE_FILE}" bs=1M count=300 conv=sync 2>/dev/null
|
|||||||
# Copy grub stage1 to image
|
# Copy grub stage1 to image
|
||||||
dd if="${BOARD_PATH}/grub.bin" of="${IMAGE_FILE}" conv=notrunc,sync 2>/dev/null
|
dd if="${BOARD_PATH}/grub.bin" of="${IMAGE_FILE}" conv=notrunc,sync 2>/dev/null
|
||||||
# Create partitions on image
|
# Create partitions on image
|
||||||
echo -e "n\np\n\n\n+150M\na\nt\n\n0b\nn\np\n\n\n+50M\nn\np\n\n\n\nw" | fdisk "${IMAGE_FILE}" >/dev/null
|
echo -e "n\np\n\n\n+50M\na\nt\n\n0b\nn\np\n\n\n+50M\nn\np\n\n\n\nw" | fdisk "${IMAGE_FILE}" >/dev/null
|
||||||
|
|
||||||
# Force umount, ignore errors
|
# Force umount, ignore errors
|
||||||
sudo umount "${BINARIES_DIR}/p1" 2>/dev/null || true
|
sudo umount "${BINARIES_DIR}/p1" 2>/dev/null || true
|
||||||
@@ -40,8 +40,8 @@ sudo mount /dev/loop8p1 "${BINARIES_DIR}/p1"
|
|||||||
sudo mount /dev/loop8p3 "${BINARIES_DIR}/p3"
|
sudo mount /dev/loop8p3 "${BINARIES_DIR}/p3"
|
||||||
|
|
||||||
echo "Copying files"
|
echo "Copying files"
|
||||||
sudo cp "${BINARIES_DIR}/bzImage" "${BINARIES_DIR}/p1/bzImage-arpl"
|
sudo cp "${BINARIES_DIR}/bzImage" "${BINARIES_DIR}/p3/bzImage-arpl"
|
||||||
sudo cp "${BINARIES_DIR}/rootfs.cpio.xz" "${BINARIES_DIR}/p1/initrd-arpl"
|
sudo cp "${BINARIES_DIR}/rootfs.cpio.xz" "${BINARIES_DIR}/p3/initrd-arpl"
|
||||||
sudo cp -R "${BOARD_PATH}/p1/"* "${BINARIES_DIR}/p1"
|
sudo cp -R "${BOARD_PATH}/p1/"* "${BINARIES_DIR}/p1"
|
||||||
sudo cp -R "${BOARD_PATH}/p3/"* "${BINARIES_DIR}/p3"
|
sudo cp -R "${BOARD_PATH}/p3/"* "${BINARIES_DIR}/p3"
|
||||||
sync
|
sync
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
ARPL_VERSION="0.3-alpha4"
|
ARPL_VERSION="0.3-alpha5"
|
||||||
|
|
||||||
# Define paths
|
# Define paths
|
||||||
TMP_PATH="/tmp"
|
TMP_PATH="/tmp"
|
||||||
@@ -8,12 +8,14 @@ RAMDISK_PATH="${TMP_PATH}/ramdisk"
|
|||||||
LOG_FILE="${TMP_PATH}/log.txt"
|
LOG_FILE="${TMP_PATH}/log.txt"
|
||||||
|
|
||||||
USER_CONFIG_FILE="${BOOTLOADER_PATH}/user-config.yml"
|
USER_CONFIG_FILE="${BOOTLOADER_PATH}/user-config.yml"
|
||||||
MOD_ZIMAGE_FILE="${BOOTLOADER_PATH}/zImage"
|
|
||||||
MOD_RDGZ_FILE="${BOOTLOADER_PATH}/rd.gz"
|
|
||||||
|
|
||||||
ORI_ZIMAGE_FILE="${SLPART_PATH}/zImage"
|
ORI_ZIMAGE_FILE="${SLPART_PATH}/zImage"
|
||||||
ORI_RDGZ_FILE="${SLPART_PATH}/rd.gz"
|
ORI_RDGZ_FILE="${SLPART_PATH}/rd.gz"
|
||||||
|
|
||||||
|
ARPL_BZIMAGE_FILE="${CACHE_PATH}/bzImage-arpl"
|
||||||
|
ARPL_RAMDISK_FILE="${CACHE_PATH}/initrd-arpl"
|
||||||
|
MOD_ZIMAGE_FILE="${CACHE_PATH}/zImage-dsm"
|
||||||
|
MOD_RDGZ_FILE="${CACHE_PATH}/initrd-dsm"
|
||||||
ADDONS_PATH="${CACHE_PATH}/addons"
|
ADDONS_PATH="${CACHE_PATH}/addons"
|
||||||
LKM_PATH="${CACHE_PATH}/lkms"
|
LKM_PATH="${CACHE_PATH}/lkms"
|
||||||
MODULES_PATH="${CACHE_PATH}/modules"
|
MODULES_PATH="${CACHE_PATH}/modules"
|
||||||
|
|||||||
@@ -109,6 +109,15 @@ function buildMenu() {
|
|||||||
while IFS="=" read KEY VALUE; do
|
while IFS="=" read KEY VALUE; do
|
||||||
writeConfigKey "synoinfo.${KEY}" "${VALUE}" "${USER_CONFIG_FILE}"
|
writeConfigKey "synoinfo.${KEY}" "${VALUE}" "${USER_CONFIG_FILE}"
|
||||||
done < <(readModelMap "${MODEL}" "builds.${BUILD}.synoinfo")
|
done < <(readModelMap "${MODEL}" "builds.${BUILD}.synoinfo")
|
||||||
|
# Check addons
|
||||||
|
PLATFORM="`readModelKey "${MODEL}" "platform"`"
|
||||||
|
KVER="`readModelKey "${MODEL}" "builds.${BUILD}.kver"`"
|
||||||
|
while IFS="=" read ADDON PARAM; do
|
||||||
|
[ -z "${ADDON}" ] && continue
|
||||||
|
if ! checkAddonExist "${ADDON}" "${PLATFORM}" "${KVER}"; then
|
||||||
|
deleteConfigKey "addons.${ADDON}" "${USER_CONFIG_FILE}"
|
||||||
|
fi
|
||||||
|
done < <(readConfigMap "addons" "${USER_CONFIG_FILE}")
|
||||||
# Remove old files
|
# Remove old files
|
||||||
rm -f "${ORI_ZIMAGE_FILE}" "${ORI_RDGZ_FILE}" "${MOD_ZIMAGE_FILE}" "${MOD_RDGZ_FILE}"
|
rm -f "${ORI_ZIMAGE_FILE}" "${ORI_RDGZ_FILE}" "${MOD_ZIMAGE_FILE}" "${MOD_RDGZ_FILE}"
|
||||||
DIRTY=1
|
DIRTY=1
|
||||||
@@ -430,7 +439,8 @@ function synoinfoMenu() {
|
|||||||
--inputbox "Type a name of synoinfo entry" 0 0 \
|
--inputbox "Type a name of synoinfo entry" 0 0 \
|
||||||
2>${TMP_PATH}/resp
|
2>${TMP_PATH}/resp
|
||||||
[ $? -ne 0 ] && continue
|
[ $? -ne 0 ] && continue
|
||||||
NAME="`sed 's/://g' <"${TMP_PATH}/resp"`"
|
NAME="`<"${TMP_PATH}/resp"`"
|
||||||
|
[ -z "${NAME}" ] && continue
|
||||||
dialog --backtitle "`backtitle`" --title "Synoinfo entries" \
|
dialog --backtitle "`backtitle`" --title "Synoinfo entries" \
|
||||||
--inputbox "Type a value of '${NAME}' entry" 0 0 "${SYNOINFO[${NAME}]}" \
|
--inputbox "Type a value of '${NAME}' entry" 0 0 "${SYNOINFO[${NAME}]}" \
|
||||||
2>${TMP_PATH}/resp
|
2>${TMP_PATH}/resp
|
||||||
@@ -770,8 +780,8 @@ function updateMenu() {
|
|||||||
fi
|
fi
|
||||||
dialog --backtitle "`backtitle`" --title "Update arpl" --aspect 18 \
|
dialog --backtitle "`backtitle`" --title "Update arpl" --aspect 18 \
|
||||||
--infobox "Installing new files" 0 0
|
--infobox "Installing new files" 0 0
|
||||||
mv /tmp/bzImage /mnt/p1/bzImage-arpl
|
mv /tmp/bzImage "${ARPL_BZIMAGE_FILE}"
|
||||||
mv /tmp/rootfs.cpio.xz /mnt/p1/initrd-arpl
|
mv /tmp/rootfs.cpio.xz "${ARPL_RAMDISK_FILE}"
|
||||||
dialog --backtitle "`backtitle`" --title "Update arpl" --aspect 18 \
|
dialog --backtitle "`backtitle`" --title "Update arpl" --aspect 18 \
|
||||||
--yesno "Arpl updated with success to ${TAG}!\nReboot?" 0 0
|
--yesno "Arpl updated with success to ${TAG}!\nReboot?" 0 0
|
||||||
[ $? -ne 0 ] && continue
|
[ $? -ne 0 ] && continue
|
||||||
|
|||||||
@@ -11,6 +11,8 @@ synoinfo: &synoinfo
|
|||||||
updateurl: "http://example.com/"
|
updateurl: "http://example.com/"
|
||||||
myds_region_api_base_url: "https://example.com"
|
myds_region_api_base_url: "https://example.com"
|
||||||
security_version_server: "https://example.com/smallupdate"
|
security_version_server: "https://example.com/smallupdate"
|
||||||
|
supportraidgroup: "no"
|
||||||
|
supportssdcache: "no"
|
||||||
cmdline: &cmdline
|
cmdline: &cmdline
|
||||||
SMBusHddDynamicPower: 1
|
SMBusHddDynamicPower: 1
|
||||||
vender_format_version: 2
|
vender_format_version: 2
|
||||||
|
|||||||
@@ -7,6 +7,10 @@ synoinfo: &synoinfo
|
|||||||
small_info_path: "https://example.com/null"
|
small_info_path: "https://example.com/null"
|
||||||
updateurl: "http://example.com/"
|
updateurl: "http://example.com/"
|
||||||
myds_region_api_base_url: "https://example.com"
|
myds_region_api_base_url: "https://example.com"
|
||||||
|
support_disk_compatibility: "no"
|
||||||
|
support_memory_compatibility: "no"
|
||||||
|
supportraidgroup: "no"
|
||||||
|
supportssdcache: "no"
|
||||||
cmdline: &cmdline
|
cmdline: &cmdline
|
||||||
syno_hdd_powerup_seq: 0
|
syno_hdd_powerup_seq: 0
|
||||||
HddHotplug: 0
|
HddHotplug: 0
|
||||||
|
|||||||
@@ -11,6 +11,10 @@ synoinfo: &synoinfo
|
|||||||
updateurl: "http://example.com/"
|
updateurl: "http://example.com/"
|
||||||
myds_region_api_base_url: "https://example.com"
|
myds_region_api_base_url: "https://example.com"
|
||||||
security_version_server: "https://example.com/smallupdate"
|
security_version_server: "https://example.com/smallupdate"
|
||||||
|
support_disk_compatibility: "no"
|
||||||
|
support_memory_compatibility: "no"
|
||||||
|
supportraidgroup: "no"
|
||||||
|
supportssdcache: "no"
|
||||||
cmdline: &cmdline
|
cmdline: &cmdline
|
||||||
syno_hdd_powerup_seq: 0
|
syno_hdd_powerup_seq: 0
|
||||||
HddHotplug: 0
|
HddHotplug: 0
|
||||||
|
|||||||
@@ -94,9 +94,6 @@ gzip -dc "${CACHE_PATH}/modules/firmware.tgz" | tar xf - -C "${RAMDISK_PATH}/usr
|
|||||||
# Clean
|
# Clean
|
||||||
rm -rf "${TMP_PATH}/modules"
|
rm -rf "${TMP_PATH}/modules"
|
||||||
|
|
||||||
# Build modules dependencies
|
|
||||||
/opt/arpl/depmod -a -b ${RAMDISK_PATH} 2>/dev/null
|
|
||||||
|
|
||||||
echo -n "."
|
echo -n "."
|
||||||
# Copying fake modprobe
|
# Copying fake modprobe
|
||||||
cp "${PATCH_PATH}/iosched-trampoline.sh" "${RAMDISK_PATH}/usr/sbin/modprobe"
|
cp "${PATCH_PATH}/iosched-trampoline.sh" "${RAMDISK_PATH}/usr/sbin/modprobe"
|
||||||
@@ -107,15 +104,22 @@ cp "${LKM_PATH}/rp-${PLATFORM}-${KVER}-${LKM}.ko" "${RAMDISK_PATH}/usr/lib/modul
|
|||||||
MAXDISKS=`readConfigKey "maxdisks" "${USER_CONFIG_FILE}"`
|
MAXDISKS=`readConfigKey "maxdisks" "${USER_CONFIG_FILE}"`
|
||||||
# Check if model needs Device-tree dynamic patch
|
# Check if model needs Device-tree dynamic patch
|
||||||
DT="`readModelKey "${MODEL}" "dt"`"
|
DT="`readModelKey "${MODEL}" "dt"`"
|
||||||
# Add system addon "dtbpatch" or "maxdisks"
|
|
||||||
[ "${DT}" = "true" ] && ADDONS['dtbpatch']="" || ADDONS['maxdisks']="${MAXDISKS}"
|
|
||||||
# Indispensable eudev system addon
|
|
||||||
ADDONS['eudev']=""
|
|
||||||
|
|
||||||
echo -n "."
|
echo -n "."
|
||||||
mkdir -p "${RAMDISK_PATH}/addons"
|
mkdir -p "${RAMDISK_PATH}/addons"
|
||||||
echo "#!/bin/sh" > "${RAMDISK_PATH}/addons/addons.sh"
|
echo "#!/bin/sh" > "${RAMDISK_PATH}/addons/addons.sh"
|
||||||
echo 'echo "addons.sh called with params ${@}"' >> "${RAMDISK_PATH}/addons/addons.sh"
|
echo 'echo "addons.sh called with params ${@}"' >> "${RAMDISK_PATH}/addons/addons.sh"
|
||||||
|
# Required eudev and dtbpatch/maxdisks
|
||||||
|
installAddon eudev
|
||||||
|
echo "/addons/eudev.sh \${1} " >> "${RAMDISK_PATH}/addons/addons.sh" 2>"${LOG_FILE}" || dieLog
|
||||||
|
if [ "${DT}" = "true" ]; then
|
||||||
|
installAddon dtbpatch
|
||||||
|
echo "/addons/dtbpatch.sh \${1} " >> "${RAMDISK_PATH}/addons/addons.sh" 2>"${LOG_FILE}" || dieLog
|
||||||
|
else
|
||||||
|
installAddon maxdisks
|
||||||
|
echo "/addons/maxdisks.sh \${1} ${MAXDISKS}" >> "${RAMDISK_PATH}/addons/addons.sh" 2>"${LOG_FILE}" || dieLog
|
||||||
|
fi
|
||||||
|
# User addons
|
||||||
for ADDON in ${!ADDONS[@]}; do
|
for ADDON in ${!ADDONS[@]}; do
|
||||||
PARAMS=${ADDONS[${ADDON}]}
|
PARAMS=${ADDONS[${ADDON}]}
|
||||||
if ! installAddon ${ADDON}; then
|
if ! installAddon ${ADDON}; then
|
||||||
@@ -126,6 +130,9 @@ for ADDON in ${!ADDONS[@]}; do
|
|||||||
done
|
done
|
||||||
chmod +x "${RAMDISK_PATH}/addons/addons.sh"
|
chmod +x "${RAMDISK_PATH}/addons/addons.sh"
|
||||||
|
|
||||||
|
# Build modules dependencies
|
||||||
|
/opt/arpl/depmod -a -b ${RAMDISK_PATH} 2>/dev/null
|
||||||
|
|
||||||
# Reassembly ramdisk
|
# Reassembly ramdisk
|
||||||
echo -n "."
|
echo -n "."
|
||||||
if [ "${RD_COMPRESSED}" == "true" ]; then
|
if [ "${RD_COMPRESSED}" == "true" ]; then
|
||||||
|
|||||||
@@ -51,8 +51,8 @@ if serial --unit=0 --speed=115200; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
insmod search
|
insmod search
|
||||||
search --set=root --label "ARPL1"
|
search --set=root --label "ARPL3"
|
||||||
if [ -s /zImage -a -s /rd.gz ]; then
|
if [ -s /zImage-dsm -a -s /initrd-dsm ]; then
|
||||||
menuentry 'Boot DSM' --id boot {
|
menuentry 'Boot DSM' --id boot {
|
||||||
echo "Loading kernel..."
|
echo "Loading kernel..."
|
||||||
linux /bzImage-arpl console=ttyS0,115200n8 quiet
|
linux /bzImage-arpl console=ttyS0,115200n8 quiet
|
||||||
|
|||||||
BIN
files/board/arpl/p3/addons/9p/apollolake-4.4.180.tgz
Normal file
BIN
files/board/arpl/p3/addons/9p/apollolake-4.4.180.tgz
Normal file
Binary file not shown.
BIN
files/board/arpl/p3/addons/9p/broadwell-4.4.180.tgz
Normal file
BIN
files/board/arpl/p3/addons/9p/broadwell-4.4.180.tgz
Normal file
Binary file not shown.
BIN
files/board/arpl/p3/addons/9p/broadwellnk-4.4.180.tgz
Normal file
BIN
files/board/arpl/p3/addons/9p/broadwellnk-4.4.180.tgz
Normal file
Binary file not shown.
BIN
files/board/arpl/p3/addons/9p/bromolow-3.10.108.tgz
Normal file
BIN
files/board/arpl/p3/addons/9p/bromolow-3.10.108.tgz
Normal file
Binary file not shown.
BIN
files/board/arpl/p3/addons/9p/denverton-4.4.180.tgz
Normal file
BIN
files/board/arpl/p3/addons/9p/denverton-4.4.180.tgz
Normal file
Binary file not shown.
BIN
files/board/arpl/p3/addons/9p/geminilake-4.4.180.tgz
Normal file
BIN
files/board/arpl/p3/addons/9p/geminilake-4.4.180.tgz
Normal file
Binary file not shown.
25
files/board/arpl/p3/addons/9p/manifest.yml
Normal file
25
files/board/arpl/p3/addons/9p/manifest.yml
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
version: 1
|
||||||
|
name: 9p
|
||||||
|
description: "Driver for virtio 9p"
|
||||||
|
available-for:
|
||||||
|
bromolow-3.10.108:
|
||||||
|
install-script: &script "install.sh"
|
||||||
|
copy: "bromolow-3.10.108"
|
||||||
|
apollolake-4.4.180:
|
||||||
|
install-script: *script
|
||||||
|
copy: "apollolake-4.4.180"
|
||||||
|
broadwell-4.4.180:
|
||||||
|
install-script: *script
|
||||||
|
copy: "broadwell-4.4.180"
|
||||||
|
broadwellnk-4.4.180:
|
||||||
|
install-script: *script
|
||||||
|
copy: "broadwellnk-4.4.180"
|
||||||
|
denverton-4.4.180:
|
||||||
|
install-script: *script
|
||||||
|
copy: "denverton-4.4.180"
|
||||||
|
geminilake-4.4.180:
|
||||||
|
install-script: *script
|
||||||
|
copy: "geminilake-4.4.180"
|
||||||
|
v1000-4.4.180:
|
||||||
|
install-script: *script
|
||||||
|
copy: "v1000-4.4.180"
|
||||||
BIN
files/board/arpl/p3/addons/9p/v1000-4.4.180.tgz
Normal file
BIN
files/board/arpl/p3/addons/9p/v1000-4.4.180.tgz
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -62,3 +62,4 @@ BR2_PACKAGE_HOST_DOSFSTOOLS=y
|
|||||||
BR2_PACKAGE_HOST_E2FSPROGS=y
|
BR2_PACKAGE_HOST_E2FSPROGS=y
|
||||||
BR2_PACKAGE_R8168=y
|
BR2_PACKAGE_R8168=y
|
||||||
BR2_PACKAGE_R8125=y
|
BR2_PACKAGE_R8125=y
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user