diff --git a/bbootimg/build.gradle.kts b/bbootimg/build.gradle.kts
index 57f64ca..3362dd7 100644
--- a/bbootimg/build.gradle.kts
+++ b/bbootimg/build.gradle.kts
@@ -1,5 +1,7 @@
+import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
+
 plugins {
-    id("org.jetbrains.kotlin.jvm").version("1.3.61")
+    id("org.jetbrains.kotlin.jvm").version("1.3.71")
     application
 }
 
@@ -31,6 +33,10 @@ application {
     mainClassName = "cfig.packable.PackableLauncherKt"
 }
 
+tasks.withType<KotlinCompile>().all {
+    kotlinOptions.freeCompilerArgs += "-Xopt-in=kotlin.RequiresOptIn"
+}
+
 tasks {
     jar {
         manifest {
diff --git a/bbootimg/src/main/kotlin/Helper.kt b/bbootimg/src/main/kotlin/Helper.kt
index 38f7db0..3c11046 100644
--- a/bbootimg/src/main/kotlin/Helper.kt
+++ b/bbootimg/src/main/kotlin/Helper.kt
@@ -20,8 +20,8 @@ import java.util.zip.GZIPInputStream
 import java.util.zip.GZIPOutputStream
 import javax.crypto.Cipher
 
+@OptIn(ExperimentalUnsignedTypes::class)
 class Helper {
-    @ExperimentalUnsignedTypes
     companion object {
         fun joinWithNulls(vararg source: ByteArray?): ByteArray {
             val baos = ByteArrayOutputStream()
diff --git a/bbootimg/src/main/kotlin/ParamConfig.kt b/bbootimg/src/main/kotlin/ParamConfig.kt
index a513a12..de3b30b 100644
--- a/bbootimg/src/main/kotlin/ParamConfig.kt
+++ b/bbootimg/src/main/kotlin/ParamConfig.kt
@@ -1,6 +1,6 @@
 package cfig
 
-@ExperimentalUnsignedTypes
+@OptIn(ExperimentalUnsignedTypes::class)
 data class ParamConfig(
         //file input
         var kernel: String = UnifiedConfig.workDir + "kernel",
diff --git a/bbootimg/src/main/kotlin/Signer.kt b/bbootimg/src/main/kotlin/Signer.kt
index 7634856..45a9ff3 100644
--- a/bbootimg/src/main/kotlin/Signer.kt
+++ b/bbootimg/src/main/kotlin/Signer.kt
@@ -11,7 +11,7 @@ import org.slf4j.LoggerFactory
 import java.io.File
 
 class Signer {
-    @ExperimentalUnsignedTypes
+    @OptIn(ExperimentalUnsignedTypes::class)
     companion object {
         private val log = LoggerFactory.getLogger(Signer::class.java)
 
diff --git a/bbootimg/src/main/kotlin/UnifiedConfig.kt b/bbootimg/src/main/kotlin/UnifiedConfig.kt
index effd7d7..54ca8ec 100644
--- a/bbootimg/src/main/kotlin/UnifiedConfig.kt
+++ b/bbootimg/src/main/kotlin/UnifiedConfig.kt
@@ -5,7 +5,7 @@ import com.fasterxml.jackson.annotation.JsonInclude
 import com.fasterxml.jackson.databind.ObjectMapper
 import java.io.File
 
-@ExperimentalUnsignedTypes
+@OptIn(ExperimentalUnsignedTypes::class)
 @JsonInclude(JsonInclude.Include.NON_NULL)
 data class UnifiedConfig(
         var info: MiscInfo = MiscInfo(),
@@ -22,7 +22,6 @@ data class UnifiedConfig(
             var size: String = "0",
             var loadOffset: String = "0")
 
-    @ExperimentalUnsignedTypes
     data class MiscInfo(
             var output: String = "",
             var headerVersion: UInt = 0U,
diff --git a/bbootimg/src/main/kotlin/avb/AVBInfo.kt b/bbootimg/src/main/kotlin/avb/AVBInfo.kt
index 3c7ca76..4a75b3e 100644
--- a/bbootimg/src/main/kotlin/avb/AVBInfo.kt
+++ b/bbootimg/src/main/kotlin/avb/AVBInfo.kt
@@ -8,7 +8,7 @@ import avb.blob.Header
 /*
     a wonderfaul base64 encoder/decoder: https://cryptii.com/base64-to-hex
  */
-@ExperimentalUnsignedTypes
+@OptIn(ExperimentalUnsignedTypes::class)
 class AVBInfo(var header: Header? = null,
               var authBlob: AuthBlob? = null,
               var auxBlob: AuxBlob? = null,
diff --git a/bbootimg/src/main/kotlin/avb/Avb.kt b/bbootimg/src/main/kotlin/avb/Avb.kt
index 2b2895d..0c6cd7a 100644
--- a/bbootimg/src/main/kotlin/avb/Avb.kt
+++ b/bbootimg/src/main/kotlin/avb/Avb.kt
@@ -19,7 +19,7 @@ import java.nio.file.Files
 import java.nio.file.Paths
 import java.nio.file.StandardOpenOption
 
-@ExperimentalUnsignedTypes
+@OptIn(ExperimentalUnsignedTypes::class)
 class Avb {
     private val MAX_VBMETA_SIZE = 64 * 1024
     private val MAX_FOOTER_SIZE = 4096
diff --git a/bbootimg/src/main/kotlin/avb/alg/Algorithms.kt b/bbootimg/src/main/kotlin/avb/alg/Algorithms.kt
index efbb0e9..dfff847 100644
--- a/bbootimg/src/main/kotlin/avb/alg/Algorithms.kt
+++ b/bbootimg/src/main/kotlin/avb/alg/Algorithms.kt
@@ -3,7 +3,7 @@ package avb.alg
 import cfig.io.Struct3
 
 class Algorithms {
-    @ExperimentalUnsignedTypes
+    @OptIn(ExperimentalUnsignedTypes::class)
     companion object {
         private val algMap = mutableMapOf<String, Algorithm>()
         fun get(name: String): Algorithm? {
diff --git a/bbootimg/src/main/kotlin/avb/blob/AuthBlob.kt b/bbootimg/src/main/kotlin/avb/blob/AuthBlob.kt
index 3ee3a65..44d81a1 100644
--- a/bbootimg/src/main/kotlin/avb/blob/AuthBlob.kt
+++ b/bbootimg/src/main/kotlin/avb/blob/AuthBlob.kt
@@ -6,7 +6,7 @@ import cfig.io.Struct3
 import org.slf4j.LoggerFactory
 import java.security.MessageDigest
 
-@ExperimentalUnsignedTypes
+@OptIn(ExperimentalUnsignedTypes::class)
 data class AuthBlob(
         var offset: ULong = 0U,
         var size: ULong = 0U,
@@ -40,4 +40,4 @@ data class AuthBlob(
 
         private val log = LoggerFactory.getLogger(AuthBlob::class.java)
     }
-}
\ No newline at end of file
+}
diff --git a/bbootimg/src/main/kotlin/avb/blob/AuxBlob.kt b/bbootimg/src/main/kotlin/avb/blob/AuxBlob.kt
index 06f30f2..bc39193 100644
--- a/bbootimg/src/main/kotlin/avb/blob/AuxBlob.kt
+++ b/bbootimg/src/main/kotlin/avb/blob/AuxBlob.kt
@@ -10,7 +10,7 @@ import org.slf4j.LoggerFactory
 import java.nio.file.Files
 import java.nio.file.Paths
 
-@ExperimentalUnsignedTypes
+@OptIn(ExperimentalUnsignedTypes::class)
 @JsonIgnoreProperties("descriptorSize")
 class AuxBlob(
         var pubkey: PubKeyInfo? = null,
diff --git a/bbootimg/src/main/kotlin/avb/blob/Footer.kt b/bbootimg/src/main/kotlin/avb/blob/Footer.kt
index 38b7383..f1e29e9 100644
--- a/bbootimg/src/main/kotlin/avb/blob/Footer.kt
+++ b/bbootimg/src/main/kotlin/avb/blob/Footer.kt
@@ -23,7 +23,7 @@ https://github.com/cfig/Android_boot_image_editor/blob/master/doc/layout.md#32-a
 +---------------------------------------+-------------------------+ --> partition_size
  */
 
-@ExperimentalUnsignedTypes
+@OptIn(ExperimentalUnsignedTypes::class)
 data class Footer constructor(
         var versionMajor: UInt = FOOTER_VERSION_MAJOR,
         var versionMinor: UInt = FOOTER_VERSION_MINOR,
@@ -83,4 +83,4 @@ data class Footer constructor(
             assert(SIZE == Struct3(FORMAT_STRING).calcSize())
         }
     }
-}
\ No newline at end of file
+}
diff --git a/bbootimg/src/main/kotlin/avb/blob/Header.kt b/bbootimg/src/main/kotlin/avb/blob/Header.kt
index 73e4482..b196005 100644
--- a/bbootimg/src/main/kotlin/avb/blob/Header.kt
+++ b/bbootimg/src/main/kotlin/avb/blob/Header.kt
@@ -5,7 +5,7 @@ import cfig.io.Struct3
 import java.io.InputStream
 
 //avbtool::AvbVBMetaHeader
-@ExperimentalUnsignedTypes
+@OptIn(ExperimentalUnsignedTypes::class)
 data class Header(
         var required_libavb_version_major: UInt = Avb.AVB_VERSION_MAJOR,
         var required_libavb_version_minor: UInt = 0U,
@@ -78,8 +78,8 @@ data class Header(
 
     //toplevel flags
     enum class AvbVBMetaImageFlags(val inFlags: Int) {
-        AVB_VBMETA_IMAGE_FLAGS_HASHTREE_DISABLED(1),
-        AVB_VBMETA_IMAGE_FLAGS_VERIFICATION_DISABLED(2 shl 1)
+        AVB_VBMETA_IMAGE_FLAGS_HASHTREE_DISABLED(1),          //disable hashtree image verification, for system/vendor/product etc.
+        AVB_VBMETA_IMAGE_FLAGS_VERIFICATION_DISABLED(2 shl 1) //disable all verification, do not parse descriptors
     }
 
     //verify flags
@@ -111,4 +111,4 @@ data class Header(
             assert(SIZE == Struct3(FORMAT_STRING).calcSize())
         }
     }
-}
\ No newline at end of file
+}
diff --git a/bbootimg/src/main/kotlin/avb/desc/ChainPartitionDescriptor.kt b/bbootimg/src/main/kotlin/avb/desc/ChainPartitionDescriptor.kt
index af20188..06f26af 100644
--- a/bbootimg/src/main/kotlin/avb/desc/ChainPartitionDescriptor.kt
+++ b/bbootimg/src/main/kotlin/avb/desc/ChainPartitionDescriptor.kt
@@ -6,7 +6,7 @@ import java.io.InputStream
 import java.security.MessageDigest
 import java.util.*
 
-@ExperimentalUnsignedTypes
+@OptIn(ExperimentalUnsignedTypes::class)
 class ChainPartitionDescriptor(
         var rollback_index_location: UInt = 0U,
         var partition_name_len: UInt = 0U,
@@ -66,4 +66,4 @@ class ChainPartitionDescriptor(
     override fun toString(): String {
         return "ChainPartitionDescriptor(partition=${this.partition_name}, pubkey=${Arrays.toString(this.pubkey)}"
     }
-}
\ No newline at end of file
+}
diff --git a/bbootimg/src/main/kotlin/avb/desc/Descriptor.kt b/bbootimg/src/main/kotlin/avb/desc/Descriptor.kt
index 39924fe..79aea1d 100644
--- a/bbootimg/src/main/kotlin/avb/desc/Descriptor.kt
+++ b/bbootimg/src/main/kotlin/avb/desc/Descriptor.kt
@@ -1,6 +1,6 @@
 package avb.desc
 
-@ExperimentalUnsignedTypes
+@OptIn(ExperimentalUnsignedTypes::class)
 abstract class Descriptor(var tag: ULong, var num_bytes_following: ULong, var sequence: Int = 0) {
     abstract fun encode(): ByteArray
-}
\ No newline at end of file
+}
diff --git a/bbootimg/src/main/kotlin/avb/desc/HashDescriptor.kt b/bbootimg/src/main/kotlin/avb/desc/HashDescriptor.kt
index 33db39c..e84ea1c 100644
--- a/bbootimg/src/main/kotlin/avb/desc/HashDescriptor.kt
+++ b/bbootimg/src/main/kotlin/avb/desc/HashDescriptor.kt
@@ -10,7 +10,7 @@ import java.io.FileInputStream
 import java.io.InputStream
 import java.security.MessageDigest
 
-@ExperimentalUnsignedTypes
+@OptIn(ExperimentalUnsignedTypes::class)
 class HashDescriptor(var flags: UInt = 0U,
                      var partition_name: String = "",
                      var hash_algorithm: String = "",
diff --git a/bbootimg/src/main/kotlin/avb/desc/HashTreeDescriptor.kt b/bbootimg/src/main/kotlin/avb/desc/HashTreeDescriptor.kt
index 0c3b194..b903b06 100644
--- a/bbootimg/src/main/kotlin/avb/desc/HashTreeDescriptor.kt
+++ b/bbootimg/src/main/kotlin/avb/desc/HashTreeDescriptor.kt
@@ -6,7 +6,7 @@ import cfig.io.Struct3
 import java.io.InputStream
 import java.util.*
 
-@ExperimentalUnsignedTypes
+@OptIn(ExperimentalUnsignedTypes::class)
 class HashTreeDescriptor(
         var flags: UInt = 0U,
         var dm_verity_version: UInt = 0u,
diff --git a/bbootimg/src/main/kotlin/avb/desc/KernelCmdlineDescriptor.kt b/bbootimg/src/main/kotlin/avb/desc/KernelCmdlineDescriptor.kt
index a3e935d..7b15b63 100644
--- a/bbootimg/src/main/kotlin/avb/desc/KernelCmdlineDescriptor.kt
+++ b/bbootimg/src/main/kotlin/avb/desc/KernelCmdlineDescriptor.kt
@@ -4,7 +4,7 @@ import cfig.Helper
 import cfig.io.Struct3
 import java.io.InputStream
 
-@ExperimentalUnsignedTypes
+@OptIn(ExperimentalUnsignedTypes::class)
 class KernelCmdlineDescriptor(
         var flags: UInt = 0U,
         var cmdlineLength: UInt = 0U,
diff --git a/bbootimg/src/main/kotlin/avb/desc/PropertyDescriptor.kt b/bbootimg/src/main/kotlin/avb/desc/PropertyDescriptor.kt
index 3aa6754..4bd8693 100644
--- a/bbootimg/src/main/kotlin/avb/desc/PropertyDescriptor.kt
+++ b/bbootimg/src/main/kotlin/avb/desc/PropertyDescriptor.kt
@@ -4,7 +4,7 @@ import cfig.Helper
 import cfig.io.Struct3
 import java.io.InputStream
 
-@ExperimentalUnsignedTypes
+@OptIn(ExperimentalUnsignedTypes::class)
 class PropertyDescriptor(
         var key: String = "",
         var value: String = "") : Descriptor(TAG, 0U, 0) {
@@ -49,4 +49,4 @@ class PropertyDescriptor(
         const val SIZE = 32U
         const val FORMAT_STRING = "!4Q"
     }
-}
\ No newline at end of file
+}
diff --git a/bbootimg/src/main/kotlin/avb/desc/UnknownDescriptor.kt b/bbootimg/src/main/kotlin/avb/desc/UnknownDescriptor.kt
index 53c9c0a..1c14274 100644
--- a/bbootimg/src/main/kotlin/avb/desc/UnknownDescriptor.kt
+++ b/bbootimg/src/main/kotlin/avb/desc/UnknownDescriptor.kt
@@ -7,7 +7,7 @@ import org.slf4j.LoggerFactory
 import java.io.ByteArrayInputStream
 import java.io.InputStream
 
-@ExperimentalUnsignedTypes
+@OptIn(ExperimentalUnsignedTypes::class)
 class UnknownDescriptor(var data: ByteArray = byteArrayOf()) : Descriptor(0U, 0U, 0) {
     @Throws(IllegalArgumentException::class)
     constructor(stream: InputStream, seq: Int = 0) : this() {
diff --git a/bbootimg/src/main/kotlin/bootimg/BootImgHeader.kt b/bbootimg/src/main/kotlin/bootimg/BootImgHeader.kt
index 2321ec2..8eb82de 100644
--- a/bbootimg/src/main/kotlin/bootimg/BootImgHeader.kt
+++ b/bbootimg/src/main/kotlin/bootimg/BootImgHeader.kt
@@ -13,7 +13,7 @@ import java.security.MessageDigest
 import java.util.regex.Pattern
 import kotlin.math.pow
 
-@ExperimentalUnsignedTypes
+@OptIn(ExperimentalUnsignedTypes::class)
 open class BootImgHeader(
         var kernelLength: UInt = 0U,
         var kernelOffset: UInt = 0U,
diff --git a/bbootimg/src/main/kotlin/bootimg/BootImgInfo.kt b/bbootimg/src/main/kotlin/bootimg/BootImgInfo.kt
index 60b8898..d2a636c 100644
--- a/bbootimg/src/main/kotlin/bootimg/BootImgInfo.kt
+++ b/bbootimg/src/main/kotlin/bootimg/BootImgInfo.kt
@@ -4,7 +4,7 @@ import cfig.ParamConfig
 import org.apache.commons.exec.CommandLine
 import java.io.InputStream
 
-@ExperimentalUnsignedTypes
+@OptIn(ExperimentalUnsignedTypes::class)
 class BootImgInfo(iS: InputStream?) : BootImgHeader(iS) {
     constructor() : this(null)
 
diff --git a/bbootimg/src/main/kotlin/bootimg/Packer.kt b/bbootimg/src/main/kotlin/bootimg/Packer.kt
index a18de02..a8bb154 100644
--- a/bbootimg/src/main/kotlin/bootimg/Packer.kt
+++ b/bbootimg/src/main/kotlin/bootimg/Packer.kt
@@ -11,7 +11,7 @@ import java.nio.ByteBuffer
 import java.nio.ByteOrder
 import java.security.MessageDigest
 
-@ExperimentalUnsignedTypes
+@OptIn(ExperimentalUnsignedTypes::class)
 class Packer {
     private val log = LoggerFactory.getLogger("Packer")
 
diff --git a/bbootimg/src/main/kotlin/bootimg/Parser.kt b/bbootimg/src/main/kotlin/bootimg/Parser.kt
index 5734a27..6c78d27 100644
--- a/bbootimg/src/main/kotlin/bootimg/Parser.kt
+++ b/bbootimg/src/main/kotlin/bootimg/Parser.kt
@@ -10,7 +10,7 @@ import org.slf4j.LoggerFactory
 import java.io.File
 import java.io.FileInputStream
 
-@ExperimentalUnsignedTypes
+@OptIn(ExperimentalUnsignedTypes::class)
 class Parser {
     private fun verifiedWithAVB(fileName: String): Boolean {
         val expectedBf = "AVBf".toByteArray()
diff --git a/bbootimg/src/main/kotlin/bootloader_message/BootloaderMsg.kt b/bbootimg/src/main/kotlin/bootloader_message/BootloaderMsg.kt
index 96e7e6b..545eba2 100644
--- a/bbootimg/src/main/kotlin/bootloader_message/BootloaderMsg.kt
+++ b/bbootimg/src/main/kotlin/bootloader_message/BootloaderMsg.kt
@@ -7,7 +7,7 @@ import java.io.FileInputStream
 import java.io.FileOutputStream
 import java.lang.IllegalStateException
 
-@ExperimentalUnsignedTypes
+@OptIn(ExperimentalUnsignedTypes::class)
 data class BootloaderMsg(
         var command: String = "",
         var status: String = "",
diff --git a/bbootimg/src/main/kotlin/cfig/io/Struct3.kt b/bbootimg/src/main/kotlin/cfig/io/Struct3.kt
index bbef9c7..e9d21fc 100644
--- a/bbootimg/src/main/kotlin/cfig/io/Struct3.kt
+++ b/bbootimg/src/main/kotlin/cfig/io/Struct3.kt
@@ -31,7 +31,7 @@ import java.util.*
 import java.util.regex.Pattern
 import kotlin.random.Random
 
-@ExperimentalUnsignedTypes
+@OptIn(kotlin.ExperimentalUnsignedTypes::class)
 class Struct3 {
     private val log = LoggerFactory.getLogger(Struct3::class.java)
     private val formatString: String
diff --git a/bbootimg/src/main/kotlin/init/Reboot.kt b/bbootimg/src/main/kotlin/init/Reboot.kt
index db56459..bfa401e 100644
--- a/bbootimg/src/main/kotlin/init/Reboot.kt
+++ b/bbootimg/src/main/kotlin/init/Reboot.kt
@@ -12,7 +12,7 @@ class Reboot {
         ANDROID_RB_THERMOFF
     }
 
-    @ExperimentalUnsignedTypes
+    @OptIn(ExperimentalUnsignedTypes::class)
     companion object {
         private val log = LoggerFactory.getLogger(Reboot::class.java)
         const val dynamicPartitionKey = "ro.boot.dynamic_partitions"
diff --git a/bbootimg/src/main/kotlin/packable/BootImgParser.kt b/bbootimg/src/main/kotlin/packable/BootImgParser.kt
index e590713..c0e0c39 100644
--- a/bbootimg/src/main/kotlin/packable/BootImgParser.kt
+++ b/bbootimg/src/main/kotlin/packable/BootImgParser.kt
@@ -11,7 +11,7 @@ import java.io.File
 import java.io.FileInputStream
 import java.lang.IllegalArgumentException
 
-@ExperimentalUnsignedTypes
+@OptIn(ExperimentalUnsignedTypes::class)
 class BootImgParser() : IPackable {
     override val loopNo: Int
         get() = 0
diff --git a/bbootimg/src/main/kotlin/packable/DtboParser.kt b/bbootimg/src/main/kotlin/packable/DtboParser.kt
index ed20113..bdafeaa 100644
--- a/bbootimg/src/main/kotlin/packable/DtboParser.kt
+++ b/bbootimg/src/main/kotlin/packable/DtboParser.kt
@@ -10,7 +10,7 @@ import java.io.File
 import java.io.FileInputStream
 import java.util.*
 
-@ExperimentalUnsignedTypes
+@OptIn(ExperimentalUnsignedTypes::class)
 class DtboParser(val workDir: File) : IPackable {
     override val loopNo: Int
         get() = 0
diff --git a/bbootimg/src/main/kotlin/packable/IPackable.kt b/bbootimg/src/main/kotlin/packable/IPackable.kt
index 49986ca..396bee7 100644
--- a/bbootimg/src/main/kotlin/packable/IPackable.kt
+++ b/bbootimg/src/main/kotlin/packable/IPackable.kt
@@ -7,7 +7,7 @@ import org.slf4j.Logger
 import org.slf4j.LoggerFactory
 import java.io.File
 
-@ExperimentalUnsignedTypes
+@OptIn(ExperimentalUnsignedTypes::class)
 interface IPackable {
     val loopNo: Int
     fun capabilities(): List<String> {
diff --git a/bbootimg/src/main/kotlin/packable/PackableLauncher.kt b/bbootimg/src/main/kotlin/packable/PackableLauncher.kt
index 5889cdc..51ffe05 100644
--- a/bbootimg/src/main/kotlin/packable/PackableLauncher.kt
+++ b/bbootimg/src/main/kotlin/packable/PackableLauncher.kt
@@ -11,7 +11,7 @@ import kotlin.system.exitProcess
 
 class PackableLauncher
 
-@ExperimentalUnsignedTypes
+@OptIn(ExperimentalUnsignedTypes::class)
 fun main(args: Array<String>) {
     val log = LoggerFactory.getLogger(PackableLauncher::class.java)
     val packablePool = mutableMapOf<List<String>, KClass<IPackable>>()
diff --git a/bbootimg/src/main/kotlin/packable/VBMetaParser.kt b/bbootimg/src/main/kotlin/packable/VBMetaParser.kt
index cd30aed..2556ba9 100644
--- a/bbootimg/src/main/kotlin/packable/VBMetaParser.kt
+++ b/bbootimg/src/main/kotlin/packable/VBMetaParser.kt
@@ -4,7 +4,7 @@ import cfig.Avb
 import cfig.UnifiedConfig
 import java.io.File
 
-@ExperimentalUnsignedTypes
+@OptIn(ExperimentalUnsignedTypes::class)
 class VBMetaParser: IPackable {
     override val loopNo: Int
         get() = 1
diff --git a/bbootimg/src/main/kotlin/sparse_util/SparseImgParser.kt b/bbootimg/src/main/kotlin/sparse_util/SparseImgParser.kt
index 15b5b95..5cd276c 100644
--- a/bbootimg/src/main/kotlin/sparse_util/SparseImgParser.kt
+++ b/bbootimg/src/main/kotlin/sparse_util/SparseImgParser.kt
@@ -5,7 +5,7 @@ import cfig.packable.IPackable
 import org.slf4j.LoggerFactory
 import cfig.Helper.Companion.check_call
 
-@ExperimentalUnsignedTypes
+@OptIn(ExperimentalUnsignedTypes::class)
 class SparseImgParser : IPackable {
     override val loopNo: Int
         get() = 0
diff --git a/bbootimg/src/test/kotlin/AvbTest.kt b/bbootimg/src/test/kotlin/AvbTest.kt
index d0a4bf8..7919f93 100644
--- a/bbootimg/src/test/kotlin/AvbTest.kt
+++ b/bbootimg/src/test/kotlin/AvbTest.kt
@@ -7,7 +7,7 @@ import org.junit.Assert.*
 import org.slf4j.LoggerFactory
 import java.io.ByteArrayInputStream
 
-@ExperimentalUnsignedTypes
+@OptIn(ExperimentalUnsignedTypes::class)
 class AvbTest {
     private val log = LoggerFactory.getLogger(AvbTest::class.java)
 
diff --git a/bbootimg/src/test/kotlin/HelperTest.kt b/bbootimg/src/test/kotlin/HelperTest.kt
index f637033..31fe31c 100644
--- a/bbootimg/src/test/kotlin/HelperTest.kt
+++ b/bbootimg/src/test/kotlin/HelperTest.kt
@@ -23,7 +23,7 @@ import java.security.spec.RSAPrivateKeySpec
 import java.security.PrivateKey
 
 
-@ExperimentalUnsignedTypes
+@OptIn(ExperimentalUnsignedTypes::class)
 class HelperTest {
     @Test
     fun rawSignTest() {
diff --git a/bbootimg/src/test/kotlin/KeyUtilTest.kt b/bbootimg/src/test/kotlin/KeyUtilTest.kt
index 57eed5a..d37440d 100644
--- a/bbootimg/src/test/kotlin/KeyUtilTest.kt
+++ b/bbootimg/src/test/kotlin/KeyUtilTest.kt
@@ -7,7 +7,7 @@ import java.io.FileInputStream
 import java.nio.file.Files
 import java.nio.file.Paths
 
-@ExperimentalUnsignedTypes
+@OptIn(ExperimentalUnsignedTypes::class)
 class KeyUtilTest {
     @Test
     fun parseKeys() {
diff --git a/bbootimg/src/test/kotlin/avb/BlobTest.kt b/bbootimg/src/test/kotlin/avb/BlobTest.kt
index 395c5f4..b508bb7 100644
--- a/bbootimg/src/test/kotlin/avb/BlobTest.kt
+++ b/bbootimg/src/test/kotlin/avb/BlobTest.kt
@@ -6,7 +6,7 @@ import org.apache.commons.codec.binary.Hex
 import org.junit.Assert.assertEquals
 import org.junit.Test
 
-@ExperimentalUnsignedTypes
+@OptIn(ExperimentalUnsignedTypes::class)
 class BlobTest {
     @Test
     fun testEncodedKey2048() {
@@ -31,4 +31,4 @@ class BlobTest {
         val expectedKeyEnc = "00002000ef8168f3d03dd3f9d212b260879bbf7bc2c5f4bd57ea5160c9ff79af0d8a3394269b0e19c62e5484a4041b7f567c4ecf8e338a554473895092f459e6cd7663cf1a3b32590cfacd913dea54192f76af0845ea615411eba579df074afe885a3124671b210c06baa45556c5de00abfbf8abc43dd82be568c0ed962acffa1ab31da9303c63909317f25ea6dc2c4a0e4c323afa51a2b8a8372b7a3de19200551af455ddc8f5b272ba06bf07b987459e91864d2d1ded42651c5825b6b18753f0813bddb78641e025a5848c2d208921a384a2ad2f3ad57290d5db2fe55903fd4ff4f876310021a1ea43ef8f49d39247aa6c20647a8558128a0b7b1c29c4ee75bbd75feb7d5e54afd122569074e34983226299732f3ffd33275f274dd4a61355dff7e1f769ccca52c3989b944adbc0e2d75535263b3b589e9978d5f7874affe33deb07b2d3e57e4948176be819912885ff6c710bdcb8cef01017c2fda4c0f4adfdccc9a405b72f4998cbca199c49958c3cf399c88725df3639dd0856402fda6e621c05f2354b8fabee60b88b6267fbea04bee18d546af6498d99d196715c62f51c8ff4f03ff7f9372e9ab727e188cf2bf0cc162d05f9efb5c78d658a9b9ff9cc7fdaa44d417fe6d36493acb61d33a7b4837dcabe59c5762d9bef9db2fce21a330c43689bee9cc87a10c0d628cd401db63f8a80282bb792dba1de24b103965a8ee3e4963f7edcf2532f4845b2d46884ad1d0772c3a3fd0c1618f16c7a856ba0c880dac510d0873fb6056309395783ed765e9527a2e2307828bc29c2ff69ddb32648eef6106124b050ff61a78af262de516017819dfff4d227aae05ae5c57cc2adffdcf64b3df9a21117e320347e5aa509e2c89c51287af6f3f974fd6917c37bae4c67bf72c374df3fd0ab57be217f5451cef783e33a62dc5fa1718da2256b07ee044e65e0a6e9f017e53ade71dde13b124e7c0e0de2bbd2482aba0700af79b4fc158db967f545edc42b1d80d28a3e70ea5aa13335c7794118f7419af402b85f3696c0681eceaf91ed9b34d1848aa85bfda9834a751eedcf77238a359ff6aff7475ba1e8440a4cc64aa384840a52621b28ce06f98f2b4f6330565326fd34843c5a8033d9065ed7a4b0c9e7f2e7d6ea69bcb08d596635cde25f68494ccaadff3ea2992e2745f6b568035488c24da5a5d52f3e8b5eda8162c026685e5c192769dc8e65e040db3bebff2e9c3240d2b8f824fa9c730e0ce46c50ee891b826dc5e2b9b3ae20aebfc05e3120a4af6af2d26637521a68857e3008cab41b8c79b04500cfd15554f64a8f19d80662c3ceb24047ee3e1bb819b1cb74d570c96200dd2556089c53f6dbf708adef15ac5598b476e038574da94895ab9f1d7ba3dd646fc4fae6969844e14a546b8048d3c6ea623977e074a5bfdb48f5a80b633a5a85c2c634f78439aea50b43ac0fc51af9112e97f272e5448cc3110fce7a4081ea0613cba5637de45982ff7144d57cb6401e5186d39755af273947e526d5bb5bd4390562cfb8f28039c14be94986fb4f79a49bb97a30d2f252a8569e121993af3c57a60e98cb07dfedbdeffc887ada8d098ac4deef25fee3b33ce90be9d27ae66602da89b4b931a08ae776e7ecac8ccb30c02b72208b87f05b03b9cf83f66e4be8344fd4c4ddd08194ad7a0a3a6d6ec21058e6de8bf9c8691cb7994748e71989387340a5ecd3cd0f506b6686522673e9d2770cd13db18217cd261f706efcc0f4b3842982e4c8d333b3e0ae9348b91e15843e17371426b8294964f2e74cd1c2e08a575b66a79494d98f1db480edc741f689a3678985c379609bac92b0c192dfe5ea44fc284cf67297220888210d9ebd2d100ffc8bcb13636aad6263b2a735e3d006f309100dc391297ce7253e6df1885eefee0e7035ef318053d7177cd4acc5ec92031a1fd66def3404c4adfff0f12194a093fad509a0a6c7422011d0b0c40a6da8601fc71e48ad2544ebc652499ed591e6eb89b074fca8a920b8bbb568abfcc0af73fa4f3256cb30609cdbd11307db751d0835e09cfa1c747a58ed2919d4bd6a9a8eb2c1fb92e003bb090de173dc704b387f41b7285f95294d1ce756b269e9e3814ccb3f80efe0d7eac6d0cfe2cc51524aa4c984476d74fd34f3e4ff126cf01523a1deda0e5a0772f0e61bed8dc3615d547d8113d23d8f0bfc0097ae88258e6478cee389fbb6bf4ea68d083a938d7f781ce370c03cbd10a053e7d6a37526f610220eb684805e62204f210a790e7009cf71fb036851f5fcdb86bf640c94e0c0a412a66abf5a7f205d515b6c85d65b7da2f7e40dcf3d0567d2d851f02942a0f9a67e7f9f4427460de297d17219b940ddcfaf8310d6e906831be39c2cf1d527f2ffabd95dfe145c8f0adecfc4b167f38ae03fd8d2fe4d42bd8f2ae20f59a3688153a8b2c75ad360bd9a900d810d5ce17a5be35436cd15d6b2b881b56fd97277e4b2cd82f25df35286ec724a125280a036bcb602bd0038c5ea3026547462a06e4a45729ca0784e31d1103b7f991eaa89d7121cfd67510fb18d4d5b03068884c592d6bad56815d4eb4cffab1feb7ea27dd4e28c62db6d18f8d838b48553cd737611657463349f70cdc260ab0ad9bf163658eacc78982a274f85aadb0becf92588ecd53fc5e229bb1fe870a5f18c5c66bd154d052b2e2663004c0d6beacfcb55094ffb1898b7dbe3c9653815da4c11d53ac018b98fbb36fa61197de15258dc4614807c83c02f15420527508e63f8327b4c9862291810ff453b9badb3d7620d8c1aab8b5d50d6af59fc181161a5b1039090062f0c8995822be2df158447253b8abf913225c1bdef3e9a54a0589c1f69580e2565b28c75e9c4c8d738504ee8e08de414c64d8cee4864ecf9a60948515cc07680"
         assertEquals(expectedKeyEnc, Hex.encodeHexString(encodedKey))
     }
-}
\ No newline at end of file
+}
diff --git a/bbootimg/src/test/kotlin/avb/FooterTest.kt b/bbootimg/src/test/kotlin/avb/FooterTest.kt
index 61cccb8..d6909c1 100644
--- a/bbootimg/src/test/kotlin/avb/FooterTest.kt
+++ b/bbootimg/src/test/kotlin/avb/FooterTest.kt
@@ -7,7 +7,7 @@ import org.junit.Test
 import org.junit.Assert.*
 import java.io.ByteArrayInputStream
 
-@ExperimentalUnsignedTypes
+@OptIn(ExperimentalUnsignedTypes::class)
 class FooterTest {
 
     @Test
@@ -36,4 +36,4 @@ class FooterTest {
             }
         }
     }
-}
\ No newline at end of file
+}
diff --git a/bbootimg/src/test/kotlin/avb/HeaderTest.kt b/bbootimg/src/test/kotlin/avb/HeaderTest.kt
index 9dfcf55..ee28ed6 100644
--- a/bbootimg/src/test/kotlin/avb/HeaderTest.kt
+++ b/bbootimg/src/test/kotlin/avb/HeaderTest.kt
@@ -5,7 +5,7 @@ import org.apache.commons.codec.binary.Hex
 import org.junit.Test
 import java.io.ByteArrayInputStream
 
-@ExperimentalUnsignedTypes
+@OptIn(ExperimentalUnsignedTypes::class)
 class HeaderTest {
 
     @Test
@@ -14,4 +14,4 @@ class HeaderTest {
         val header2 = Header(ByteArrayInputStream(Hex.decodeHex(vbmetaHeaderStr)))
         println(header2.toString())
     }
-}
\ No newline at end of file
+}
diff --git a/bbootimg/src/test/kotlin/avb/alg/AlgorithmsTest.kt b/bbootimg/src/test/kotlin/avb/alg/AlgorithmsTest.kt
index 4683a4e..c93952d 100644
--- a/bbootimg/src/test/kotlin/avb/alg/AlgorithmsTest.kt
+++ b/bbootimg/src/test/kotlin/avb/alg/AlgorithmsTest.kt
@@ -5,7 +5,7 @@ import cfig.Helper
 import org.junit.Assert
 import org.junit.Test
 
-@ExperimentalUnsignedTypes
+@OptIn(ExperimentalUnsignedTypes::class)
 class AlgorithmsTest {
     @Test
     fun test1() {
@@ -15,4 +15,4 @@ class AlgorithmsTest {
                 "0001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff003031300d060960864801650304020105000420")
         println(alg)
     }
-}
\ No newline at end of file
+}
diff --git a/bbootimg/src/test/kotlin/avb/desc/HashDescriptorTest.kt b/bbootimg/src/test/kotlin/avb/desc/HashDescriptorTest.kt
index 95de672..63f2604 100644
--- a/bbootimg/src/test/kotlin/avb/desc/HashDescriptorTest.kt
+++ b/bbootimg/src/test/kotlin/avb/desc/HashDescriptorTest.kt
@@ -6,7 +6,7 @@ import org.junit.Test
 import org.slf4j.LoggerFactory
 import java.io.ByteArrayInputStream
 
-@ExperimentalUnsignedTypes
+@OptIn(ExperimentalUnsignedTypes::class)
 class HashDescriptorTest {
     private val log = LoggerFactory.getLogger(HashDescriptorTest::class.java)
 
@@ -17,4 +17,4 @@ class HashDescriptorTest {
         log.info(desc.toString())
         Assert.assertEquals(descStr, Hex.encodeHexString(desc.encode()))
     }
-}
\ No newline at end of file
+}
diff --git a/bbootimg/src/test/kotlin/avb/desc/HashTreeDescriptorTest.kt b/bbootimg/src/test/kotlin/avb/desc/HashTreeDescriptorTest.kt
index 42ef0f7..abd02df 100644
--- a/bbootimg/src/test/kotlin/avb/desc/HashTreeDescriptorTest.kt
+++ b/bbootimg/src/test/kotlin/avb/desc/HashTreeDescriptorTest.kt
@@ -7,7 +7,7 @@ import org.junit.Test
 import org.junit.Assert.*
 import java.io.ByteArrayInputStream
 
-@ExperimentalUnsignedTypes
+@OptIn(ExperimentalUnsignedTypes::class)
 class HashTreeDescriptorTest {
 
     @Test
diff --git a/bbootimg/src/test/kotlin/avb/desc/KernelCmdlineDescriptorTest.kt b/bbootimg/src/test/kotlin/avb/desc/KernelCmdlineDescriptorTest.kt
index f3a8fe5..703f7e6 100644
--- a/bbootimg/src/test/kotlin/avb/desc/KernelCmdlineDescriptorTest.kt
+++ b/bbootimg/src/test/kotlin/avb/desc/KernelCmdlineDescriptorTest.kt
@@ -5,7 +5,7 @@ import org.junit.Assert.assertEquals
 import org.junit.Test
 import java.io.ByteArrayInputStream
 
-@ExperimentalUnsignedTypes
+@OptIn(ExperimentalUnsignedTypes::class)
 class KernelCmdlineDescriptorTest {
     @Test
     fun encode() {
@@ -17,4 +17,4 @@ class KernelCmdlineDescriptorTest {
         val cmd2 = KernelCmdlineDescriptor(ByteArrayInputStream(Hex.decodeHex(cmdStr2)), 0)
         assertEquals(cmdStr2, Hex.encodeHexString(cmd2.encode()))
     }
-}
\ No newline at end of file
+}
diff --git a/bbootimg/src/test/kotlin/avb/desc/UnknownDescriptorTest.kt b/bbootimg/src/test/kotlin/avb/desc/UnknownDescriptorTest.kt
index a4736f0..660de11 100644
--- a/bbootimg/src/test/kotlin/avb/desc/UnknownDescriptorTest.kt
+++ b/bbootimg/src/test/kotlin/avb/desc/UnknownDescriptorTest.kt
@@ -6,7 +6,7 @@ import org.junit.Test
 import org.slf4j.LoggerFactory
 import java.io.ByteArrayInputStream
 
-@ExperimentalUnsignedTypes
+@OptIn(ExperimentalUnsignedTypes::class)
 class UnknownDescriptorTest {
     private val log = LoggerFactory.getLogger(UnknownDescriptorTest::class.java)
 
diff --git a/bbootimg/src/test/kotlin/bootloader_message/BootloaderMsgTest.kt b/bbootimg/src/test/kotlin/bootloader_message/BootloaderMsgTest.kt
index c2a405a..58a0a80 100644
--- a/bbootimg/src/test/kotlin/bootloader_message/BootloaderMsgTest.kt
+++ b/bbootimg/src/test/kotlin/bootloader_message/BootloaderMsgTest.kt
@@ -6,7 +6,7 @@ import org.junit.Test
 import org.junit.Assert.*
 import org.slf4j.LoggerFactory
 
-@ExperimentalUnsignedTypes
+@OptIn(ExperimentalUnsignedTypes::class)
 class BootloaderMsgTest {
     private val log = LoggerFactory.getLogger(BootloaderMsgTest::class.java)
 
diff --git a/bbootimg/src/test/kotlin/cfig/io/Struct3Test.kt b/bbootimg/src/test/kotlin/cfig/io/Struct3Test.kt
index 0e61346..a790e1d 100644
--- a/bbootimg/src/test/kotlin/cfig/io/Struct3Test.kt
+++ b/bbootimg/src/test/kotlin/cfig/io/Struct3Test.kt
@@ -5,7 +5,7 @@ import org.junit.Assert
 import org.junit.Test
 import java.io.ByteArrayInputStream
 
-@ExperimentalUnsignedTypes
+@OptIn(ExperimentalUnsignedTypes::class)
 class Struct3Test {
     private fun getConvertedFormats(inStruct: Struct3): ArrayList<Map<String, Int>> {
         val f = inStruct.javaClass.getDeclaredField("formats")
diff --git a/bbootimg/src/test/kotlin/init/RebootTest.kt b/bbootimg/src/test/kotlin/init/RebootTest.kt
index 64c509f..f15d0de 100644
--- a/bbootimg/src/test/kotlin/init/RebootTest.kt
+++ b/bbootimg/src/test/kotlin/init/RebootTest.kt
@@ -5,7 +5,7 @@ import cfig.init.Reboot
 import org.junit.Test
 import java.util.*
 
-@ExperimentalUnsignedTypes
+@OptIn(ExperimentalUnsignedTypes::class)
 class RebootTest {
     @Test
     fun testDifferentModes() {
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 9492014..a4b4429 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,5 @@
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-6.0.1-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-6.3-bin.zip
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists