Upgrade to Kotlin 1.4
diff --git a/build.gradle b/build.gradle
index 24e7984..3c0d52c 100644
--- a/build.gradle
+++ b/build.gradle
@@ -6,10 +6,10 @@
   ext.kmpNativeEnabled = Boolean.parseBoolean(System.getProperty('knative', 'true'))
 
   ext.versions = [
-      'kotlin': '1.3.70',
+      'kotlin': '1.4.0',
       'jmhPlugin': '0.5.0',
       'animalSnifferPlugin': '1.5.0',
-      'dokka': '0.10.0',
+      'dokka': '1.4.0-rc',
       'jmh': '1.23',
       'animalSniffer': '1.16',
       'junit': '4.12',
diff --git a/gradle/gradle-mvn-mpp-push.gradle b/gradle/gradle-mvn-mpp-push.gradle
index 7b646cb..475b6fc 100644
--- a/gradle/gradle-mvn-mpp-push.gradle
+++ b/gradle/gradle-mvn-mpp-push.gradle
@@ -2,12 +2,11 @@
 apply plugin: 'signing'
 apply plugin: 'org.jetbrains.dokka'
 
-dokka {
+dokkaGfm {
   outputDirectory = "$rootDir/docs/2.x"
-  outputFormat = 'gfm'
 
-  multiplatform {
-    global {
+  dokkaSourceSets {
+    configureEach {
       reportUndocumented = false
       skipDeprecated = true
       jdkVersion = 8
@@ -20,23 +19,11 @@
         suppress = true
       }
     }
-    jvm {
-      sourceRoot {
-        // assuming there is only a single source dir...
-        path = kotlin.sourceSets.jvmMain.kotlin.srcDirs[0]
-      }
+    create("jvmMain") {
     }
-    js {
-      sourceRoot {
-        // assuming there is only a single source dir...
-        path = kotlin.sourceSets.jsMain.kotlin.srcDirs[0]
-      }
+    create("jsMain") {
     }
-    'native' {
-      sourceRoot {
-        // assuming there is only a single source dir...
-        path = kotlin.sourceSets.nativeMain.kotlin.srcDirs[0]
-      }
+    create("nativeMain") {
     }
   }
 }
@@ -67,9 +54,9 @@
   classifier = 'sources'
 }
 
-task javadocsJar(type: Jar, dependsOn: dokka) {
+task javadocsJar(type: Jar, dependsOn: dokkaGfm) {
   classifier = 'javadoc'
-  from dokka.outputDirectory
+  from dokkaGfm.outputDirectory
 }
 
 signing {
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 21e622d..6c9a224 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.4.1-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-6.6-bin.zip
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
diff --git a/okio/jvm/japicmp/build.gradle b/okio/jvm/japicmp/build.gradle
index d9e9948..782c699 100644
--- a/okio/jvm/japicmp/build.gradle
+++ b/okio/jvm/japicmp/build.gradle
@@ -40,12 +40,13 @@
   ignoreMissingClasses = true
   includeSynthetic = true
   classExcludes = [
+      'okio.ByteString', // Bytecode version changed from 51.0 to 50.0
       'okio.RealBufferedSink', // Internal.
       'okio.RealBufferedSource', // Internal.
       'okio.SegmentedByteString', // Internal.
       'okio.SegmentPool', // Internal.
       'okio.Util', // Internal.
-      'okio.Options', // Bytecode version changed from 51.0 to 50.0    
+      'okio.Options', // Bytecode version changed from 51.0 to 50.0
   ]
   methodExcludes = [
       'okio.ByteString#getByte(int)', // Became 'final' in 1.15.0.
diff --git a/okio/src/jvmTest/java/okio/OkioTest.java b/okio/src/jvmTest/java/okio/OkioTest.java
index ba14489..725ce6a 100644
--- a/okio/src/jvmTest/java/okio/OkioTest.java
+++ b/okio/src/jvmTest/java/okio/OkioTest.java
@@ -145,7 +145,7 @@
     try {
       Okio.buffer((Sink) null);
       fail();
-    } catch (IllegalArgumentException expected) {
+    } catch (NullPointerException expected) {
       assertEquals("Parameter specified as non-null is null: "
               + "method okio.Okio__OkioKt.buffer, parameter $this$buffer",
           expected.getMessage());
@@ -156,7 +156,7 @@
     try {
       Okio.buffer((Source) null);
       fail();
-    } catch (IllegalArgumentException expected) {
+    } catch (NullPointerException expected) {
       assertEquals("Parameter specified as non-null is null: "
               + "method okio.Okio__OkioKt.buffer, parameter $this$buffer",
           expected.getMessage());
diff --git a/okio/src/jvmTest/java/okio/Utf8Test.java b/okio/src/jvmTest/java/okio/Utf8Test.java
index 4d2b778..63e0b7d 100644
--- a/okio/src/jvmTest/java/okio/Utf8Test.java
+++ b/okio/src/jvmTest/java/okio/Utf8Test.java
@@ -214,7 +214,7 @@
     try {
       Utf8.size(null, 0, 0);
       fail();
-    } catch (IllegalArgumentException expected) {
+    } catch (NullPointerException expected) {
     }
     try {
       Utf8.size("abc", -1, 2);