diff --git a/multisrc/overrides/madara/alnscans/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/alnscans/res/mipmap-hdpi/ic_launcher.png
deleted file mode 100644
index 4a51a9c16..000000000
Binary files a/multisrc/overrides/madara/alnscans/res/mipmap-hdpi/ic_launcher.png and /dev/null differ
diff --git a/multisrc/overrides/madara/alnscans/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/alnscans/res/mipmap-mdpi/ic_launcher.png
deleted file mode 100644
index d7a3354a5..000000000
Binary files a/multisrc/overrides/madara/alnscans/res/mipmap-mdpi/ic_launcher.png and /dev/null differ
diff --git a/multisrc/overrides/madara/alnscans/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/alnscans/res/mipmap-xhdpi/ic_launcher.png
deleted file mode 100644
index 96fd0e51c..000000000
Binary files a/multisrc/overrides/madara/alnscans/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ
diff --git a/multisrc/overrides/madara/alnscans/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/alnscans/res/mipmap-xxhdpi/ic_launcher.png
deleted file mode 100644
index 28302bf8d..000000000
Binary files a/multisrc/overrides/madara/alnscans/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ
diff --git a/multisrc/overrides/madara/alnscans/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/alnscans/res/mipmap-xxxhdpi/ic_launcher.png
deleted file mode 100644
index 57e4d2407..000000000
Binary files a/multisrc/overrides/madara/alnscans/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ
diff --git a/multisrc/overrides/madara/alnscans/res/web_hi_res_512.png b/multisrc/overrides/madara/alnscans/res/web_hi_res_512.png
deleted file mode 100644
index 19d9942fb..000000000
Binary files a/multisrc/overrides/madara/alnscans/res/web_hi_res_512.png and /dev/null differ
diff --git a/multisrc/overrides/madara/mangaarabteam/src/MangaArabTeam.kt b/multisrc/overrides/madara/mangaarabteam/src/MangaArabTeam.kt
deleted file mode 100644
index ac2620f9c..000000000
--- a/multisrc/overrides/madara/mangaarabteam/src/MangaArabTeam.kt
+++ /dev/null
@@ -1,14 +0,0 @@
-package eu.kanade.tachiyomi.extension.ar.mangaarabteam
-
-import eu.kanade.tachiyomi.multisrc.madara.Madara
-import eu.kanade.tachiyomi.network.GET
-import eu.kanade.tachiyomi.source.model.Page
-import okhttp3.Request
-import java.text.SimpleDateFormat
-import java.util.Locale
-
-class MangaArabTeam : Madara("مانجا عرب تيم Manga Arab Team", "https://mangaarbteam.com", "ar", SimpleDateFormat("dd MMM، yyyy", Locale.forLanguageTag("ar"))) {
-    override fun imageRequest(page: Page): Request {
-        return GET(page.imageUrl!!.replace("http:", "https:"))
-    }
-}
diff --git a/multisrc/overrides/madara/manhwatime/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/manhwatime/res/mipmap-hdpi/ic_launcher.png
deleted file mode 100644
index f2d1811d7..000000000
Binary files a/multisrc/overrides/madara/manhwatime/res/mipmap-hdpi/ic_launcher.png and /dev/null differ
diff --git a/multisrc/overrides/madara/manhwatime/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/manhwatime/res/mipmap-mdpi/ic_launcher.png
deleted file mode 100644
index d3f374d6f..000000000
Binary files a/multisrc/overrides/madara/manhwatime/res/mipmap-mdpi/ic_launcher.png and /dev/null differ
diff --git a/multisrc/overrides/madara/manhwatime/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/manhwatime/res/mipmap-xhdpi/ic_launcher.png
deleted file mode 100644
index 2245b31e5..000000000
Binary files a/multisrc/overrides/madara/manhwatime/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ
diff --git a/multisrc/overrides/madara/manhwatime/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/manhwatime/res/mipmap-xxhdpi/ic_launcher.png
deleted file mode 100644
index 51e88c01c..000000000
Binary files a/multisrc/overrides/madara/manhwatime/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ
diff --git a/multisrc/overrides/madara/manhwatime/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/manhwatime/res/mipmap-xxxhdpi/ic_launcher.png
deleted file mode 100644
index 771b5c7dd..000000000
Binary files a/multisrc/overrides/madara/manhwatime/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ
diff --git a/multisrc/overrides/madara/manhwatime/res/web_hi_res_512.png b/multisrc/overrides/madara/manhwatime/res/web_hi_res_512.png
deleted file mode 100644
index f3d7131af..000000000
Binary files a/multisrc/overrides/madara/manhwatime/res/web_hi_res_512.png and /dev/null differ
diff --git a/multisrc/overrides/madara/trapscans/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/trapscans/res/mipmap-hdpi/ic_launcher.png
deleted file mode 100644
index 31170ff21..000000000
Binary files a/multisrc/overrides/madara/trapscans/res/mipmap-hdpi/ic_launcher.png and /dev/null differ
diff --git a/multisrc/overrides/madara/trapscans/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/trapscans/res/mipmap-mdpi/ic_launcher.png
deleted file mode 100644
index a18873c8c..000000000
Binary files a/multisrc/overrides/madara/trapscans/res/mipmap-mdpi/ic_launcher.png and /dev/null differ
diff --git a/multisrc/overrides/madara/trapscans/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/trapscans/res/mipmap-xhdpi/ic_launcher.png
deleted file mode 100644
index 65e67f049..000000000
Binary files a/multisrc/overrides/madara/trapscans/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ
diff --git a/multisrc/overrides/madara/trapscans/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/trapscans/res/mipmap-xxhdpi/ic_launcher.png
deleted file mode 100644
index 06e893ab2..000000000
Binary files a/multisrc/overrides/madara/trapscans/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ
diff --git a/multisrc/overrides/madara/trapscans/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/trapscans/res/mipmap-xxxhdpi/ic_launcher.png
deleted file mode 100644
index 5cbd28b4a..000000000
Binary files a/multisrc/overrides/madara/trapscans/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ
diff --git a/multisrc/overrides/madara/trapscans/res/web_hi_res_512.png b/multisrc/overrides/madara/trapscans/res/web_hi_res_512.png
deleted file mode 100644
index 54599cf1f..000000000
Binary files a/multisrc/overrides/madara/trapscans/res/web_hi_res_512.png and /dev/null differ
diff --git a/multisrc/overrides/madara/trapscans/src/TrapScans.kt b/multisrc/overrides/madara/trapscans/src/TrapScans.kt
deleted file mode 100644
index 144657062..000000000
--- a/multisrc/overrides/madara/trapscans/src/TrapScans.kt
+++ /dev/null
@@ -1,8 +0,0 @@
-package eu.kanade.tachiyomi.extension.en.trapscans
-
-import eu.kanade.tachiyomi.multisrc.madara.Madara
-
-class TrapScans : Madara("Trap Scans", "https://trapscans.com", "en") {
-
-    override val mangaDetailsSelectorDescription = ".description-summary p"
-}
diff --git a/multisrc/overrides/mangathemesia/komiklab/src/KomikLabFactory.kt b/multisrc/overrides/mangathemesia/komiklab/src/KomikLabFactory.kt
deleted file mode 100644
index 5382a21bb..000000000
--- a/multisrc/overrides/mangathemesia/komiklab/src/KomikLabFactory.kt
+++ /dev/null
@@ -1,19 +0,0 @@
-package eu.kanade.tachiyomi.extension.all.komiklab
-
-import eu.kanade.tachiyomi.multisrc.mangathemesia.MangaThemesia
-import eu.kanade.tachiyomi.source.SourceFactory
-
-class KomikLabFactory : SourceFactory {
-    override fun createSources() = listOf(
-        KomikLabEn(),
-        KomikLabId(),
-    )
-}
-
-class KomikLabEn : MangaThemesia("KomikLab Scans", "https://komiklab.com", "en")
-
-class KomikLabId : MangaThemesia("Komik Lab", "https://komiklab.net", "id") {
-    override val hasProjectPage = true
-
-    override val seriesDetailsSelector = ".seriestucon"
-}
diff --git a/multisrc/overrides/mccms/haoman6/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/mccms/haoman6/res/mipmap-hdpi/ic_launcher.png
deleted file mode 100644
index 244552949..000000000
Binary files a/multisrc/overrides/mccms/haoman6/res/mipmap-hdpi/ic_launcher.png and /dev/null differ
diff --git a/multisrc/overrides/mccms/haoman6/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/mccms/haoman6/res/mipmap-mdpi/ic_launcher.png
deleted file mode 100644
index 177f76bc9..000000000
Binary files a/multisrc/overrides/mccms/haoman6/res/mipmap-mdpi/ic_launcher.png and /dev/null differ
diff --git a/multisrc/overrides/mccms/haoman6/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/mccms/haoman6/res/mipmap-xhdpi/ic_launcher.png
deleted file mode 100644
index abf8ee911..000000000
Binary files a/multisrc/overrides/mccms/haoman6/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ
diff --git a/multisrc/overrides/mccms/haoman6/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/mccms/haoman6/res/mipmap-xxhdpi/ic_launcher.png
deleted file mode 100644
index 8462b7bdb..000000000
Binary files a/multisrc/overrides/mccms/haoman6/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ
diff --git a/multisrc/overrides/mccms/haoman6/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/mccms/haoman6/res/mipmap-xxxhdpi/ic_launcher.png
deleted file mode 100644
index 8ba646a3a..000000000
Binary files a/multisrc/overrides/mccms/haoman6/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ
diff --git a/multisrc/overrides/mccms/haoman6/res/web_hi_res_512.png b/multisrc/overrides/mccms/haoman6/res/web_hi_res_512.png
deleted file mode 100644
index 7f1d38eb1..000000000
Binary files a/multisrc/overrides/mccms/haoman6/res/web_hi_res_512.png and /dev/null differ
diff --git a/multisrc/overrides/mccms/haoman6/src/Haoman6.kt b/multisrc/overrides/mccms/haoman6/src/Haoman6.kt
deleted file mode 100644
index 0f67d99ff..000000000
--- a/multisrc/overrides/mccms/haoman6/src/Haoman6.kt
+++ /dev/null
@@ -1,18 +0,0 @@
-package eu.kanade.tachiyomi.extension.zh.haoman6
-
-import eu.kanade.tachiyomi.multisrc.mccms.MCCMSWeb
-import eu.kanade.tachiyomi.network.GET
-import eu.kanade.tachiyomi.source.model.SChapter
-import eu.kanade.tachiyomi.source.model.SManga
-
-class Haoman6 : MCCMSWeb("好漫6", "https://www.haoman6.com") {
-    override fun SManga.cleanup() = apply {
-        description = description?.substringBefore(title)
-        title = title.removeSuffix("(最新在线)").removeSuffix("-")
-    }
-
-    override fun pageListRequest(chapter: SChapter) =
-        GET(baseUrl + chapter.url, headers)
-
-    override val lazyLoadImageAttr = "mob-ec"
-}
diff --git a/multisrc/overrides/mccms/haoman6glens/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/mccms/haoman6glens/res/mipmap-hdpi/ic_launcher.png
deleted file mode 100644
index 19c085465..000000000
Binary files a/multisrc/overrides/mccms/haoman6glens/res/mipmap-hdpi/ic_launcher.png and /dev/null differ
diff --git a/multisrc/overrides/mccms/haoman6glens/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/mccms/haoman6glens/res/mipmap-mdpi/ic_launcher.png
deleted file mode 100644
index 85b1119b8..000000000
Binary files a/multisrc/overrides/mccms/haoman6glens/res/mipmap-mdpi/ic_launcher.png and /dev/null differ
diff --git a/multisrc/overrides/mccms/haoman6glens/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/mccms/haoman6glens/res/mipmap-xhdpi/ic_launcher.png
deleted file mode 100644
index e8d38996e..000000000
Binary files a/multisrc/overrides/mccms/haoman6glens/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ
diff --git a/multisrc/overrides/mccms/haoman6glens/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/mccms/haoman6glens/res/mipmap-xxhdpi/ic_launcher.png
deleted file mode 100644
index 990f59368..000000000
Binary files a/multisrc/overrides/mccms/haoman6glens/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ
diff --git a/multisrc/overrides/mccms/haoman6glens/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/mccms/haoman6glens/res/mipmap-xxxhdpi/ic_launcher.png
deleted file mode 100644
index 75b64e69f..000000000
Binary files a/multisrc/overrides/mccms/haoman6glens/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ
diff --git a/multisrc/overrides/mccms/haoman6glens/res/web_hi_res_512.png b/multisrc/overrides/mccms/haoman6glens/res/web_hi_res_512.png
deleted file mode 100644
index 2c881f6d8..000000000
Binary files a/multisrc/overrides/mccms/haoman6glens/res/web_hi_res_512.png and /dev/null differ
diff --git a/multisrc/overrides/mccms/haoman6glens/src/Haoman6glens.kt b/multisrc/overrides/mccms/haoman6glens/src/Haoman6glens.kt
deleted file mode 100644
index 7b0ff5e58..000000000
--- a/multisrc/overrides/mccms/haoman6glens/src/Haoman6glens.kt
+++ /dev/null
@@ -1,12 +0,0 @@
-package eu.kanade.tachiyomi.extension.zh.haoman6glens
-
-import eu.kanade.tachiyomi.multisrc.mccms.MCCMSWeb
-import eu.kanade.tachiyomi.source.model.SManga
-
-class Haoman6glens : MCCMSWeb("好漫6 (g-lens)", "https://www.g-lens.com") {
-    override fun SManga.cleanup() = apply {
-        title = title.removeSuffix("_").removeSuffix("-").removeSuffix("漫画")
-    }
-
-    override val lazyLoadImageAttr = "pc-ec"
-}
diff --git a/multisrc/overrides/mymangacms/lkdtt/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/mymangacms/lkdtt/res/mipmap-hdpi/ic_launcher.png
deleted file mode 100644
index c42b4063a..000000000
Binary files a/multisrc/overrides/mymangacms/lkdtt/res/mipmap-hdpi/ic_launcher.png and /dev/null differ
diff --git a/multisrc/overrides/mymangacms/lkdtt/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/mymangacms/lkdtt/res/mipmap-mdpi/ic_launcher.png
deleted file mode 100644
index b2150bb89..000000000
Binary files a/multisrc/overrides/mymangacms/lkdtt/res/mipmap-mdpi/ic_launcher.png and /dev/null differ
diff --git a/multisrc/overrides/mymangacms/lkdtt/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/mymangacms/lkdtt/res/mipmap-xhdpi/ic_launcher.png
deleted file mode 100644
index dc243cd2a..000000000
Binary files a/multisrc/overrides/mymangacms/lkdtt/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ
diff --git a/multisrc/overrides/mymangacms/lkdtt/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/mymangacms/lkdtt/res/mipmap-xxhdpi/ic_launcher.png
deleted file mode 100644
index 580330e4f..000000000
Binary files a/multisrc/overrides/mymangacms/lkdtt/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ
diff --git a/multisrc/overrides/mymangacms/lkdtt/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/mymangacms/lkdtt/res/mipmap-xxxhdpi/ic_launcher.png
deleted file mode 100644
index 1d00d3744..000000000
Binary files a/multisrc/overrides/mymangacms/lkdtt/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ
diff --git a/multisrc/overrides/mymangacms/lkdtt/res/web_hi_res_512.png b/multisrc/overrides/mymangacms/lkdtt/res/web_hi_res_512.png
deleted file mode 100644
index 57120ab13..000000000
Binary files a/multisrc/overrides/mymangacms/lkdtt/res/web_hi_res_512.png and /dev/null differ
diff --git a/multisrc/overrides/mymangacms/lkdtt/src/LKDTT.kt b/multisrc/overrides/mymangacms/lkdtt/src/LKDTT.kt
deleted file mode 100644
index e1a87aca3..000000000
--- a/multisrc/overrides/mymangacms/lkdtt/src/LKDTT.kt
+++ /dev/null
@@ -1,121 +0,0 @@
-package eu.kanade.tachiyomi.extension.vi.lkdtt
-
-import eu.kanade.tachiyomi.multisrc.mymangacms.MyMangaCMS
-import java.text.SimpleDateFormat
-import java.util.Locale
-import java.util.TimeZone
-
-class LKDTT : MyMangaCMS("LKDTT", "https://lkdttee.com", "vi") {
-    override val dateFormatter = SimpleDateFormat("dd/MM/yy", Locale.US).apply {
-        timeZone = TimeZone.getTimeZone(super.timeZone)
-    }
-
-    override fun dateUpdatedParser(date: String): Long =
-        runCatching { super.dateUpdatedParser(date.split(" - ")[1]) }.getOrNull() ?: 0L
-
-    override fun getGenreList() = listOf(
-        Genre("Học đường", 1),
-        Genre("Hài hước", 2),
-        Genre("Cổ Đại", 3),
-        Genre("Hiện đại", 4),
-        Genre("Kinh dị", 5),
-        Genre("Tổng tài", 6),
-        Genre("Xuyên không", 7),
-        Genre("Manhua", 8),
-        Genre("Manhwa", 9),
-        Genre("Mystery", 10),
-        Genre("One shot", 11),
-        Genre("Smut", 12),
-        Genre("Webtoon", 13),
-        Genre("Yaoi", 14),
-        Genre("Yuri", 15),
-        Genre("Trinh Thám", 16),
-        Genre("Tình Cảm", 17),
-        Genre("Drama", 18),
-        Genre("Comedy", 19),
-        Genre("Fantasy", 20),
-        Genre("Novel", 21),
-        Genre("Action", 22),
-        Genre("Manga", 23),
-        Genre("Đam Mỹ", 24),
-        Genre("Trọng Sinh", 25),
-        Genre("Ngôn Tình", 26),
-        Genre("Phiêu Lưu", 27),
-        Genre("Boy Love", 28),
-        Genre("giới giải trí", 29),
-        Genre("đô thị", 30),
-        Genre("Romance", 31),
-        Genre("Đô Thị", 32),
-        Genre("Shoujo", 33),
-        Genre("Historical", 34),
-        Genre("Slice of life", 35),
-        Genre("Mature", 36),
-        Genre("GL", 37),
-        Genre("Adult", 38),
-        Genre("Huyền huyễn", 39),
-        Genre("Baby", 40),
-        Genre("Tragedy", 41),
-        Genre("Truyện Màu", 42),
-        Genre("School Life", 43),
-        Genre("Josei", 44),
-        Genre("Oneshot", 45),
-        Genre("Gender Bender", 46),
-        Genre("Nữ cường", 47),
-        Genre("Harem", 48),
-        Genre("Reverse Harem", 49),
-        Genre("Isekai", 50),
-        Genre("Adventure", 51),
-        Genre("Chuyển Sinh", 52),
-        Genre("Đại Nữ Chủ", 53),
-        Genre("Shounen", 54),
-        Genre("Sports", 55),
-        Genre("Sủng Ngọt", 56),
-        Genre("Truyện 18+", 57),
-        Genre("Trung Cổ", 58),
-        Genre("Ma Thuật", 59),
-        Genre("Webtoons", 60),
-        Genre("Xuyên", 61),
-        Genre("Ngôn", 62),
-        Genre("Tiểu Bạch Thỏ", 63),
-        Genre("Sủng", 65),
-        Genre("Trùng Sinh", 66),
-        Genre("Ma Cà Rồng", 67),
-        Genre("Tái Sinh", 68),
-        Genre("Quân Nhân", 69),
-        Genre("Showbiz", 70),
-        Genre("Comic", 71),
-        Genre("Phép Thuật", 72),
-        Genre("Psychological", 73),
-        Genre("Supernatural", 74),
-        Genre("Lãng Mạn", 75),
-        Genre("Gender", 76),
-        Genre("Bender", 77),
-        Genre("Vườn Trường", 78),
-        Genre("Magic", 79),
-        Genre("Nhân Thú", 80),
-        Genre("Soft Yaoi", 81),
-        Genre("Hôn Nhân Hợp Đồng", 82),
-        Genre("Cưới Trước Yêu Sau", 83),
-        Genre("Bi Kịch", 84),
-        Genre("Horror", 85),
-        Genre("Reincarnation", 86),
-        Genre("Hồi Sinh", 87),
-        Genre("Hoàng Gia", 88),
-        Genre("Giả Tưởng", 89),
-        Genre("Xuyên Sách", 90),
-        Genre("Hài", 91),
-        Genre("Ngọt", 92),
-        Genre("Nam Cường", 93),
-        Genre("Chủ Nam", 94),
-        Genre("Minh Tinh", 95),
-        Genre("Cổ Trang", 96),
-        Genre("Xuyên Game", 97),
-        Genre("Villainess", 98),
-        Genre("Cung Đấu", 99),
-        Genre("Hành Động", 100),
-        Genre("Truyện Tranh", 101),
-        Genre("Adaptation", 102),
-        Genre("Magi", 103),
-        Genre("Âu Cổ", 104),
-    )
-}
diff --git a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/madara/MadaraGenerator.kt b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/madara/MadaraGenerator.kt
index cf3263110..033ac6fa1 100644
--- a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/madara/MadaraGenerator.kt
+++ b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/madara/MadaraGenerator.kt
@@ -31,7 +31,6 @@ class MadaraGenerator : ThemeSourceGenerator {
         SingleLang("AkuManga", "https://akumanga.com", "ar", overrideVersionCode = 1),
         SingleLang("Akuzenai Arts", "https://akuzenaiarts.org", "en"),
         SingleLang("AllPornComic", "https://allporncomic.com", "en", isNsfw = true),
-        SingleLang("Aln Scans", "https://alnscans.com", "en"),
         SingleLang("Amuy", "https://apenasmaisumyaoi.com", "pt-BR", isNsfw = true, overrideVersionCode = 1),
         SingleLang("Anikiga", "https://anikiga.com", "tr"),
         SingleLang("Anisa Manga", "https://anisamanga.com", "tr"),
@@ -348,7 +347,6 @@ class MadaraGenerator : ThemeSourceGenerator {
         SingleLang("ManhwaManhua", "https://manhwamanhua.com", "en", isNsfw = true),
         SingleLang("ManhwaNew", "https://manhwanew.com", "en", isNsfw = true),
         SingleLang("Manhwas Men", "https://manhwas.men", "en", className = "ManhwasMen", isNsfw = true),
-        SingleLang("ManhwaTime", "https://manhwatime.com", "ar"),
         SingleLang("Manhwatop", "https://manhwatop.com", "en", overrideVersionCode = 2),
         SingleLang("ManhwaWorld", "https://manhwaworld.com", "en"),
         SingleLang("Manhwua.fans", "https://manhwua.fans", "en", isNsfw = true, className = "Manhwuafans"),
@@ -477,7 +475,6 @@ class MadaraGenerator : ThemeSourceGenerator {
         SingleLang("Top Manhua", "https://topmanhua.com", "en", overrideVersionCode = 2),
         SingleLang("Tortuga Ceviri", "https://tortuga-ceviri.com", "tr"),
         SingleLang("Traducciones Moonlight", "https://traduccionesmoonlight.com", "es"),
-        SingleLang("Trap Scans", "https://trapscans.com", "en"),
         SingleLang("TreeManga", "https://treemanga.com", "en", overrideVersionCode = 1),
         SingleLang("TritiniaScans", "https://tritinia.org", "en", overrideVersionCode = 4),
         SingleLang("Tumangaonline.site", "https://tumangaonline.site", "es", isNsfw = true, className = "TumangaonlineSite", pkgName = "tumangaonlinesite"),
@@ -525,7 +522,6 @@ class MadaraGenerator : ThemeSourceGenerator {
         SingleLang("شبكة كونان العربية", "https://manga.detectiveconanar.com", "ar", className = "DetectiveConanAr", overrideVersionCode = 2),
         SingleLang("عرب تونز", "https://arabtoons.net", "ar", isNsfw = true, className = "ArabToons"),
         SingleLang("مانجا العاشق", "https://3asq.org", "ar", className = "Manga3asq", overrideVersionCode = 2),
-        SingleLang("مانجا عرب تيم Manga Arab Team", "https://mangaarbteam.com", "ar", className = "MangaArabTeam", overrideVersionCode = 1),
         SingleLang("مانجا ليك", "https://mangalek.com", "ar", className = "Mangalek", overrideVersionCode = 2),
         SingleLang("مانجا ليكس", "https://mangaleks.com", "ar", className = "MangaLeks"),
         SingleLang("مانجا لينك", "https://mangalink.io", "ar", className = "MangaLinkio", overrideVersionCode = 3),
diff --git a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mangathemesia/MangaThemesiaGenerator.kt b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mangathemesia/MangaThemesiaGenerator.kt
index 3fdd27f79..aafe4a78b 100644
--- a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mangathemesia/MangaThemesiaGenerator.kt
+++ b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mangathemesia/MangaThemesiaGenerator.kt
@@ -16,7 +16,6 @@ class MangaThemesiaGenerator : ThemeSourceGenerator {
     override val sources = listOf(
         MultiLang("Asura Scans", "https://asuracomics.com", listOf("en", "tr"), className = "AsuraScansFactory", pkgName = "asurascans", overrideVersionCode = 26),
         MultiLang("Flame Scans", "https://flamescans.org", listOf("en"), className = "FlameScansFactory", pkgName = "flamescans", overrideVersionCode = 4),
-        MultiLang("Komik Lab", "https://komiklab.com", listOf("en", "id"), className = "KomikLabFactory", pkgName = "komiklab", overrideVersionCode = 2),
         MultiLang("Miau Scan", "https://miauscans.com", listOf("es", "pt-BR"), overrideVersionCode = 1),
         SingleLang("Animated Glitched Scans", "https://anigliscans.com", "en"),
         SingleLang("Arena Scans", "https://arenascans.net", "en", overrideVersionCode = 1),
@@ -53,6 +52,7 @@ class MangaThemesiaGenerator : ThemeSourceGenerator {
         SingleLang("KomikDewasa", "https://komikdewasa.org", "id", isNsfw = true),
         SingleLang("Komik Station", "https://komikstation.co", "id", overrideVersionCode = 3),
         SingleLang("KomikIndo.co", "https://komikindo.co", "id", className = "KomikindoCo", overrideVersionCode = 3),
+        SingleLang("Komik Lab", "https://komiklab.com", "en", overrideVersionCode = 3),
         SingleLang("KomikMama", "https://komikmama.co", "id", overrideVersionCode = 1),
         SingleLang("KomikManhwa", "https://komikmanhwa.me", "id", isNsfw = true),
         SingleLang("KumaPoi", "https://kumapoi.club", "id", isNsfw = true, overrideVersionCode = 2),
diff --git a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mccms/MCCMSGenerator.kt b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mccms/MCCMSGenerator.kt
index 418803902..06bc01d82 100644
--- a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mccms/MCCMSGenerator.kt
+++ b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mccms/MCCMSGenerator.kt
@@ -8,22 +8,6 @@ class MCCMSGenerator : ThemeSourceGenerator {
     override val themePkg = "mccms"
     override val baseVersionCode = 6
     override val sources = listOf(
-        SingleLang(
-            name = "Haoman6",
-            baseUrl = "https://www.haoman6.com",
-            lang = "zh",
-            className = "Haoman6",
-            sourceName = "好漫6",
-            overrideVersionCode = 3,
-        ),
-        SingleLang( // same as: www.haoman6.cc
-            name = "Haoman6 (g-lens)",
-            baseUrl = "https://www.g-lens.com",
-            lang = "zh",
-            className = "Haoman6glens",
-            sourceName = "好漫6 (g-lens)",
-            overrideVersionCode = 0,
-        ),
         SingleLang(
             name = "Kuaikuai Manhua 3",
             baseUrl = "https://mobile3.manhuaorg.com",
diff --git a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mymangacms/MyMangaCMSGenerator.kt b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mymangacms/MyMangaCMSGenerator.kt
index 553a4afae..87c3a92c2 100644
--- a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mymangacms/MyMangaCMSGenerator.kt
+++ b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mymangacms/MyMangaCMSGenerator.kt
@@ -18,7 +18,6 @@ class MyMangaCMSGenerator : ThemeSourceGenerator {
             "vi",
             overrideVersionCode = 9,
         ),
-        SingleLang("LKDTT", "https://lkdttee.com", "vi", true, overrideVersionCode = 4),
     )
 
     companion object {
diff --git a/src/vi/medoctruyentranh/AndroidManifest.xml b/src/vi/medoctruyentranh/AndroidManifest.xml
deleted file mode 100644
index 8072ee00d..000000000
--- a/src/vi/medoctruyentranh/AndroidManifest.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<manifest />
diff --git a/src/vi/medoctruyentranh/build.gradle b/src/vi/medoctruyentranh/build.gradle
deleted file mode 100644
index 239edcf18..000000000
--- a/src/vi/medoctruyentranh/build.gradle
+++ /dev/null
@@ -1,12 +0,0 @@
-apply plugin: 'com.android.application'
-apply plugin: 'kotlin-android'
-apply plugin: 'kotlinx-serialization'
-
-ext {
-    extName = 'MeDocTruyenTranh'
-    pkgNameSuffix = 'vi.medoctruyentranh'
-    extClass = '.MeDocTruyenTranh'
-    extVersionCode = 6
-}
-
-apply from: "$rootDir/common.gradle"
diff --git a/src/vi/medoctruyentranh/res/mipmap-hdpi/ic_launcher.png b/src/vi/medoctruyentranh/res/mipmap-hdpi/ic_launcher.png
deleted file mode 100644
index 371773651..000000000
Binary files a/src/vi/medoctruyentranh/res/mipmap-hdpi/ic_launcher.png and /dev/null differ
diff --git a/src/vi/medoctruyentranh/res/mipmap-mdpi/ic_launcher.png b/src/vi/medoctruyentranh/res/mipmap-mdpi/ic_launcher.png
deleted file mode 100644
index ba41ace7b..000000000
Binary files a/src/vi/medoctruyentranh/res/mipmap-mdpi/ic_launcher.png and /dev/null differ
diff --git a/src/vi/medoctruyentranh/res/mipmap-xhdpi/ic_launcher.png b/src/vi/medoctruyentranh/res/mipmap-xhdpi/ic_launcher.png
deleted file mode 100644
index 4715cb96b..000000000
Binary files a/src/vi/medoctruyentranh/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ
diff --git a/src/vi/medoctruyentranh/res/mipmap-xxhdpi/ic_launcher.png b/src/vi/medoctruyentranh/res/mipmap-xxhdpi/ic_launcher.png
deleted file mode 100644
index 544a1d362..000000000
Binary files a/src/vi/medoctruyentranh/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ
diff --git a/src/vi/medoctruyentranh/res/mipmap-xxxhdpi/ic_launcher.png b/src/vi/medoctruyentranh/res/mipmap-xxxhdpi/ic_launcher.png
deleted file mode 100644
index 4ea96e542..000000000
Binary files a/src/vi/medoctruyentranh/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ
diff --git a/src/vi/medoctruyentranh/res/web_hi_res_512.png b/src/vi/medoctruyentranh/res/web_hi_res_512.png
deleted file mode 100644
index deceb3425..000000000
Binary files a/src/vi/medoctruyentranh/res/web_hi_res_512.png and /dev/null differ
diff --git a/src/vi/medoctruyentranh/src/eu/kanade/tachiyomi/extension/vi/medoctruyentranh/MeDocTruyenTranh.kt b/src/vi/medoctruyentranh/src/eu/kanade/tachiyomi/extension/vi/medoctruyentranh/MeDocTruyenTranh.kt
deleted file mode 100644
index d8d7dc94f..000000000
--- a/src/vi/medoctruyentranh/src/eu/kanade/tachiyomi/extension/vi/medoctruyentranh/MeDocTruyenTranh.kt
+++ /dev/null
@@ -1,189 +0,0 @@
-package eu.kanade.tachiyomi.extension.vi.medoctruyentranh
-
-import eu.kanade.tachiyomi.network.GET
-import eu.kanade.tachiyomi.source.model.FilterList
-import eu.kanade.tachiyomi.source.model.MangasPage
-import eu.kanade.tachiyomi.source.model.Page
-import eu.kanade.tachiyomi.source.model.SChapter
-import eu.kanade.tachiyomi.source.model.SManga
-import eu.kanade.tachiyomi.source.online.ParsedHttpSource
-import eu.kanade.tachiyomi.util.asJsoup
-import kotlinx.serialization.json.Json
-import kotlinx.serialization.json.jsonArray
-import kotlinx.serialization.json.jsonObject
-import kotlinx.serialization.json.jsonPrimitive
-import okhttp3.Request
-import okhttp3.Response
-import org.jsoup.nodes.Document
-import org.jsoup.nodes.Element
-import uy.kohesive.injekt.injectLazy
-import java.text.SimpleDateFormat
-import java.util.Locale
-
-class MeDocTruyenTranh : ParsedHttpSource() {
-
-    override val name = "MeDocTruyenTranh"
-
-    override val baseUrl = "https://www.medoctruyentranh.net"
-
-    override val lang = "vi"
-
-    override val supportsLatest = false
-
-    override val client = network.cloudflareClient
-
-    private val json: Json by injectLazy()
-
-    override fun popularMangaSelector() = "div.classifyList a"
-
-    override fun searchMangaSelector() = ".listCon a"
-
-    override fun popularMangaRequest(page: Int): Request {
-        return GET("$baseUrl/tim-truyen/toan-bo" + if (page > 1) "/$page" else "", headers)
-    }
-
-    override fun popularMangaParse(response: Response): MangasPage {
-        val document = response.asJsoup()
-
-        // trying to build URLs from this JSONObject could cause issues but we need it to get thumbnails
-        val nextData = document.select("script#__NEXT_DATA__").first()!!
-            .let { json.parseToJsonElement(it.data()).jsonObject }
-
-        val titleCoverMap = nextData["props"]!!
-            .jsonObject["pageProps"]!!
-            .jsonObject["initialState"]!!
-            .jsonObject["classify"]!!
-            .jsonObject["comics"]!!
-            .jsonArray.associate {
-                Pair(
-                    it.jsonObject["title"]!!.jsonPrimitive.content,
-                    it.jsonObject["coverimg"]!!.jsonPrimitive.content,
-                )
-            }
-
-        val mangas = document.select(popularMangaSelector()).map {
-            popularMangaFromElement(it).apply {
-                thumbnail_url = titleCoverMap[this.title]
-            }
-        }
-
-        return MangasPage(mangas, document.select(popularMangaNextPageSelector()) != null)
-    }
-
-    override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
-        return GET("$baseUrl/search/$query", headers)
-    }
-
-    override fun popularMangaFromElement(element: Element): SManga {
-        return SManga.create().apply {
-            title = element.select("div.storytitle").text()
-            setUrlWithoutDomain(element.attr("href"))
-        }
-    }
-
-    override fun popularMangaNextPageSelector() = "div.page_floor a.focus + a + a"
-
-    override fun searchMangaFromElement(element: Element): SManga {
-        val manga = SManga.create()
-        val jsonData = element.ownerDocument()!!.select("#__NEXT_DATA__").first()!!.data()
-
-        manga.setUrlWithoutDomain(element.attr("href"))
-        manga.title = element.select("div.storytitle").text()
-
-        val indexOfManga = jsonData.indexOf(manga.title)
-        val startIndex = jsonData.indexOf("coverimg", indexOfManga) + 11
-        val endIndex = jsonData.indexOf("}", startIndex) - 1
-        manga.thumbnail_url = jsonData.substring(startIndex, endIndex)
-        return manga
-    }
-
-    override fun searchMangaNextPageSelector() = popularMangaNextPageSelector()
-
-    override fun mangaDetailsParse(document: Document): SManga = SManga.create().apply {
-        val nextData = document.select("script#__NEXT_DATA__").first()!!
-            .let { json.parseToJsonElement(it.data()).jsonObject }
-
-        val mangaDetail = nextData["props"]!!
-            .jsonObject["pageProps"]!!
-            .jsonObject["initialState"]!!
-            .jsonObject["detail"]!!
-            .jsonObject["story_item"]!!
-            .jsonObject
-
-        title = mangaDetail["title"]!!.jsonPrimitive.content
-        author = mangaDetail["author_list"]!!.jsonArray.joinToString { it.jsonPrimitive.content }
-        genre = mangaDetail["category_list"]!!.jsonArray.joinToString { it.jsonPrimitive.content }
-        description = mangaDetail["summary"]!!.jsonPrimitive.content
-        status = parseStatus(mangaDetail["is_updating"]!!.jsonPrimitive.content)
-        thumbnail_url = mangaDetail["coverimg"]!!.jsonPrimitive.content
-    }
-
-    private fun parseStatus(status: String) = when {
-        status.contains("1") -> SManga.ONGOING
-        status.contains("0") -> SManga.COMPLETED
-        else -> SManga.UNKNOWN
-    }
-
-    override fun chapterListSelector() = "div.chapters  a"
-
-    override fun chapterListParse(response: Response): List<SChapter> {
-        val nextData = response.asJsoup().select("script#__NEXT_DATA__").first()!!
-            .let { json.parseToJsonElement(it.data()).jsonObject }
-
-        return nextData["props"]!!
-            .jsonObject["pageProps"]!!
-            .jsonObject["initialState"]!!
-            .jsonObject["detail"]!!
-            .jsonObject["story_chapters"]!!
-            .jsonArray
-            .flatMap { it.jsonArray }
-            .map {
-                val chapterObj = it.jsonObject
-
-                SChapter.create().apply {
-                    name = chapterObj["title"]!!.jsonPrimitive.content
-                    date_upload = parseChapterDate(chapterObj["time"]!!.jsonPrimitive.content)
-                    setUrlWithoutDomain("${response.request.url}/${chapterObj["chapter_index"]!!.jsonPrimitive.content}")
-                }
-            }
-            .reversed()
-    }
-
-    private fun parseChapterDate(date: String): Long {
-        // 2019-05-09T07:09:58
-        val dateFormat = SimpleDateFormat(
-            "yyyy-MM-dd'T'HH:mm:ss",
-            Locale.US,
-        )
-        return dateFormat.parse(date)?.time ?: 0L
-    }
-
-    override fun pageListParse(document: Document): List<Page> {
-        val nextData = document.select("script#__NEXT_DATA__").firstOrNull()
-            ?.let { json.parseToJsonElement(it.data()).jsonObject }
-            ?: return emptyList()
-
-        return nextData["props"]!!
-            .jsonObject["pageProps"]!!
-            .jsonObject["initialState"]!!
-            .jsonObject["read"]!!
-            .jsonObject["detail_item"]!!
-            .jsonObject["elements"]!!
-            .jsonArray
-            .mapIndexed { i, jsonEl ->
-                Page(i, "", jsonEl.jsonObject["content"]!!.jsonPrimitive.content)
-            }
-    }
-
-    override fun imageUrlParse(document: Document) = throw UnsupportedOperationException("This method should not be called!")
-
-    override fun latestUpdatesSelector() = throw UnsupportedOperationException("This method should not be called!")
-
-    override fun latestUpdatesFromElement(element: Element) = throw UnsupportedOperationException("This method should not be called!")
-
-    override fun latestUpdatesNextPageSelector() = throw UnsupportedOperationException("This method should not be called!")
-
-    override fun latestUpdatesRequest(page: Int) = throw UnsupportedOperationException("This method should not be called!")
-
-    override fun chapterFromElement(element: Element): SChapter = throw UnsupportedOperationException("This method should not be called!")
-}
diff --git a/src/vi/truyentranh8/AndroidManifest.xml b/src/vi/truyentranh8/AndroidManifest.xml
deleted file mode 100644
index 5783cbd15..000000000
--- a/src/vi/truyentranh8/AndroidManifest.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android">
-
-    <application>
-        <activity
-            android:name=".vi.truyentranh8.TruyenTranh8UrlActivity"
-            android:excludeFromRecents="true"
-            android:exported="true"
-            android:theme="@android:style/Theme.NoDisplay">
-            <intent-filter>
-                <action android:name="android.intent.action.VIEW" />
-
-                <category android:name="android.intent.category.DEFAULT" />
-                <category android:name="android.intent.category.BROWSABLE" />
-
-                <data
-                    android:host="truyentranh86.com"
-                    android:pathPattern="/truyen-tranh/..*"
-                    android:scheme="http" />
-            </intent-filter>
-        </activity>
-    </application>
-</manifest>
diff --git a/src/vi/truyentranh8/build.gradle b/src/vi/truyentranh8/build.gradle
deleted file mode 100644
index ad2d7c42c..000000000
--- a/src/vi/truyentranh8/build.gradle
+++ /dev/null
@@ -1,12 +0,0 @@
-apply plugin: 'com.android.application'
-apply plugin: 'kotlin-android'
-
-ext {
-    extName = 'Truyện Tranh 8'
-    pkgNameSuffix = 'vi.truyentranh8'
-    extClass = '.TruyenTranh8'
-    extVersionCode = 1
-    isNsfw = true
-}
-
-apply from: "$rootDir/common.gradle"
diff --git a/src/vi/truyentranh8/res/mipmap-hdpi/ic_launcher.png b/src/vi/truyentranh8/res/mipmap-hdpi/ic_launcher.png
deleted file mode 100644
index d3256b65e..000000000
Binary files a/src/vi/truyentranh8/res/mipmap-hdpi/ic_launcher.png and /dev/null differ
diff --git a/src/vi/truyentranh8/res/mipmap-mdpi/ic_launcher.png b/src/vi/truyentranh8/res/mipmap-mdpi/ic_launcher.png
deleted file mode 100644
index 80504a3cd..000000000
Binary files a/src/vi/truyentranh8/res/mipmap-mdpi/ic_launcher.png and /dev/null differ
diff --git a/src/vi/truyentranh8/res/mipmap-xhdpi/ic_launcher.png b/src/vi/truyentranh8/res/mipmap-xhdpi/ic_launcher.png
deleted file mode 100644
index d550acddd..000000000
Binary files a/src/vi/truyentranh8/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ
diff --git a/src/vi/truyentranh8/res/mipmap-xxhdpi/ic_launcher.png b/src/vi/truyentranh8/res/mipmap-xxhdpi/ic_launcher.png
deleted file mode 100644
index 6183b98cd..000000000
Binary files a/src/vi/truyentranh8/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ
diff --git a/src/vi/truyentranh8/res/mipmap-xxxhdpi/ic_launcher.png b/src/vi/truyentranh8/res/mipmap-xxxhdpi/ic_launcher.png
deleted file mode 100644
index 6ee854e8c..000000000
Binary files a/src/vi/truyentranh8/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ
diff --git a/src/vi/truyentranh8/res/web_hi_res_512.png b/src/vi/truyentranh8/res/web_hi_res_512.png
deleted file mode 100644
index 0f1149239..000000000
Binary files a/src/vi/truyentranh8/res/web_hi_res_512.png and /dev/null differ
diff --git a/src/vi/truyentranh8/src/eu/kanade/tachiyomi/extension/vi/truyentranh8/TruyenTranh8.kt b/src/vi/truyentranh8/src/eu/kanade/tachiyomi/extension/vi/truyentranh8/TruyenTranh8.kt
deleted file mode 100644
index 042e2cdc8..000000000
--- a/src/vi/truyentranh8/src/eu/kanade/tachiyomi/extension/vi/truyentranh8/TruyenTranh8.kt
+++ /dev/null
@@ -1,404 +0,0 @@
-package eu.kanade.tachiyomi.extension.vi.truyentranh8
-
-import eu.kanade.tachiyomi.network.GET
-import eu.kanade.tachiyomi.network.interceptor.rateLimit
-import eu.kanade.tachiyomi.source.model.Filter
-import eu.kanade.tachiyomi.source.model.FilterList
-import eu.kanade.tachiyomi.source.model.MangasPage
-import eu.kanade.tachiyomi.source.model.Page
-import eu.kanade.tachiyomi.source.model.SChapter
-import eu.kanade.tachiyomi.source.model.SManga
-import eu.kanade.tachiyomi.source.online.ParsedHttpSource
-import okhttp3.Headers
-import okhttp3.HttpUrl.Companion.toHttpUrl
-import org.jsoup.nodes.Document
-import org.jsoup.nodes.Element
-import org.jsoup.select.Evaluator
-import rx.Observable
-import java.text.SimpleDateFormat
-import java.util.Locale
-import java.util.TimeZone
-import java.util.concurrent.TimeUnit
-
-class TruyenTranh8 : ParsedHttpSource() {
-
-    override val name = "Truyện Tranh 8"
-
-    override val baseUrl = "http://truyentranh86.com"
-
-    override val lang = "vi"
-
-    override val supportsLatest = true
-
-    override val client = network.cloudflareClient.newBuilder()
-        .rateLimit(1, 2, TimeUnit.SECONDS)
-        .build()
-
-    override fun headersBuilder() = Headers.Builder()
-        .add("Referer", "$baseUrl/")
-        .add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:103.0) Gecko/20100101 Firefox/103.0")
-
-    private val dateFormatter = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US).apply {
-        timeZone = TimeZone.getTimeZone("Asia/Ho_Chi_Minh")
-    }
-
-    private val floatingNumberRegex = Regex("""([+-]?(?:[0-9]*[.])?[0-9]+)""")
-
-    override fun popularMangaRequest(page: Int) = GET(
-        baseUrl.toHttpUrl().newBuilder().apply {
-            addPathSegment("search.php")
-            addQueryParameter("act", "search")
-            addQueryParameter("sort", "xem")
-            addQueryParameter("view", "thumb")
-            addQueryParameter("page", page.toString())
-        }.build().toString(),
-        headers,
-    )
-
-    override fun popularMangaNextPageSelector(): String = "div#tblChap p.page a:contains(Cuối)"
-
-    override fun popularMangaSelector(): String = "div#tblChap figure.col"
-
-    override fun popularMangaFromElement(element: Element): SManga = SManga.create().apply {
-        setUrlWithoutDomain(element.select("figcaption h3 a").first()!!.attr("href"))
-        title = element.select("figcaption h3 a").first()!!.text().replace("[TT8] ", "")
-        thumbnail_url = element.select("img").first()!!.attr("abs:src")
-    }
-
-    override fun latestUpdatesRequest(page: Int) = GET(
-        baseUrl.toHttpUrl().newBuilder().apply {
-            addPathSegment("search.php")
-            addQueryParameter("act", "search")
-            addQueryParameter("sort", "chap")
-            addQueryParameter("view", "thumb")
-            addQueryParameter("page", page.toString())
-        }.build().toString(),
-        headers,
-    )
-
-    override fun latestUpdatesNextPageSelector(): String = popularMangaNextPageSelector()
-
-    override fun latestUpdatesSelector(): String = popularMangaSelector()
-
-    override fun latestUpdatesFromElement(element: Element): SManga = popularMangaFromElement(element)
-
-    override fun fetchSearchManga(page: Int, query: String, filters: FilterList): Observable<MangasPage> {
-        return when {
-            query.startsWith(PREFIX_ID_SEARCH) -> {
-                val id = query.removePrefix(PREFIX_ID_SEARCH).trim()
-                if (id.isEmpty()) {
-                    throw Exception("ID tìm kiếm không hợp lệ.")
-                }
-                fetchMangaDetails(SManga.create().apply { url = "/truyen-tranh/$id/" })
-                    .map { MangasPage(listOf(it), false) }
-            }
-            else -> super.fetchSearchManga(page, query, filters)
-        }
-    }
-
-    override fun searchMangaRequest(page: Int, query: String, filters: FilterList) = GET(
-        baseUrl.toHttpUrl().newBuilder().apply {
-            addPathSegment("search.php")
-            addQueryParameter("act", "timnangcao")
-            addQueryParameter("view", "thumb")
-            addQueryParameter("page", page.toString())
-
-            if (query.isNotEmpty()) {
-                addQueryParameter("q", query)
-            }
-
-            (if (filters.isEmpty()) getFilterList() else filters).forEach { filter ->
-                when (filter) {
-                    is SortByFilter -> addQueryParameter("sort", filter.toUriPart())
-                    is SearchTypeFilter -> addQueryParameter("andor", filter.toUriPart())
-                    is ForFilter -> if (filter.state != 0) {
-                        addQueryParameter("danhcho", filter.toUriPart())
-                    }
-                    is AgeFilter -> if (filter.state != 0) {
-                        addQueryParameter("DoTuoi", filter.toUriPart())
-                    }
-                    is StatusFilter -> if (filter.state != 0) {
-                        addQueryParameter("TinhTrang", filter.toUriPart())
-                    }
-                    is OriginFilter -> if (filter.state != 0) {
-                        addQueryParameter("quocgia", filter.toUriPart())
-                    }
-                    is ReadingModeFilter -> if (filter.state != 0) {
-                        addQueryParameter("KieuDoc", filter.toUriPart())
-                    }
-                    is YearFilter -> if (filter.state.isNotEmpty()) {
-                        addQueryParameter("NamPhaHanh", filter.state)
-                    }
-                    is UserFilter -> if (filter.state.isNotEmpty()) {
-                        addQueryParameter("u", filter.state)
-                    }
-                    is AuthorFilter -> if (filter.state.isNotEmpty()) {
-                        addQueryParameter("TacGia", filter.state)
-                    }
-                    is SourceFilter -> if (filter.state.isNotEmpty()) {
-                        addQueryParameter("Nguon", filter.state)
-                    }
-                    is GenreList -> {
-                        addQueryParameter(
-                            "baogom",
-                            filter.state
-                                .filter { it.state == Filter.TriState.STATE_INCLUDE }
-                                .joinToString(",") { it.id },
-                        )
-                        addQueryParameter(
-                            "khonggom",
-                            filter.state
-                                .filter { it.state == Filter.TriState.STATE_EXCLUDE }
-                                .joinToString(",") { it.id },
-                        )
-                    }
-                    else -> {}
-                }
-            }
-        }.build().toString(),
-        headers,
-    )
-
-    override fun searchMangaNextPageSelector(): String = popularMangaNextPageSelector()
-
-    override fun searchMangaSelector(): String = popularMangaSelector()
-
-    override fun searchMangaFromElement(element: Element): SManga = popularMangaFromElement(element)
-
-    override fun mangaDetailsParse(document: Document) = SManga.create().apply {
-        title = document.select("h1.fs-5").first()!!.text().replace("Truyện Tranh ", "")
-
-        author = document.select("span[itemprop=author]").toList()
-            .filter { it.text().isNotEmpty() }
-            .joinToString(", ") { it.text() }
-
-        thumbnail_url = document.select("img.thumbnail").first()!!.attr("abs:src")
-
-        genre = document.select("a[itemprop=genre]").toList()
-            .filter { it.text().isNotEmpty() }
-            .joinToString(", ") { it.text() }
-
-        status = when (document.select("ul.mangainfo b:contains(Tình Trạng) + a").first()!!.text().trim()) {
-            "Đang tiến hành" -> SManga.ONGOING
-            "Đã hoàn thành" -> SManga.COMPLETED
-            "Tạm ngưng" -> SManga.ON_HIATUS
-            else -> SManga.UNKNOWN
-        }
-
-        val descnode = document.select("div.card-body.border-start.border-info.border-3").first()!!
-        descnode.select(Evaluator.Tag("br")).prepend("\\n")
-
-        description = if (descnode.select("p").any()) {
-            descnode.select("p").joinToString("\n") {
-                it.text().replace("\\n", "\n").replace("\n ", "\n")
-            }.trim()
-        } else {
-            descnode.text().replace("\\n", "\n").replace("\n ", "\n").trim()
-        }
-    }
-
-    override fun chapterListSelector() = "ul#ChapList li"
-
-    override fun chapterFromElement(element: Element) = SChapter.create().apply {
-        setUrlWithoutDomain(element.select("a").first()!!.attr("abs:href"))
-        name = element.text().replace(element.select("time").first()!!.text(), "")
-        date_upload = runCatching {
-            dateFormatter.parse(element.select("time").first()!!.attr("datetime"))?.time
-        }.getOrNull() ?: 0L
-
-        val match = floatingNumberRegex.find(name)
-        chapter_number = if (name.lowercase().startsWith("vol")) {
-            match?.groups?.get(2)
-        } else {
-            match?.groups?.get(1)
-        }?.value?.toFloat() ?: -1f
-    }
-
-    override fun pageListParse(document: Document) = document.select("div.page-chapter")
-        .mapIndexed { i, elem ->
-            Page(i, "", elem.select("img").first()!!.attr("abs:src"))
-        }
-
-    override fun imageUrlParse(document: Document): String = throw Exception("Not used")
-
-    open class UriPartFilter(displayName: String, private val vals: Array<Pair<String, String>>, state: Int = 0) :
-        Filter.Select<String>(displayName, vals.map { it.first }.toTypedArray(), state) {
-        fun toUriPart() = vals[state].second
-    }
-
-    private class YearFilter : Filter.Text("Năm phát hành")
-    private class UserFilter : Filter.Text("Đăng bởi thành viên")
-    private class AuthorFilter : Filter.Text("Tên tác giả")
-    private class SourceFilter : Filter.Text("Nguồn/Nhóm dịch")
-    private class SearchTypeFilter : UriPartFilter(
-        "Kiểu tìm",
-        arrayOf(
-            Pair("AND/và", "and"),
-            Pair("OR/hoặc", "or"),
-        ),
-    )
-    private class ForFilter : UriPartFilter(
-        "Dành cho",
-        arrayOf(
-            Pair("Bất kì", ""),
-            Pair("Con gái", "gai"),
-            Pair("Con trai", "trai"),
-            Pair("Con nít", "nit"),
-        ),
-    )
-    private class AgeFilter : UriPartFilter(
-        "Bất kỳ",
-        arrayOf(
-            Pair("Bất kì", ""),
-            Pair("= 13", "13"),
-            Pair("= 14", "14"),
-            Pair("= 15", "15"),
-            Pair("= 16", "16"),
-            Pair("= 17", "17"),
-            Pair("= 18", "18"),
-        ),
-    )
-    private class StatusFilter : UriPartFilter(
-        "Tình trạng",
-        arrayOf(
-            Pair("Bất kì", ""),
-            Pair("Đang dịch", "Ongoing"),
-            Pair("Hoàn thành", "Complete"),
-            Pair("Tạm ngưng", "Drop"),
-        ),
-    )
-    private class OriginFilter : UriPartFilter(
-        "Quốc gia",
-        arrayOf(
-            Pair("Bất kì", ""),
-            Pair("Nhật Bản", "nhat"),
-            Pair("Trung Quốc", "trung"),
-            Pair("Hàn Quốc", "han"),
-            Pair("Việt Nam", "vietnam"),
-        ),
-    )
-    private class ReadingModeFilter : UriPartFilter(
-        "Kiểu đọc",
-        arrayOf(
-            Pair("Bất kì", ""),
-            Pair("Chưa xác định", "chưa xác định"),
-            Pair("Phải qua trái", "xem từ phải qua trái"),
-            Pair("Trái qua phải", "xem từ trái qua phải"),
-        ),
-    )
-    private class SortByFilter : UriPartFilter(
-        "Sắp xếp theo",
-        arrayOf(
-            Pair("Chap mới", "chap"),
-            Pair("Truyện mới", "truyen"),
-            Pair("Xem nhiều", "xem"),
-            Pair("Theo ABC", "ten"),
-            Pair("Số Chương", "sochap"),
-        ),
-        2,
-    )
-    open class Genre(name: String, val id: String) : Filter.TriState(name)
-    private class GenreList(genres: List<Genre>) : Filter.Group<Genre>("Thể loại", genres)
-    override fun getFilterList() = FilterList(
-        GenreList(getGenreList()),
-        SortByFilter(),
-        SearchTypeFilter(),
-        ForFilter(),
-        AgeFilter(),
-        StatusFilter(),
-        OriginFilter(),
-        ReadingModeFilter(),
-        YearFilter(),
-        UserFilter(),
-        AuthorFilter(),
-        SourceFilter(),
-    )
-
-    private fun getGenreList() = listOf(
-        Genre("Phát Hành Tại TT8", "106"),
-        Genre("Truyện Màu", "113"),
-        Genre("Webtoons", "112"),
-        Genre("Manga - Truyện Nhật", "141"),
-        Genre("Action - Hành động", "52"),
-        Genre("Adult - Người lớn", "53"),
-        Genre("Adventure - Phiêu lưu", "65"),
-        Genre("Anime", "107"),
-        Genre("Biseinen", "123"),
-        Genre("Bishounen", "122"),
-        Genre("Comedy - Hài hước", "50"),
-        Genre("Doujinshi", "72"),
-        Genre("Drama", "73"),
-        Genre("Ecchi", "74"),
-        Genre("Fantasy", "75"),
-        Genre("Gender Bender - Đổi giới tính", "76"),
-        Genre("Harem", "77"),
-        Genre("Historical - Lịch sử", "78"),
-        Genre("Horror - Kinh dị", "79"),
-        Genre("Isekai - Xuyên không", "139"),
-        Genre("Josei", "80"),
-        Genre("Live-action - Live Action", "81"),
-        Genre("Macgic", "138"),
-        Genre("Magic - Phép thuật", "116"),
-        Genre("Martial Arts - Martial-Arts", "84"),
-        Genre("Mature - Trưởng thành", "85"),
-        Genre("Mecha - Robot", "86"),
-        Genre("Mystery - Bí ẩn", "87"),
-        Genre("One-shot", "88"),
-        Genre("Psychological - Tâm lý", "89"),
-        Genre("Romance - Tình cảm", "90"),
-        Genre("School Life - Học đường", "91"),
-        Genre("Sci fi - Khoa học viễn tưởng", "92"),
-        Genre("Seinen", "93"),
-        Genre("Shoujo", "94"),
-        Genre("Shoujo Ai", "66"),
-        Genre("Shounen", "96"),
-        Genre("Shounen Ai", "97"),
-        Genre("Slash", "121"),
-        Genre("Slice-of-Life - Đời sống", "98"),
-        Genre("Smut", "99"),
-        Genre("Soft Yaoi - Soft-Yaoi", "100"),
-        Genre("Sports - Thể thao", "101"),
-        Genre("Supernatural - Siêu nhiên", "102"),
-        Genre("Tạp chí truyện tranh", "103"),
-        Genre("Tragedy - Bi kịch", "104"),
-        Genre("Trap - Crossdressing", "115"),
-        Genre("Yaoi", "114"),
-        Genre("Yaoi Hardcore", "120"),
-        Genre("Yuri", "111"),
-        Genre("Manhua - Truyện Trung", "82"),
-        Genre("Bách Hợp", "128"),
-        Genre("Chuyển sinh", "134"),
-        Genre("Cổ đại", "135"),
-        Genre("Cung đình", "144"),
-        Genre("Giới giải trí", "146"),
-        Genre("Hậu cung", "145"),
-        Genre("Huyền Huyễn", "132"),
-        Genre("Khoa Huyễn", "130"),
-        Genre("Lịch Sử", "131"),
-        Genre("Ngôn tình", "127"),
-        Genre("Ngọt sủng", "148"),
-        Genre("Ngược", "143"),
-        Genre("Người đóng góp", "147"),
-        Genre("Nữ Cường", "136"),
-        Genre("Tổng tài", "137"),
-        Genre("Trọng Sinh", "126"),
-        Genre("Trường học", "142"),
-        Genre("Tu chân - tu tiên", "140"),
-        Genre("Võng Du", "125"),
-        Genre("Xuyên không", "124"),
-        Genre("Đam Mỹ", "108"),
-        Genre("Đô thị", "129"),
-        Genre("Manhwa - Truyện Hàn", "83"),
-        Genre("Boy love", "133"),
-        Genre("Thriller - Giết người, sát nhân, máu me", "149"),
-        Genre("Truyện Tranh Việt", "51"),
-        Genre("Cướp bồ  - NTR, Netorare", "118"),
-        Genre("Hướng dẫn vẽ!", "109"),
-        Genre("Truyện scan", "105"),
-        Genre("Comic - truyện Âu Mĩ", "71"),
-    )
-
-    companion object {
-        const val PREFIX_ID_SEARCH = "id:"
-    }
-}
diff --git a/src/vi/truyentranh8/src/eu/kanade/tachiyomi/extension/vi/truyentranh8/TruyenTranh8UrlActivity.kt b/src/vi/truyentranh8/src/eu/kanade/tachiyomi/extension/vi/truyentranh8/TruyenTranh8UrlActivity.kt
deleted file mode 100644
index e620212f7..000000000
--- a/src/vi/truyentranh8/src/eu/kanade/tachiyomi/extension/vi/truyentranh8/TruyenTranh8UrlActivity.kt
+++ /dev/null
@@ -1,36 +0,0 @@
-package eu.kanade.tachiyomi.extension.vi.truyentranh8
-
-import android.app.Activity
-import android.content.ActivityNotFoundException
-import android.content.Intent
-import android.os.Bundle
-import android.util.Log
-import kotlin.system.exitProcess
-
-class TruyenTranh8UrlActivity : Activity() {
-    override fun onCreate(savedInstanceState: Bundle?) {
-        super.onCreate(savedInstanceState)
-
-        val pathSegments = intent?.data?.pathSegments
-        if (pathSegments != null && pathSegments.size > 1) {
-            val id = pathSegments[1]
-
-            try {
-                startActivity(
-                    Intent().apply {
-                        action = "eu.kanade.tachiyomi.SEARCH"
-                        putExtra("query", "${TruyenTranh8.PREFIX_ID_SEARCH}$id")
-                        putExtra("filter", packageName)
-                    },
-                )
-            } catch (e: ActivityNotFoundException) {
-                Log.e("TruyenTranh8UrlActivity", e.toString())
-            }
-        } else {
-            Log.e("TruyenTranh8UrlActivity", "Could not parse URL from intent $intent")
-        }
-
-        finish()
-        exitProcess(0)
-    }
-}