Merge commit '54d26887d84af0b201dd86c02ef116552ee867dc' into dev-release
diff --git a/.gitignore b/.gitignore
index 90f5857..018c71b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -12,10 +12,12 @@
 *~
 .#*
 .gradle/
+**/.gradle/
 .gradle_user_home
 .idea/
 android-data*/
 build/
+**/build/
 buildSrc/out/
 src/*/out
 d8_r8/*/out
@@ -269,6 +271,8 @@
 third_party/rhino-android-1.1.1.tar.gz
 third_party/sample_libraries
 third_party/sample_libraries.tar.gz
+third_party/smali
+third_party/smali.tar.gz
 third_party/tachiyomi
 third_party/tachiyomi.tar.gz
 third_party/youtube/*
diff --git a/build.gradle b/build.gradle
index a4752c4..332b74a 100644
--- a/build.gradle
+++ b/build.gradle
@@ -7,7 +7,6 @@
 import desugaredlibrary.CustomConversionAsmRewriterTask
 import net.ltgt.gradle.errorprone.CheckSeverity
 import org.gradle.internal.os.OperatingSystem
-import smali.SmaliTask
 import tasks.DownloadDependency
 import tasks.GetJarsFromConfiguration
 
@@ -372,6 +371,7 @@
                 "r8-releases/2.0.74",
                 "r8-releases/3.2.54",
                 "r8mappings",
+                "smali",
                 "tachiyomi"
         ],
         // All dex-vms have a fixed OS of Linux, as they are only supported on Linux, and will be run in a Docker
@@ -1632,53 +1632,6 @@
     }
 }
 
-task buildSmali {
-    def smaliDir = file("src/test/smali")
-    smaliDir.eachDirRecurse() { dir ->
-        def name = dir.getName();
-        def relativeDir = smaliDir.toPath().relativize(dir.toPath());
-        def smaliOutputDir = file("build/test/smali/" + relativeDir);
-        smaliOutputDir.mkdirs()
-        outputs.dir smaliOutputDir
-        def taskName = "smali_build_${relativeDir.toString().replace('/', '_').replace('\\', '_')}"
-        def smaliFiles = fileTree(dir: dir, include: '*.smali')
-        def javaFiles = fileTree(dir: dir, include: '*.java')
-        def destDir = smaliOutputDir;
-        def destFile = destDir.toPath().resolve("${name}.dex").toFile()
-        def intermediateFileName = "${name}-intermediate.dex";
-        def intermediateFile = destDir.toPath().resolve(intermediateFileName).toFile()
-        if (javaFiles.empty) {
-            if (!smaliFiles.empty) {
-                dependsOn "${taskName}_smali"
-                task "${taskName}_smali"(type: SmaliTask) {
-                    source = smaliFiles
-                    destination = destFile
-                }
-            }
-        } else {
-            dependsOn "${taskName}_smali"
-            dependsOn "${taskName}_jar"
-            task "${taskName}_smali"(type: SmaliTask) {
-                source = smaliFiles
-                destination = destFile
-            }
-            task "${taskName}_java"(type: JavaCompile) {
-                source = javaFiles
-                destinationDir destDir
-                classpath = sourceSets.main.compileClasspath
-                sourceCompatibility = JavaVersion.VERSION_1_7
-                targetCompatibility = JavaVersion.VERSION_1_7
-                options.compilerArgs += ["-Xlint:-options"]
-            }
-            task "${taskName}_jar"(type: Jar, dependsOn: "${taskName}_java") {
-                archiveName = "Test.jar"
-                destinationDir = destDir
-                from fileTree(dir: destDir, include: 'Test.class')
-            }
-        }
-    }
-}
-
 tasks.withType(Test) {
     println("NOTE: Number of processors " + Runtime.runtime.availableProcessors())
     def userDefinedCoresPerFork = System.getenv('R8_GRADLE_CORES_PER_FORK')
@@ -2282,7 +2235,6 @@
         dependsOn downloadDeps
         dependsOn buildExamples
         dependsOn buildKotlinR8TestResources
-        dependsOn buildSmali
         dependsOn buildPreNJdwpTestsJar
         dependsOn compileTestNGRunner
         dependsOn provideArtFrameworksDependencies
diff --git a/buildSrc/src/main/java/smali/SmaliTask.java b/buildSrc/src/main/java/smali/SmaliTask.java
deleted file mode 100644
index d35102e..0000000
--- a/buildSrc/src/main/java/smali/SmaliTask.java
+++ /dev/null
@@ -1,91 +0,0 @@
-// Copyright (c) 2019, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-package smali;
-
-import static java.util.stream.Collectors.toList;
-
-import com.android.tools.smali.smali.Smali;
-import com.android.tools.smali.smali.SmaliOptions;
-import java.io.File;
-import java.io.IOException;
-import java.io.UncheckedIOException;
-import java.util.List;
-import javax.inject.Inject;
-import org.gradle.api.DefaultTask;
-import org.gradle.api.file.FileTree;
-import org.gradle.api.file.RegularFileProperty;
-import org.gradle.api.provider.SetProperty;
-import org.gradle.api.tasks.InputFiles;
-import org.gradle.api.tasks.OutputFile;
-import org.gradle.api.tasks.TaskAction;
-import org.gradle.workers.WorkAction;
-import org.gradle.workers.WorkParameters;
-import org.gradle.workers.WorkerExecutor;
-
-public class SmaliTask extends DefaultTask {
-
-  private final WorkerExecutor workerExecutor;
-
-  private FileTree source;
-  private File destination;
-
-  @Inject
-  public SmaliTask(WorkerExecutor workerExecutor) {
-    this.workerExecutor = workerExecutor;
-  }
-
-  @InputFiles
-  public FileTree getSource() {
-    return source;
-  }
-
-  public void setSource(FileTree source) {
-    this.source = source;
-  }
-
-  @OutputFile
-  public File getDestination() {
-    return destination;
-  }
-
-  public void setDestination(File destination) {
-    this.destination = destination;
-  }
-
-  @TaskAction
-  void exec() {
-    workerExecutor
-        .noIsolation()
-        .submit(
-            RunSmali.class,
-            parameters -> {
-              parameters.getSources().set(source.getFiles());
-              parameters.getDestination().set(destination);
-            });
-  }
-
-  public interface RunSmaliParameters extends WorkParameters {
-
-    SetProperty<File> getSources();
-
-    RegularFileProperty getDestination();
-  }
-
-  public abstract static class RunSmali implements WorkAction<RunSmaliParameters> {
-
-    @Override
-    public void execute() {
-      try {
-        RunSmaliParameters parameters = getParameters();
-        List<String> fileNames =
-            parameters.getSources().get().stream().map(File::toString).collect(toList());
-        SmaliOptions options = new SmaliOptions();
-        options.outputDexFile = parameters.getDestination().getAsFile().get().getCanonicalPath();
-        Smali.assemble(options, fileNames);
-      } catch (IOException e) {
-        throw new UncheckedIOException(e);
-      }
-    }
-  }
-}
diff --git a/d8_r8/commonBuildSrc/src/main/kotlin/DependenciesPlugin.kt b/d8_r8/commonBuildSrc/src/main/kotlin/DependenciesPlugin.kt
index a1796c3..ab4a518 100644
--- a/d8_r8/commonBuildSrc/src/main/kotlin/DependenciesPlugin.kt
+++ b/d8_r8/commonBuildSrc/src/main/kotlin/DependenciesPlugin.kt
@@ -2,23 +2,28 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+import java.io.File
+import java.net.URI
+import java.nio.file.Paths
+import org.gradle.api.JavaVersion
 import org.gradle.api.Plugin
 import org.gradle.api.Project
-import org.gradle.api.JavaVersion
 import org.gradle.api.Task
-import org.gradle.api.tasks.Exec
-import java.io.File
-import java.nio.file.Path
-import java.nio.file.Paths
-import java.net.URI
+import org.gradle.api.file.ConfigurableFileCollection
+import org.gradle.api.plugins.JavaPluginExtension
+import org.gradle.api.tasks.SourceSet
+import org.gradle.jvm.tasks.Jar
+import org.gradle.kotlin.dsl.register
+import org.gradle.nativeplatform.platform.OperatingSystem
+import org.gradle.nativeplatform.platform.internal.DefaultNativePlatform
 
 class DependenciesPlugin: Plugin<Project> {
 
   override fun apply(target: Project) {
     val dependenciesPath = "file:" +
-      "${target.getRoot().resolve("third_party").resolve("dependencies").getAbsolutePath()}"
+      target.getRoot().resolve("third_party").resolve("dependencies").getAbsolutePath()
     val dependenciesNewPath = "file:" +
-      "${target.getRoot().resolve("third_party").resolve("dependencies_new").getAbsolutePath()}"
+      target.getRoot().resolve("third_party").resolve("dependencies_new").getAbsolutePath()
     val repositories = target.getRepositories()
     repositories.maven { name = "LOCAL_MAVEN_REPO";  url = URI(dependenciesPath) }
     repositories.maven { name = "LOCAL_MAVEN_REPO_NEW";  url = URI(dependenciesNewPath) }
@@ -26,9 +31,39 @@
 }
 
 enum class Jdk(val folder : String) {
+  JDK_8("jdk8"),
+  JDK_9("openjdk-9.0.4"),
   JDK_11("jdk-11"),
   JDK_17("jdk-17"),
   JDK_20("jdk-20");
+
+  fun isJdk8() : Boolean {
+    return this == JDK_8
+  }
+
+  fun getThirdPartyDependency() : ThirdPartyDependency {
+    val os: OperatingSystem = DefaultNativePlatform.getCurrentOperatingSystem()
+    val subFolder : String
+    val fileName : String
+    if (os.isLinux) {
+      subFolder = if(isJdk8()) "linux-x86" else "linux"
+      fileName = "java"
+    } else if (os.isMacOsX) {
+      subFolder = if(isJdk8()) "darwin-x86" else "osx"
+      fileName = "java"
+    } else {
+      assert(os.isWindows())
+      if (isJdk8()) {
+        throw RuntimeException("No Jdk8 on Windows")
+      }
+      subFolder = "windows"
+      fileName = "java.bat"
+    }
+    return ThirdPartyDependency(
+      name,
+      Paths.get("third_party", "openjdk", folder, subFolder, "bin", fileName).toFile(),
+      Paths.get("third_party", "openjdk", folder, "$subFolder.tar.gz.sha1").toFile())
+  }
 }
 
 fun Project.getRoot() : File {
@@ -43,6 +78,71 @@
   return "****** ${title} ******"
 }
 
+fun Project.ensureThirdPartyDependencies(name : String, deps : List<ThirdPartyDependency>) : Task {
+  val outputFiles : MutableList<File> = mutableListOf()
+  val depsTasks = deps.map({
+      tasks.register<DownloadDependencyTask>("download-third-party-${it.packageName}") {
+        setDependency(
+          it.packageName,
+          getRoot().resolve(it.sha1File),
+          getRoot().resolve(it.path).parentFile,
+          it.type)
+        outputFiles.add(it.path)
+      }})
+  return tasks.register("ensure-third-party-$name") {
+    dependsOn(depsTasks)
+    outputs.files(outputFiles)
+  }.get()
+}
+
+/**
+ * Builds a jar for each subfolder in an examples test source set.
+ *
+ * <p> As an example, src/test/examplesJava9 contains subfolders: backport, collectionof, ..., .
+ * These are compiled to individual jars and placed in <repo-root>/build/test/examplesJava9/ as:
+ * backport.jar, collectionof.jar, ..., .
+ *
+ * Calling this from a project will amend the task graph with the task named
+ * getExamplesJarsTaskName(examplesName) such that it can be referenced from the test runners.
+ */
+fun Project.buildJavaExamplesJars(examplesName : String) : Task {
+  val outputFiles : MutableList<File> = mutableListOf()
+  val jarTasks : MutableList<Task> = mutableListOf()
+  var testSourceSet = extensions
+    .getByType(JavaPluginExtension::class.java)
+    .sourceSets
+    // The TEST_SOURCE_SET_NAME is the source set defined by writing java { sourcesets.test { ... }}
+    .getByName(SourceSet.TEST_SOURCE_SET_NAME)
+  testSourceSet
+    .java
+    .sourceDirectories
+    .files
+    .forEach { srcDir ->
+      srcDir.listFiles(File::isDirectory)?.forEach { exampleDir ->
+        jarTasks.add(tasks.register<Jar>("jar-examples$examplesName-${exampleDir.name}") {
+          dependsOn("compileTestJava")
+          archiveFileName.set("${exampleDir.name}.jar")
+          destinationDirectory.set(getRoot().resolveAll("build", "test", "examples$examplesName"))
+          from(testSourceSet.output.classesDirs.files.map{ it.resolve(exampleDir.name) }) {
+            include("**/*.class")
+          }
+        }.get())
+      }
+    }
+  return tasks.register(getExamplesJarsTaskName(examplesName)) {
+    dependsOn(jarTasks)
+    outputs.files(outputFiles)
+  }.get()
+}
+
+fun Project.getExamplesJarsTaskName(name: String) : String {
+  return "build-example-jars-$name"
+}
+
+fun Project.resolve(thirdPartyDependency: ThirdPartyDependency) : ConfigurableFileCollection {
+  return files(project.getRoot().resolve(thirdPartyDependency.path))
+}
+
 /**
  * When using composite builds, referecing tasks in other projects do not give a Task but a
  * TaskReference. To get outputs from other tasks we need to have a proper task and gradle do not
@@ -83,11 +183,12 @@
 }
 
 fun Project.baseCompilerCommandLine(
-  jar : File, deps : File, compiler : String, args : List<String> = listOf()) : List<String> {
+  jar: File, deps: File, compiler: String, args: List<String> = listOf(),
+) : List<String> {
   // Execute r8 commands against a stable r8 with dependencies.
   // TODO(b/139725780): See if we can remove or lower the heap size (-Xmx8g).
   return listOf(
-    "${getJavaPath(Jdk.JDK_17)}",
+    getJavaPath(Jdk.JDK_17),
     "-Xmx8g",
     "-ea",
     "-cp",
@@ -97,11 +198,12 @@
 }
 
 fun Project.baseCompilerCommandLine(
-  jar : File, compiler : String, args : List<String> = listOf()) : List<String> {
+  jar: File, compiler: String, args: List<String> = listOf(),
+) : List<String> {
   // Execute r8 commands against a stable r8 with dependencies.
   // TODO(b/139725780): See if we can remove or lower the heap size (-Xmx8g).
   return listOf(
-    "${getJavaPath(Jdk.JDK_17)}",
+    getJavaPath(Jdk.JDK_17),
     "-Xmx8g",
     "-ea",
     "-cp",
@@ -111,14 +213,14 @@
 }
 
 fun Project.createR8LibCommandLine(
-  r8Compiler : File,
-  input : File,
+  r8Compiler: File,
+  input: File,
   output: File,
-  pgConf : List<File>,
-  excludingDepsVariant : Boolean,
-  lib : List<File> = listOf(),
-  classpath : List<File> = listOf(),
-  args : List<String> = listOf()) : List<String> {
+  pgConf: List<File>,
+  excludingDepsVariant: Boolean,
+  lib: List<File> = listOf(),
+  classpath: List<File> = listOf()
+) : List<String> {
   val pgList = pgConf.flatMap({ listOf("--pg-conf", "$it") })
   val libList = lib.flatMap({ listOf("--lib", "$it") })
   val cpList = classpath.flatMap({ listOf("--classpath", "$it") })
@@ -142,15 +244,16 @@
 
 object Versions {
   const val asmVersion = "9.5"
+  const val errorproneVersion = "2.18.0"
   const val fastUtilVersion = "7.2.1"
   const val gsonVersion = "2.7"
   const val guavaVersion = "31.1-jre"
+  const val javassist = "3.29.2-GA"
   const val junitVersion = "4.13-beta-2"
   const val kotlinVersion = "1.8.10"
   const val kotlinMetadataVersion = "0.6.2"
+  const val mockito = "2.10.0"
   const val smaliVersion = "3.0.3"
-  const val errorproneVersion = "2.18.0"
-  const val javassist = "3.29.2-GA"
 }
 
 object Deps {
@@ -166,6 +269,108 @@
     "org.jetbrains.kotlinx:kotlinx-metadata-jvm:${Versions.kotlinMetadataVersion}" }
   val kotlinStdLib by lazy { "org.jetbrains.kotlin:kotlin-stdlib:${Versions.kotlinVersion}" }
   val kotlinReflect by lazy { "org.jetbrains.kotlin:kotlin-reflect:${Versions.kotlinVersion}" }
+  val mockito by lazy { "org.mockito:mockito-core:${Versions.mockito}" }
   val smali by lazy { "com.android.tools.smali:smali:${Versions.smaliVersion}" }
   val errorprone by lazy { "com.google.errorprone:error_prone_core:${Versions.errorproneVersion}" }
 }
+
+object ThirdPartyDeps {
+  val apiDatabase = ThirdPartyDependency(
+    "apiDatabase",
+    Paths.get(
+      "third_party",
+      "api_database",
+      "api_database",
+      "resources",
+      "new_api_database.ser").toFile(),
+    Paths.get("third_party", "api_database", "api_database.tar.gz.sha1").toFile())
+  val ddmLib = ThirdPartyDependency(
+    "ddmlib",
+    Paths.get("third_party", "ddmlib", "ddmlib.jar").toFile(),
+    Paths.get("third_party", "ddmlib.tar.gz.sha1").toFile())
+  val jasmin = ThirdPartyDependency(
+    "jasmin",
+    Paths.get("third_party", "jasmin", "jasmin-2.4.jar").toFile(),
+    Paths.get("third_party", "jasmin.tar.gz.sha1").toFile())
+  val jdwpTests = ThirdPartyDependency(
+    "jdwp-tests",
+    Paths.get("third_party", "jdwp-tests", "apache-harmony-jdwp-tests-host.jar").toFile(),
+    Paths.get("third_party", "jdwp-tests.tar.gz.sha1").toFile())
+  val androidJars : List<ThirdPartyDependency> = getThirdPartyAndroidJars()
+  val java8Runtime = ThirdPartyDependency(
+    "openjdk-rt-1.8",
+    Paths.get("third_party", "openjdk", "openjdk-rt-1.8", "rt.jar").toFile(),
+    Paths.get("third_party", "openjdk", "openjdk-rt-1.8.tar.gz.sha1").toFile()
+  )
+  val androidVMs : List<ThirdPartyDependency> = getThirdPartyAndroidVms()
+  val jdks : List<ThirdPartyDependency> = getJdks()
+}
+
+fun getThirdPartyAndroidJars() : List<ThirdPartyDependency> {
+  return listOf(
+    "libcore_latest",
+    "lib-master",
+    "lib-v14",
+    "lib-v15",
+    "lib-v19",
+    "lib-v21",
+    "lib-v22",
+    "lib-v23",
+    "lib-v24",
+    "lib-v25",
+    "lib-v26",
+    "lib-v27",
+    "lib-v28",
+    "lib-v29",
+    "lib-v30",
+    "lib-v31",
+    "lib-v32",
+    "lib-v33",
+    "lib-v34"
+  ).map(::getThirdPartyAndroidJar)
+}
+
+fun getThirdPartyAndroidJar(version : String) : ThirdPartyDependency {
+  return ThirdPartyDependency(
+    version,
+    Paths.get("third_party", "android_jar", version, "android.jar").toFile(),
+    Paths.get("third_party", "android_jar", "$version.tar.gz.sha1").toFile())
+}
+
+fun getThirdPartyAndroidVms() : List<ThirdPartyDependency> {
+  return listOf(
+    listOf("host", "art-master"),
+    listOf("host", "art-14.0.0-dp1"),
+    listOf("host", "art-13.0.0"),
+    listOf("host", "art-12.0.0-beta4"),
+    listOf("art-10.0.0"),
+    listOf("art-5.1.1"),
+    listOf("art-6.0.1"),
+    listOf("art-7.0.0"),
+    listOf("art-8.1.0"),
+    listOf("art-9.0.0"),
+    listOf("art"),
+    listOf("dalvik-4.0.4"),
+    listOf("dalvik")).map(::getThirdPartyAndroidVm)
+}
+
+fun getThirdPartyAndroidVm(version : List<String>) : ThirdPartyDependency {
+  val output = Paths.get("tools", "linux", *version.toTypedArray(), "bin", "art").toFile()
+  return ThirdPartyDependency(
+    version.last(),
+    output,
+    Paths.get(
+      "tools",
+      "linux",
+      *version.slice(0..version.size - 2).toTypedArray(),
+      "${version.last()}.tar.gz.sha1").toFile())
+}
+
+fun getJdks() : List<ThirdPartyDependency> {
+  val os: OperatingSystem = DefaultNativePlatform.getCurrentOperatingSystem()
+  if (os.isLinux || os.isMacOsX) {
+    return Jdk.values().map{ it.getThirdPartyDependency()}
+  } else {
+    return Jdk.values().filter{ !it.isJdk8() }.map{ it.getThirdPartyDependency()}
+  }
+}
\ No newline at end of file
diff --git a/d8_r8/commonBuildSrc/src/main/kotlin/DownloadDependencyTask.kt b/d8_r8/commonBuildSrc/src/main/kotlin/DownloadDependencyTask.kt
new file mode 100644
index 0000000..24185c6
--- /dev/null
+++ b/d8_r8/commonBuildSrc/src/main/kotlin/DownloadDependencyTask.kt
@@ -0,0 +1,143 @@
+// Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import java.io.BufferedReader
+import java.io.File
+import java.io.IOException
+import java.io.InputStreamReader
+import java.nio.charset.StandardCharsets
+import java.util.Arrays
+import java.util.stream.Collectors
+import javax.inject.Inject
+import org.gradle.api.DefaultTask
+import org.gradle.api.file.RegularFileProperty
+import org.gradle.api.provider.Property
+import org.gradle.api.tasks.OutputDirectory
+import org.gradle.api.tasks.TaskAction
+import org.gradle.api.tasks.options.Option
+import org.gradle.internal.os.OperatingSystem
+import org.gradle.workers.WorkAction
+import org.gradle.workers.WorkParameters
+import org.gradle.workers.WorkerExecutor
+
+abstract class DownloadDependencyTask : DefaultTask() {
+
+  private var dependencyType: DependencyType = DependencyType.GOOGLE_STORAGE
+  private var _outputDir: File? = null
+  private var _tarGzFile: File? = null
+  private var _sha1File: File? = null
+
+  @OutputDirectory
+  fun getOutputDir(): File? {
+    return _outputDir
+  }
+
+  @Inject
+  protected abstract fun getWorkerExecutor(): WorkerExecutor?
+
+  @Option(
+    option = "dependency",
+    description = "Sets the dependency information for a cloud stored file")
+  fun setDependency(
+    dependencyName : String, sha1File: File, outputDir : File, dependencyType: DependencyType) {
+    _outputDir = outputDir
+    _sha1File = sha1File
+    _tarGzFile = sha1File.resolveSibling(sha1File.name.replace(".sha1", ""))
+    this.dependencyType = dependencyType
+  }
+
+  @TaskAction
+  fun execute() {
+    val sha1File = _sha1File!!
+    val outputDir = _outputDir!!
+    val tarGzFile = _tarGzFile!!
+    if (!sha1File.exists()) {
+      throw RuntimeException("Missing sha1 file: $sha1File")
+    }
+    // First run will write the tar.gz file, causing the second run to still be out-of-date.
+    // Check if the modification time of the tar is newer than the sha in which case we are done.
+    // Also, check the contents of the out directory because gradle appears to create it for us...
+    if (outputDir.exists()
+      && outputDir.isDirectory
+      && outputDir.list().isNotEmpty() && tarGzFile.exists()
+      && sha1File.lastModified() <= tarGzFile.lastModified()) {
+      return
+    }
+    if (outputDir.exists() && outputDir.isDirectory) {
+      outputDir.delete()
+    }
+    getWorkerExecutor()!!
+      .noIsolation()
+      .submit(RunDownload::class.java) {
+        this.type.set(dependencyType)
+        this.sha1File.set(sha1File)
+      }
+  }
+
+
+  interface RunDownloadParameters : WorkParameters {
+    val type : Property<DependencyType>
+    val sha1File : RegularFileProperty
+  }
+
+  abstract class RunDownload : WorkAction<RunDownloadParameters> {
+    override fun execute() {
+      try {
+        val parameters: RunDownloadParameters = parameters
+        val type: DependencyType = parameters.type.get()
+        val sha1File: File = parameters.sha1File.asFile.get()
+        if (type == DependencyType.GOOGLE_STORAGE) {
+          downloadFromGoogleStorage(sha1File)
+        } else if (type == DependencyType.X20) {
+          downloadFromX20(sha1File)
+        } else {
+          throw RuntimeException("Unexpected or missing dependency type: $type")
+        }
+      } catch (e: Exception) {
+        throw RuntimeException(e)
+      }
+    }
+
+    @Throws(IOException::class, InterruptedException::class)
+    private fun downloadFromGoogleStorage(sha1File: File) {
+      val args = Arrays.asList("-n", "-b", "r8-deps", "-s", "-u", sha1File.toString())
+      if (OperatingSystem.current().isWindows) {
+        val command: MutableList<String> = ArrayList()
+        command.add("download_from_google_storage.bat")
+        command.addAll(args)
+        runProcess(ProcessBuilder().command(command))
+      } else {
+        runProcess(
+          ProcessBuilder()
+            .command("bash",
+                     "-c",
+                     "download_from_google_storage " + java.lang.String.join(" ", args)))
+      }
+    }
+
+    @Throws(IOException::class, InterruptedException::class)
+    private fun downloadFromX20(sha1File: File) {
+      if (OperatingSystem.current().isWindows) {
+        throw RuntimeException("Downloading from x20 unsupported on windows")
+      }
+      runProcess(
+        ProcessBuilder()
+          .command("bash", "-c", "tools/download_from_x20.py $sha1File"))
+    }
+
+    @Throws(IOException::class, InterruptedException::class)
+    private fun runProcess(builder: ProcessBuilder) {
+      val command = java.lang.String.join(" ", builder.command())
+      val p = builder.start()
+      val exit = p.waitFor()
+      if (exit != 0) {
+        throw IOException("Process failed for $command\n"
+            + BufferedReader(
+            InputStreamReader(p.errorStream, StandardCharsets.UTF_8))
+            .lines()
+            .collect(Collectors.joining("\n")))
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/d8_r8/commonBuildSrc/src/main/kotlin/ThirdPartyDependency.kt b/d8_r8/commonBuildSrc/src/main/kotlin/ThirdPartyDependency.kt
new file mode 100644
index 0000000..510892d
--- /dev/null
+++ b/d8_r8/commonBuildSrc/src/main/kotlin/ThirdPartyDependency.kt
@@ -0,0 +1,16 @@
+// Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import java.io.File
+
+enum class DependencyType {
+  GOOGLE_STORAGE,
+  X20
+}
+
+data class ThirdPartyDependency(
+  val packageName : String,
+  val path : File,
+  val sha1File : File,
+  val type: DependencyType = DependencyType.GOOGLE_STORAGE)
diff --git a/d8_r8/main/build.gradle.kts b/d8_r8/main/build.gradle.kts
index 34a1c14..a04d4f1 100644
--- a/d8_r8/main/build.gradle.kts
+++ b/d8_r8/main/build.gradle.kts
@@ -23,8 +23,8 @@
 dependencies {
   implementation(":keepanno")
   compileOnly(Deps.asm)
-  compileOnly(Deps.asmUtil)
   compileOnly(Deps.asmCommons)
+  compileOnly(Deps.asmUtil)
   compileOnly(Deps.fastUtil)
   compileOnly(Deps.gson)
   compileOnly(Deps.guava)
@@ -32,6 +32,10 @@
   errorprone(Deps.errorprone)
 }
 
+val thirdPartyResourceDependenciesTask = ensureThirdPartyDependencies(
+  "resourceDeps",
+  listOf(ThirdPartyDeps.apiDatabase))
+
 val keepAnnoJarTask = projectTask("keepanno", "jar")
 
 fun mainJarDependencies() : FileCollection {
@@ -52,6 +56,10 @@
     }
   }
 
+  withType<ProcessResources> {
+    dependsOn(thirdPartyResourceDependenciesTask)
+  }
+
   val swissArmyKnife by registering(Jar::class) {
     from(sourceSets.main.get().output)
     manifest {
@@ -64,7 +72,9 @@
 
   val depsJar by registering(Jar::class) {
     dependsOn(keepAnnoJarTask)
-    println(header("R8 full dependencies"))
+    doFirst {
+      println(header("R8 full dependencies"))
+    }
     mainJarDependencies().forEach({ println(it) })
     from(mainJarDependencies().map(::zipTree))
     from(keepAnnoJarTask.outputs.files.map(::zipTree))
diff --git a/d8_r8/settings.gradle.kts b/d8_r8/settings.gradle.kts
index 70bb38b..402137e 100644
--- a/d8_r8/settings.gradle.kts
+++ b/d8_r8/settings.gradle.kts
@@ -29,7 +29,7 @@
   )
   println("Executing command: ${cmd.joinToString(" ")}")
   var process = ProcessBuilder().command(cmd).start()
-  process.waitFor(5, java.util.concurrent.TimeUnit.SECONDS)
+  process.waitFor()
   if (process.exitValue() != 0) {
     throw GradleException(
       "Bootstrapping dependencies_new download failed:\n"
diff --git a/d8_r8/test/settings.gradle.kts b/d8_r8/test/settings.gradle.kts
index 401f476..ed1f4ea 100644
--- a/d8_r8/test/settings.gradle.kts
+++ b/d8_r8/test/settings.gradle.kts
@@ -6,4 +6,13 @@
 
 val root = rootProject.projectDir.parentFile
 includeBuild(root.resolve("main"))
+includeBuild(root.resolve("test_modules").resolve("tests_java_examples"))
+includeBuild(root.resolve("test_modules").resolve("tests_java_examplesAndroidN"))
+includeBuild(root.resolve("test_modules").resolve("tests_java_examplesAndroidP"))
+includeBuild(root.resolve("test_modules").resolve("tests_java_examplesAndroidO"))
 includeBuild(root.resolve("test_modules").resolve("tests_java_8"))
+includeBuild(root.resolve("test_modules").resolve("tests_java_9"))
+includeBuild(root.resolve("test_modules").resolve("tests_java_10"))
+includeBuild(root.resolve("test_modules").resolve("tests_java_11"))
+includeBuild(root.resolve("test_modules").resolve("tests_java_17"))
+includeBuild(root.resolve("test_modules").resolve("tests_java_20"))
diff --git a/d8_r8/test_modules/tests_java_10/build.gradle.kts b/d8_r8/test_modules/tests_java_10/build.gradle.kts
new file mode 100644
index 0000000..f24610d
--- /dev/null
+++ b/d8_r8/test_modules/tests_java_10/build.gradle.kts
@@ -0,0 +1,36 @@
+// Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import org.gradle.api.JavaVersion
+import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
+
+plugins {
+  `kotlin-dsl`
+  `java-library`
+  id("dependencies-plugin")
+}
+
+val root = getRoot()
+
+java {
+  sourceSets.test.configure {
+    java.srcDir(root.resolveAll("src", "test", "examplesJava10"))
+  }
+  sourceCompatibility = JavaVersion.VERSION_1_10
+  targetCompatibility = JavaVersion.VERSION_1_10
+}
+
+dependencies { }
+
+// We just need to register the examples jars for it to be referenced by other modules.
+val buildExampleJars = buildJavaExamplesJars("Java10")
+
+tasks {
+  withType<JavaCompile> {
+    options.setFork(true)
+    options.forkOptions.memoryMaximumSize = "3g"
+    options.forkOptions.executable = getCompilerPath(Jdk.JDK_11)
+  }
+}
+
diff --git a/d8_r8/test_modules/tests_java_10/gradle.properties b/d8_r8/test_modules/tests_java_10/gradle.properties
new file mode 100644
index 0000000..1de43f9
--- /dev/null
+++ b/d8_r8/test_modules/tests_java_10/gradle.properties
@@ -0,0 +1,17 @@
+# Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE file.
+
+org.gradle.jvmargs=-Xmx2048M -Dfile.encoding=UTF-8
+kotlin.daemon.jvmargs=-Xmx3g -Dkotlin.js.compiler.legacy.force_enabled=true
+systemProp.file.encoding=UTF-8
+
+# Enable new incremental compilation
+kotlin.incremental.useClasspathSnapshot=true
+
+org.gradle.parallel=true
+org.gradle.caching=true
+
+# Do not download any jdks or detect them. We provide them.
+org.gradle.java.installations.auto-detect=false
+org.gradle.java.installations.auto-download=false
diff --git a/d8_r8/test_modules/tests_java_10/settings.gradle.kts b/d8_r8/test_modules/tests_java_10/settings.gradle.kts
new file mode 100644
index 0000000..247cb9c
--- /dev/null
+++ b/d8_r8/test_modules/tests_java_10/settings.gradle.kts
@@ -0,0 +1,5 @@
+// Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+rootProject.name = "tests_java_10"
diff --git a/d8_r8/test_modules/tests_java_11/build.gradle.kts b/d8_r8/test_modules/tests_java_11/build.gradle.kts
new file mode 100644
index 0000000..1ff3ea8
--- /dev/null
+++ b/d8_r8/test_modules/tests_java_11/build.gradle.kts
@@ -0,0 +1,36 @@
+// Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import org.gradle.api.JavaVersion
+import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
+
+plugins {
+  `kotlin-dsl`
+  `java-library`
+  id("dependencies-plugin")
+}
+
+val root = getRoot()
+
+java {
+  sourceSets.test.configure {
+    java.srcDir(root.resolveAll("src", "test", "examplesJava11"))
+  }
+  sourceCompatibility = JavaVersion.VERSION_11
+  targetCompatibility = JavaVersion.VERSION_11
+}
+
+dependencies { }
+
+// We just need to register the examples jars for it to be referenced by other modules.
+val buildExampleJars = buildJavaExamplesJars("Java11")
+
+tasks {
+  withType<JavaCompile> {
+    options.setFork(true)
+    options.forkOptions.memoryMaximumSize = "3g"
+    options.forkOptions.executable = getCompilerPath(Jdk.JDK_11)
+  }
+}
+
diff --git a/d8_r8/test_modules/tests_java_11/gradle.properties b/d8_r8/test_modules/tests_java_11/gradle.properties
new file mode 100644
index 0000000..1de43f9
--- /dev/null
+++ b/d8_r8/test_modules/tests_java_11/gradle.properties
@@ -0,0 +1,17 @@
+# Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE file.
+
+org.gradle.jvmargs=-Xmx2048M -Dfile.encoding=UTF-8
+kotlin.daemon.jvmargs=-Xmx3g -Dkotlin.js.compiler.legacy.force_enabled=true
+systemProp.file.encoding=UTF-8
+
+# Enable new incremental compilation
+kotlin.incremental.useClasspathSnapshot=true
+
+org.gradle.parallel=true
+org.gradle.caching=true
+
+# Do not download any jdks or detect them. We provide them.
+org.gradle.java.installations.auto-detect=false
+org.gradle.java.installations.auto-download=false
diff --git a/d8_r8/test_modules/tests_java_11/settings.gradle.kts b/d8_r8/test_modules/tests_java_11/settings.gradle.kts
new file mode 100644
index 0000000..e737a8a
--- /dev/null
+++ b/d8_r8/test_modules/tests_java_11/settings.gradle.kts
@@ -0,0 +1,5 @@
+// Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+rootProject.name = "tests_java_11"
diff --git a/d8_r8/test_modules/tests_java_17/build.gradle.kts b/d8_r8/test_modules/tests_java_17/build.gradle.kts
new file mode 100644
index 0000000..9e0f2b7
--- /dev/null
+++ b/d8_r8/test_modules/tests_java_17/build.gradle.kts
@@ -0,0 +1,36 @@
+// Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import org.gradle.api.JavaVersion
+import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
+
+plugins {
+  `kotlin-dsl`
+  `java-library`
+  id("dependencies-plugin")
+}
+
+val root = getRoot()
+
+java {
+  sourceSets.test.configure {
+    java.srcDir(root.resolveAll("src", "test", "examplesJava17"))
+  }
+  sourceCompatibility = JavaVersion.VERSION_17
+  targetCompatibility = JavaVersion.VERSION_17
+}
+
+dependencies { }
+
+// We just need to register the examples jars for it to be referenced by other modules.
+val buildExampleJars = buildJavaExamplesJars("Java17")
+
+tasks {
+  withType<JavaCompile> {
+    options.setFork(true)
+    options.forkOptions.memoryMaximumSize = "3g"
+    options.forkOptions.executable = getCompilerPath(Jdk.JDK_17)
+  }
+}
+
diff --git a/d8_r8/test_modules/tests_java_17/gradle.properties b/d8_r8/test_modules/tests_java_17/gradle.properties
new file mode 100644
index 0000000..1de43f9
--- /dev/null
+++ b/d8_r8/test_modules/tests_java_17/gradle.properties
@@ -0,0 +1,17 @@
+# Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE file.
+
+org.gradle.jvmargs=-Xmx2048M -Dfile.encoding=UTF-8
+kotlin.daemon.jvmargs=-Xmx3g -Dkotlin.js.compiler.legacy.force_enabled=true
+systemProp.file.encoding=UTF-8
+
+# Enable new incremental compilation
+kotlin.incremental.useClasspathSnapshot=true
+
+org.gradle.parallel=true
+org.gradle.caching=true
+
+# Do not download any jdks or detect them. We provide them.
+org.gradle.java.installations.auto-detect=false
+org.gradle.java.installations.auto-download=false
diff --git a/d8_r8/test_modules/tests_java_17/settings.gradle.kts b/d8_r8/test_modules/tests_java_17/settings.gradle.kts
new file mode 100644
index 0000000..aa2b7b1
--- /dev/null
+++ b/d8_r8/test_modules/tests_java_17/settings.gradle.kts
@@ -0,0 +1,5 @@
+// Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+rootProject.name = "tests_java_17"
diff --git a/d8_r8/test_modules/tests_java_20/build.gradle.kts b/d8_r8/test_modules/tests_java_20/build.gradle.kts
new file mode 100644
index 0000000..85cd393
--- /dev/null
+++ b/d8_r8/test_modules/tests_java_20/build.gradle.kts
@@ -0,0 +1,36 @@
+// Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import org.gradle.api.JavaVersion
+import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
+
+plugins {
+  `kotlin-dsl`
+  `java-library`
+  id("dependencies-plugin")
+}
+
+val root = getRoot()
+
+java {
+  sourceSets.test.configure {
+    java.srcDir(root.resolveAll("src", "test", "examplesJava20"))
+  }
+  sourceCompatibility = JavaVersion.VERSION_20
+  targetCompatibility = JavaVersion.VERSION_20
+}
+
+dependencies { }
+
+// We just need to register the examples jars for it to be referenced by other modules.
+val buildExampleJars = buildJavaExamplesJars("Java20")
+
+tasks {
+  withType<JavaCompile> {
+    options.setFork(true)
+    options.forkOptions.memoryMaximumSize = "3g"
+    options.forkOptions.executable = getCompilerPath(Jdk.JDK_20)
+  }
+}
+
diff --git a/d8_r8/test_modules/tests_java_20/gradle.properties b/d8_r8/test_modules/tests_java_20/gradle.properties
new file mode 100644
index 0000000..1de43f9
--- /dev/null
+++ b/d8_r8/test_modules/tests_java_20/gradle.properties
@@ -0,0 +1,17 @@
+# Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE file.
+
+org.gradle.jvmargs=-Xmx2048M -Dfile.encoding=UTF-8
+kotlin.daemon.jvmargs=-Xmx3g -Dkotlin.js.compiler.legacy.force_enabled=true
+systemProp.file.encoding=UTF-8
+
+# Enable new incremental compilation
+kotlin.incremental.useClasspathSnapshot=true
+
+org.gradle.parallel=true
+org.gradle.caching=true
+
+# Do not download any jdks or detect them. We provide them.
+org.gradle.java.installations.auto-detect=false
+org.gradle.java.installations.auto-download=false
diff --git a/d8_r8/test_modules/tests_java_20/settings.gradle.kts b/d8_r8/test_modules/tests_java_20/settings.gradle.kts
new file mode 100644
index 0000000..eaac41f
--- /dev/null
+++ b/d8_r8/test_modules/tests_java_20/settings.gradle.kts
@@ -0,0 +1,5 @@
+// Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+rootProject.name = "tests_java_20"
diff --git a/d8_r8/test_modules/tests_java_8/build.gradle.kts b/d8_r8/test_modules/tests_java_8/build.gradle.kts
index 55ee7a8..3493286 100644
--- a/d8_r8/test_modules/tests_java_8/build.gradle.kts
+++ b/d8_r8/test_modules/tests_java_8/build.gradle.kts
@@ -17,8 +17,8 @@
   sourceSets.test.configure {
     java.srcDir(root.resolveAll("src", "test", "java"))
   }
-  // We cannot use languageVersion.set(JavaLanguageVersion.of(8)) because gradle cannot figure
-  // out that the jdk is 1_8 and will try to download it.
+  // We are using a new JDK to compile to an older language version, which is not directly
+  // compatible with java toolchains.
   sourceCompatibility = JavaVersion.VERSION_1_8
   targetCompatibility = JavaVersion.VERSION_1_8
 }
@@ -29,6 +29,8 @@
   implementation(projectTask("keepanno", "jar").outputs.files)
   implementation(projectTask("main", "jar").outputs.files)
   implementation(Deps.asm)
+  implementation(Deps.asmCommons)
+  implementation(Deps.asmUtil)
   implementation(Deps.gson)
   implementation(Deps.guava)
   implementation(Deps.javassist)
@@ -36,16 +38,39 @@
   implementation(Deps.kotlinStdLib)
   implementation(Deps.kotlinReflect)
   implementation(Deps.kotlinMetadata)
-  implementation(files(root.resolveAll("third_party", "ddmlib", "ddmlib.jar")))
-  implementation(
-    files(
-      root.resolveAll("third_party", "jdwp-tests", "apache-harmony-jdwp-tests-host.jar")))
-  implementation(files(root.resolveAll("third_party", "jasmin", "jasmin-2.4.jar")))
+  implementation(resolve(ThirdPartyDeps.ddmLib))
+  implementation(resolve(ThirdPartyDeps.jasmin))
+  implementation(resolve(ThirdPartyDeps.jdwpTests))
   implementation(Deps.fastUtil)
   implementation(Deps.smali)
-  implementation(Deps.asmUtil)
 }
 
+val thirdPartyCompileDependenciesTask = ensureThirdPartyDependencies(
+  "compileDeps",
+  listOf(
+    ThirdPartyDeps.apiDatabase,
+    ThirdPartyDeps.ddmLib,
+    ThirdPartyDeps.jasmin,
+    ThirdPartyDeps.jdwpTests))
+
+val thirdPartyRuntimeDependenciesTask = ensureThirdPartyDependencies(
+  "runtimeDeps",
+  listOf(ThirdPartyDeps.java8Runtime)
+    + ThirdPartyDeps.androidJars
+    + ThirdPartyDeps.androidVMs
+    + ThirdPartyDeps.jdks)
+
+val sourceSetDependenciesTasks = arrayOf(
+  projectTask("tests_java_examples", getExamplesJarsTaskName("")),
+  projectTask("tests_java_examplesAndroidN", getExamplesJarsTaskName("AndroidN")),
+  projectTask("tests_java_examplesAndroidO", getExamplesJarsTaskName("AndroidO")),
+  projectTask("tests_java_examplesAndroidP", getExamplesJarsTaskName("AndroidP")),
+  projectTask("tests_java_9", getExamplesJarsTaskName("Java9")),
+  projectTask("tests_java_10", getExamplesJarsTaskName("Java10")),
+  projectTask("tests_java_11", getExamplesJarsTaskName("Java11")),
+  projectTask("tests_java_17", getExamplesJarsTaskName("Java17")),
+  projectTask("tests_java_20", getExamplesJarsTaskName("Java20")))
+
 fun testDependencies() : FileCollection {
   return sourceSets
     .test
@@ -62,6 +87,7 @@
   withType<JavaCompile> {
     dependsOn(gradle.includedBuild("keepanno").task(":jar"))
     dependsOn(gradle.includedBuild("main").task(":jar"))
+    dependsOn(thirdPartyCompileDependenciesTask)
     options.setFork(true)
     options.forkOptions.memoryMaximumSize = "3g"
     options.forkOptions.jvmArgs = listOf(
@@ -73,20 +99,45 @@
   withType<KotlinCompile> {
     dependsOn(gradle.includedBuild("keepanno").task(":jar"))
     dependsOn(gradle.includedBuild("main").task(":jar"))
+    dependsOn(thirdPartyCompileDependenciesTask)
     kotlinOptions {
-      // We cannot use languageVersion.set(JavaLanguageVersion.of(8)) because gradle cannot figure
-      // out that the jdk is 1_8 and will try to download it.
+      // We are using a new JDK to compile to an older language version, which is not directly
+      // compatible with java toolchains.
       jvmTarget = "1.8"
     }
   }
 
+  withType<Test> {
+    environment.put("USE_NEW_GRADLE_SETUP", "true")
+    dependsOn(thirdPartyRuntimeDependenciesTask)
+    dependsOn(*sourceSetDependenciesTasks)
+    println("NOTE: Number of processors " + Runtime.getRuntime().availableProcessors())
+    val userDefinedCoresPerFork = System.getenv("R8_GRADLE_CORES_PER_FORK")
+    val processors = Runtime.getRuntime().availableProcessors()
+    // See https://docs.gradle.org/current/dsl/org.gradle.api.tasks.testing.Test.html.
+    if (!userDefinedCoresPerFork.isNullOrEmpty()) {
+      maxParallelForks = processors / userDefinedCoresPerFork.toInt()
+    } else {
+      // On normal work machines this seems to give the best test execution time (without freezing)
+      maxParallelForks = processors / 3
+      // On low cpu count machines (bots) we under subscribe, so increase the count.
+      if (processors == 8) {
+        maxParallelForks = 3
+      }
+    }
+    println("NOTE: Max parallel forks " + maxParallelForks)
+  }
+
   val testJar by registering(Jar::class) {
     from(sourceSets.test.get().output)
   }
 
   val depsJar by registering(Jar::class) {
     dependsOn(gradle.includedBuild("keepanno").task(":jar"))
-    println(header("Test Java 8 dependencies"))
+    dependsOn(thirdPartyCompileDependenciesTask)
+    doFirst {
+      println(header("Test Java 8 dependencies"))
+    }
     testDependencies().forEach({ println(it) })
     from(testDependencies().map(::zipTree))
     duplicatesStrategy = DuplicatesStrategy.EXCLUDE
diff --git a/d8_r8/test_modules/tests_java_8/settings.gradle.kts b/d8_r8/test_modules/tests_java_8/settings.gradle.kts
index da320a7..73f5d73 100644
--- a/d8_r8/test_modules/tests_java_8/settings.gradle.kts
+++ b/d8_r8/test_modules/tests_java_8/settings.gradle.kts
@@ -10,3 +10,14 @@
 // We need to include src/main as a composite-build otherwise our test-modules
 // will compete with the test to compile the source files.
 includeBuild(root.resolve("main"))
+
+includeBuild(root.resolve("test_modules").resolve("tests_java_examples"))
+includeBuild(root.resolve("test_modules").resolve("tests_java_examplesAndroidN"))
+includeBuild(root.resolve("test_modules").resolve("tests_java_examplesAndroidO"))
+includeBuild(root.resolve("test_modules").resolve("tests_java_examplesAndroidP"))
+includeBuild(root.resolve("test_modules").resolve("tests_java_9"))
+includeBuild(root.resolve("test_modules").resolve("tests_java_10"))
+includeBuild(root.resolve("test_modules").resolve("tests_java_11"))
+includeBuild(root.resolve("test_modules").resolve("tests_java_17"))
+includeBuild(root.resolve("test_modules").resolve("tests_java_20"))
+
diff --git a/d8_r8/test_modules/tests_java_9/build.gradle.kts b/d8_r8/test_modules/tests_java_9/build.gradle.kts
new file mode 100644
index 0000000..ac5923f
--- /dev/null
+++ b/d8_r8/test_modules/tests_java_9/build.gradle.kts
@@ -0,0 +1,36 @@
+// Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import org.gradle.api.JavaVersion
+import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
+
+plugins {
+  `kotlin-dsl`
+  `java-library`
+  id("dependencies-plugin")
+}
+
+val root = getRoot()
+
+java {
+  sourceSets.test.configure {
+    java.srcDir(root.resolveAll("src", "test", "examplesJava9"))
+  }
+  sourceCompatibility = JavaVersion.VERSION_1_9
+  targetCompatibility = JavaVersion.VERSION_1_9
+}
+
+dependencies { }
+
+// We just need to register the examples jars for it to be referenced by other modules.
+val buildExampleJars = buildJavaExamplesJars("Java9")
+
+tasks {
+  withType<JavaCompile> {
+    options.setFork(true)
+    options.forkOptions.memoryMaximumSize = "3g"
+    options.forkOptions.executable = getCompilerPath(Jdk.JDK_9)
+  }
+}
+
diff --git a/d8_r8/test_modules/tests_java_9/gradle.properties b/d8_r8/test_modules/tests_java_9/gradle.properties
new file mode 100644
index 0000000..1de43f9
--- /dev/null
+++ b/d8_r8/test_modules/tests_java_9/gradle.properties
@@ -0,0 +1,17 @@
+# Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE file.
+
+org.gradle.jvmargs=-Xmx2048M -Dfile.encoding=UTF-8
+kotlin.daemon.jvmargs=-Xmx3g -Dkotlin.js.compiler.legacy.force_enabled=true
+systemProp.file.encoding=UTF-8
+
+# Enable new incremental compilation
+kotlin.incremental.useClasspathSnapshot=true
+
+org.gradle.parallel=true
+org.gradle.caching=true
+
+# Do not download any jdks or detect them. We provide them.
+org.gradle.java.installations.auto-detect=false
+org.gradle.java.installations.auto-download=false
diff --git a/d8_r8/test_modules/tests_java_9/settings.gradle.kts b/d8_r8/test_modules/tests_java_9/settings.gradle.kts
new file mode 100644
index 0000000..b8a5260
--- /dev/null
+++ b/d8_r8/test_modules/tests_java_9/settings.gradle.kts
@@ -0,0 +1,5 @@
+// Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+rootProject.name = "tests_java_9"
diff --git a/d8_r8/test_modules/tests_java_examples/build.gradle.kts b/d8_r8/test_modules/tests_java_examples/build.gradle.kts
new file mode 100644
index 0000000..05798be
--- /dev/null
+++ b/d8_r8/test_modules/tests_java_examples/build.gradle.kts
@@ -0,0 +1,41 @@
+// Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import org.gradle.api.JavaVersion
+import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
+
+plugins {
+  `kotlin-dsl`
+  `java-library`
+  id("dependencies-plugin")
+}
+
+val root = getRoot()
+
+java {
+  sourceSets.test.configure {
+    java.srcDirs.clear()
+    java.srcDir(root.resolveAll("src", "test", "examples"))
+  }
+  sourceCompatibility = JavaVersion.VERSION_1_8
+  targetCompatibility = JavaVersion.VERSION_1_8
+}
+
+dependencies {
+  testCompileOnly(Deps.mockito)
+}
+
+// We just need to register the examples jars for it to be referenced by other modules.
+val buildExampleJars = buildJavaExamplesJars("")
+
+tasks {
+  withType<JavaCompile> {
+    options.setFork(true)
+    options.forkOptions.memoryMaximumSize = "3g"
+    options.forkOptions.jvmArgs = listOf(
+      "-Xss256m",
+      // Set the bootclass path so compilation is consistent with 1.8 target compatibility.
+      "-Xbootclasspath/a:third_party/openjdk/openjdk-rt-1.8/rt.jar")
+  }
+}
diff --git a/d8_r8/test_modules/tests_java_examples/gradle.properties b/d8_r8/test_modules/tests_java_examples/gradle.properties
new file mode 100644
index 0000000..1de43f9
--- /dev/null
+++ b/d8_r8/test_modules/tests_java_examples/gradle.properties
@@ -0,0 +1,17 @@
+# Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE file.
+
+org.gradle.jvmargs=-Xmx2048M -Dfile.encoding=UTF-8
+kotlin.daemon.jvmargs=-Xmx3g -Dkotlin.js.compiler.legacy.force_enabled=true
+systemProp.file.encoding=UTF-8
+
+# Enable new incremental compilation
+kotlin.incremental.useClasspathSnapshot=true
+
+org.gradle.parallel=true
+org.gradle.caching=true
+
+# Do not download any jdks or detect them. We provide them.
+org.gradle.java.installations.auto-detect=false
+org.gradle.java.installations.auto-download=false
diff --git a/d8_r8/test_modules/tests_java_examples/settings.gradle.kts b/d8_r8/test_modules/tests_java_examples/settings.gradle.kts
new file mode 100644
index 0000000..89c7a6f
--- /dev/null
+++ b/d8_r8/test_modules/tests_java_examples/settings.gradle.kts
@@ -0,0 +1,5 @@
+// Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+rootProject.name = "tests_java_examples"
diff --git a/d8_r8/test_modules/tests_java_examplesAndroidN/build.gradle.kts b/d8_r8/test_modules/tests_java_examplesAndroidN/build.gradle.kts
new file mode 100644
index 0000000..8cfe7d2
--- /dev/null
+++ b/d8_r8/test_modules/tests_java_examplesAndroidN/build.gradle.kts
@@ -0,0 +1,41 @@
+// Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import org.gradle.api.JavaVersion
+import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
+
+plugins {
+  `kotlin-dsl`
+  `java-library`
+  id("dependencies-plugin")
+}
+
+val root = getRoot()
+
+java {
+  sourceSets.test.configure {
+    java.srcDirs.clear()
+    java.srcDir(root.resolveAll("src", "test", "examplesAndroidN"))
+  }
+  sourceCompatibility = JavaVersion.VERSION_1_8
+  targetCompatibility = JavaVersion.VERSION_1_8
+}
+
+dependencies {
+  testCompileOnly(Deps.asm)
+}
+
+// We just need to register the examples jars for it to be referenced by other modules.
+val buildExampleJars = buildJavaExamplesJars("AndroidN")
+
+tasks {
+  withType<JavaCompile> {
+    options.setFork(true)
+    options.forkOptions.memoryMaximumSize = "3g"
+    options.forkOptions.jvmArgs = listOf(
+      "-Xss256m",
+      // Set the bootclass path so compilation is consistent with 1.8 target compatibility.
+      "-Xbootclasspath/a:third_party/openjdk/openjdk-rt-1.8/rt.jar")
+  }
+}
diff --git a/d8_r8/test_modules/tests_java_examplesAndroidN/gradle.properties b/d8_r8/test_modules/tests_java_examplesAndroidN/gradle.properties
new file mode 100644
index 0000000..1de43f9
--- /dev/null
+++ b/d8_r8/test_modules/tests_java_examplesAndroidN/gradle.properties
@@ -0,0 +1,17 @@
+# Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE file.
+
+org.gradle.jvmargs=-Xmx2048M -Dfile.encoding=UTF-8
+kotlin.daemon.jvmargs=-Xmx3g -Dkotlin.js.compiler.legacy.force_enabled=true
+systemProp.file.encoding=UTF-8
+
+# Enable new incremental compilation
+kotlin.incremental.useClasspathSnapshot=true
+
+org.gradle.parallel=true
+org.gradle.caching=true
+
+# Do not download any jdks or detect them. We provide them.
+org.gradle.java.installations.auto-detect=false
+org.gradle.java.installations.auto-download=false
diff --git a/d8_r8/test_modules/tests_java_examplesAndroidN/settings.gradle.kts b/d8_r8/test_modules/tests_java_examplesAndroidN/settings.gradle.kts
new file mode 100644
index 0000000..d0f1704
--- /dev/null
+++ b/d8_r8/test_modules/tests_java_examplesAndroidN/settings.gradle.kts
@@ -0,0 +1,5 @@
+// Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+rootProject.name = "tests_java_examplesAndroidN"
diff --git a/d8_r8/test_modules/tests_java_examplesAndroidO/build.gradle.kts b/d8_r8/test_modules/tests_java_examplesAndroidO/build.gradle.kts
new file mode 100644
index 0000000..44ed59d
--- /dev/null
+++ b/d8_r8/test_modules/tests_java_examplesAndroidO/build.gradle.kts
@@ -0,0 +1,41 @@
+// Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import org.gradle.api.JavaVersion
+import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
+
+plugins {
+  `kotlin-dsl`
+  `java-library`
+  id("dependencies-plugin")
+}
+
+val root = getRoot()
+
+java {
+  sourceSets.test.configure {
+    java.srcDirs.clear()
+    java.srcDir(root.resolveAll("src", "test", "examplesAndroidO"))
+  }
+  sourceCompatibility = JavaVersion.VERSION_1_8
+  targetCompatibility = JavaVersion.VERSION_1_8
+}
+
+dependencies {
+  testCompileOnly(Deps.asm)
+}
+
+// We just need to register the examples jars for it to be referenced by other modules.
+val buildExampleJars = buildJavaExamplesJars("AndroidO")
+
+tasks {
+  withType<JavaCompile> {
+    options.setFork(true)
+    options.forkOptions.memoryMaximumSize = "3g"
+    options.forkOptions.jvmArgs = listOf(
+      "-Xss256m",
+      // Set the bootclass path so compilation is consistent with 1.8 target compatibility.
+      "-Xbootclasspath/a:third_party/openjdk/openjdk-rt-1.8/rt.jar")
+  }
+}
diff --git a/d8_r8/test_modules/tests_java_examplesAndroidO/gradle.properties b/d8_r8/test_modules/tests_java_examplesAndroidO/gradle.properties
new file mode 100644
index 0000000..1de43f9
--- /dev/null
+++ b/d8_r8/test_modules/tests_java_examplesAndroidO/gradle.properties
@@ -0,0 +1,17 @@
+# Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE file.
+
+org.gradle.jvmargs=-Xmx2048M -Dfile.encoding=UTF-8
+kotlin.daemon.jvmargs=-Xmx3g -Dkotlin.js.compiler.legacy.force_enabled=true
+systemProp.file.encoding=UTF-8
+
+# Enable new incremental compilation
+kotlin.incremental.useClasspathSnapshot=true
+
+org.gradle.parallel=true
+org.gradle.caching=true
+
+# Do not download any jdks or detect them. We provide them.
+org.gradle.java.installations.auto-detect=false
+org.gradle.java.installations.auto-download=false
diff --git a/d8_r8/test_modules/tests_java_examplesAndroidO/settings.gradle.kts b/d8_r8/test_modules/tests_java_examplesAndroidO/settings.gradle.kts
new file mode 100644
index 0000000..0faef5f
--- /dev/null
+++ b/d8_r8/test_modules/tests_java_examplesAndroidO/settings.gradle.kts
@@ -0,0 +1,5 @@
+// Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+rootProject.name = "tests_java_examplesAndroidO"
diff --git a/d8_r8/test_modules/tests_java_examplesAndroidP/build.gradle.kts b/d8_r8/test_modules/tests_java_examplesAndroidP/build.gradle.kts
new file mode 100644
index 0000000..7e58f3b
--- /dev/null
+++ b/d8_r8/test_modules/tests_java_examplesAndroidP/build.gradle.kts
@@ -0,0 +1,41 @@
+// Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import org.gradle.api.JavaVersion
+import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
+
+plugins {
+  `kotlin-dsl`
+  `java-library`
+  id("dependencies-plugin")
+}
+
+val root = getRoot()
+
+java {
+  sourceSets.test.configure {
+    java.srcDirs.clear()
+    java.srcDir(root.resolveAll("src", "test", "examplesAndroidP"))
+  }
+  sourceCompatibility = JavaVersion.VERSION_1_8
+  targetCompatibility = JavaVersion.VERSION_1_8
+}
+
+dependencies {
+  testCompileOnly(Deps.asm)
+}
+
+// We just need to register the examples jars for it to be referenced by other modules.
+val buildExampleJars = buildJavaExamplesJars("AndroidP")
+
+tasks {
+  withType<JavaCompile> {
+    options.setFork(true)
+    options.forkOptions.memoryMaximumSize = "3g"
+    options.forkOptions.jvmArgs = listOf(
+      "-Xss256m",
+      // Set the bootclass path so compilation is consistent with 1.8 target compatibility.
+      "-Xbootclasspath/a:third_party/openjdk/openjdk-rt-1.8/rt.jar")
+  }
+}
diff --git a/d8_r8/test_modules/tests_java_examplesAndroidP/gradle.properties b/d8_r8/test_modules/tests_java_examplesAndroidP/gradle.properties
new file mode 100644
index 0000000..1de43f9
--- /dev/null
+++ b/d8_r8/test_modules/tests_java_examplesAndroidP/gradle.properties
@@ -0,0 +1,17 @@
+# Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE file.
+
+org.gradle.jvmargs=-Xmx2048M -Dfile.encoding=UTF-8
+kotlin.daemon.jvmargs=-Xmx3g -Dkotlin.js.compiler.legacy.force_enabled=true
+systemProp.file.encoding=UTF-8
+
+# Enable new incremental compilation
+kotlin.incremental.useClasspathSnapshot=true
+
+org.gradle.parallel=true
+org.gradle.caching=true
+
+# Do not download any jdks or detect them. We provide them.
+org.gradle.java.installations.auto-detect=false
+org.gradle.java.installations.auto-download=false
diff --git a/d8_r8/test_modules/tests_java_examplesAndroidP/settings.gradle.kts b/d8_r8/test_modules/tests_java_examplesAndroidP/settings.gradle.kts
new file mode 100644
index 0000000..6add507
--- /dev/null
+++ b/d8_r8/test_modules/tests_java_examplesAndroidP/settings.gradle.kts
@@ -0,0 +1,5 @@
+// Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+rootProject.name = "tests_java_examplesAndroidP"
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/annotations/CheckOptimizedOut.java b/src/keepanno/java/com/android/tools/r8/keepanno/annotations/CheckOptimizedOut.java
new file mode 100644
index 0000000..5c11f44
--- /dev/null
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/annotations/CheckOptimizedOut.java
@@ -0,0 +1,29 @@
+// Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package com.android.tools.r8.keepanno.annotations;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Mark that an item must be optimized out of the residual program.
+ *
+ * <p>An item is optimized out if its declaration is no longer present in the residual program. This
+ * can happen due to many distinct optimizations. For example, it may be dead code and removed by
+ * the usual shrinking. The item's declaration may also be removed if it could be inlined at all
+ * usages, in which case the output may still contain a value if it was a field, or instructions if
+ * it was a method.
+ *
+ * <p>CAUTION: Because of the dependency on shrinker internal optimizations and details such as
+ * inlining vs merging, the use of this annotation is somewhat unreliable and should be used with
+ * caution. In most cases it is more appropriate to use {@link CheckRemoved}.
+ */
+@Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD, ElementType.CONSTRUCTOR})
+@Retention(RetentionPolicy.CLASS)
+public @interface CheckOptimizedOut {
+
+  String description() default "";
+}
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/annotations/CheckRemoved.java b/src/keepanno/java/com/android/tools/r8/keepanno/annotations/CheckRemoved.java
new file mode 100644
index 0000000..546c08b
--- /dev/null
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/annotations/CheckRemoved.java
@@ -0,0 +1,25 @@
+// Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package com.android.tools.r8.keepanno.annotations;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Mark that an item must be fully removed from the residual program.
+ *
+ * <p>Being removed from the program means that the item declaration is not present at all in the
+ * residual program. For example, inlined functions are not considered removed. If content of the
+ * item is allowed to be in the residual, use {@link CheckOptimizedOut}.
+ *
+ * <p>A class is removed if all of its members are removed and no references to the class remain.
+ */
+@Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD, ElementType.CONSTRUCTOR})
+@Retention(RetentionPolicy.CLASS)
+public @interface CheckRemoved {
+
+  String description() default "";
+}
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/asm/KeepEdgeReader.java b/src/keepanno/java/com/android/tools/r8/keepanno/asm/KeepEdgeReader.java
index 7c24ff0..c988dc3 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/asm/KeepEdgeReader.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/asm/KeepEdgeReader.java
@@ -19,9 +19,12 @@
 import com.android.tools.r8.keepanno.ast.AnnotationConstants.UsedByReflection;
 import com.android.tools.r8.keepanno.ast.AnnotationConstants.UsesReflection;
 import com.android.tools.r8.keepanno.ast.KeepBindings;
+import com.android.tools.r8.keepanno.ast.KeepCheck;
+import com.android.tools.r8.keepanno.ast.KeepCheck.KeepCheckKind;
 import com.android.tools.r8.keepanno.ast.KeepClassReference;
 import com.android.tools.r8.keepanno.ast.KeepCondition;
 import com.android.tools.r8.keepanno.ast.KeepConsequences;
+import com.android.tools.r8.keepanno.ast.KeepDeclaration;
 import com.android.tools.r8.keepanno.ast.KeepEdge;
 import com.android.tools.r8.keepanno.ast.KeepEdgeException;
 import com.android.tools.r8.keepanno.ast.KeepEdgeMetaInfo;
@@ -67,18 +70,18 @@
 
   public static int ASM_VERSION = ASM9;
 
-  public static Set<KeepEdge> readKeepEdges(byte[] classFileBytes) {
+  public static Set<KeepDeclaration> readKeepEdges(byte[] classFileBytes) {
     ClassReader reader = new ClassReader(classFileBytes);
-    Set<KeepEdge> edges = new HashSet<>();
-    reader.accept(new KeepEdgeClassVisitor(edges::add), ClassReader.SKIP_CODE);
-    return edges;
+    Set<KeepDeclaration> declarations = new HashSet<>();
+    reader.accept(new KeepEdgeClassVisitor(declarations::add), ClassReader.SKIP_CODE);
+    return declarations;
   }
 
   private static class KeepEdgeClassVisitor extends ClassVisitor {
-    private final Parent<KeepEdge> parent;
+    private final Parent<KeepDeclaration> parent;
     private String className;
 
-    KeepEdgeClassVisitor(Parent<KeepEdge> parent) {
+    KeepEdgeClassVisitor(Parent<KeepDeclaration> parent) {
       super(ASM_VERSION);
       this.parent = parent;
     }
@@ -106,21 +109,30 @@
         return null;
       }
       if (descriptor.equals(Edge.DESCRIPTOR)) {
-        return new KeepEdgeVisitor(parent, this::setContext);
+        return new KeepEdgeVisitor(parent::accept, this::setContext);
       }
       if (descriptor.equals(AnnotationConstants.UsesReflection.DESCRIPTOR)) {
         KeepItemPattern classItem =
             KeepItemPattern.builder()
                 .setClassPattern(KeepQualifiedClassNamePattern.exact(className))
                 .build();
-        return new UsesReflectionVisitor(parent, this::setContext, classItem);
+        return new UsesReflectionVisitor(parent::accept, this::setContext, classItem);
       }
       if (descriptor.equals(AnnotationConstants.ForApi.DESCRIPTOR)) {
-        return new ForApiClassVisitor(parent, this::setContext, className);
+        return new ForApiClassVisitor(parent::accept, this::setContext, className);
       }
       if (descriptor.equals(AnnotationConstants.UsedByReflection.DESCRIPTOR)
           || descriptor.equals(AnnotationConstants.UsedByNative.DESCRIPTOR)) {
-        return new UsedByReflectionClassVisitor(descriptor, parent, this::setContext, className);
+        return new UsedByReflectionClassVisitor(
+            descriptor, parent::accept, this::setContext, className);
+      }
+      if (descriptor.equals(AnnotationConstants.CheckRemoved.DESCRIPTOR)) {
+        return new CheckRemovedClassVisitor(
+            descriptor, parent::accept, this::setContext, className, KeepCheckKind.REMOVED);
+      }
+      if (descriptor.equals(AnnotationConstants.CheckOptimizedOut.DESCRIPTOR)) {
+        return new CheckRemovedClassVisitor(
+            descriptor, parent::accept, this::setContext, className, KeepCheckKind.OPTIMIZED_OUT);
       }
       return null;
     }
@@ -132,24 +144,27 @@
     @Override
     public MethodVisitor visitMethod(
         int access, String name, String descriptor, String signature, String[] exceptions) {
-      return new KeepEdgeMethodVisitor(parent, className, name, descriptor);
+      return new KeepEdgeMethodVisitor(parent::accept, className, name, descriptor);
     }
 
     @Override
     public FieldVisitor visitField(
         int access, String name, String descriptor, String signature, Object value) {
-      return new KeepEdgeFieldVisitor(parent, className, name, descriptor);
+      return new KeepEdgeFieldVisitor(parent::accept, className, name, descriptor);
     }
   }
 
   private static class KeepEdgeMethodVisitor extends MethodVisitor {
-    private final Parent<KeepEdge> parent;
+    private final Parent<KeepDeclaration> parent;
     private final String className;
     private final String methodName;
     private final String methodDescriptor;
 
     KeepEdgeMethodVisitor(
-        Parent<KeepEdge> parent, String className, String methodName, String methodDescriptor) {
+        Parent<KeepDeclaration> parent,
+        String className,
+        String methodName,
+        String methodDescriptor) {
       super(ASM_VERSION);
       this.parent = parent;
       this.className = className;
@@ -187,18 +202,34 @@
         return null;
       }
       if (descriptor.equals(Edge.DESCRIPTOR)) {
-        return new KeepEdgeVisitor(parent, this::setContext);
+        return new KeepEdgeVisitor(parent::accept, this::setContext);
       }
       if (descriptor.equals(AnnotationConstants.UsesReflection.DESCRIPTOR)) {
-        return new UsesReflectionVisitor(parent, this::setContext, createItemContext());
+        return new UsesReflectionVisitor(parent::accept, this::setContext, createItemContext());
       }
       if (descriptor.equals(AnnotationConstants.ForApi.DESCRIPTOR)) {
-        return new ForApiMemberVisitor(parent, this::setContext, createItemContext());
+        return new ForApiMemberVisitor(parent::accept, this::setContext, createItemContext());
       }
       if (descriptor.equals(AnnotationConstants.UsedByReflection.DESCRIPTOR)
           || descriptor.equals(AnnotationConstants.UsedByNative.DESCRIPTOR)) {
         return new UsedByReflectionMemberVisitor(
-            descriptor, parent, this::setContext, createItemContext());
+            descriptor, parent::accept, this::setContext, createItemContext());
+      }
+      if (descriptor.equals(AnnotationConstants.CheckRemoved.DESCRIPTOR)) {
+        return new CheckRemovedMemberVisitor(
+            descriptor,
+            parent::accept,
+            this::setContext,
+            createItemContext(),
+            KeepCheckKind.REMOVED);
+      }
+      if (descriptor.equals(AnnotationConstants.CheckOptimizedOut.DESCRIPTOR)) {
+        return new CheckRemovedMemberVisitor(
+            descriptor,
+            parent::accept,
+            this::setContext,
+            createItemContext(),
+            KeepCheckKind.OPTIMIZED_OUT);
       }
       return null;
     }
@@ -830,6 +861,113 @@
     }
   }
 
+  /** Parsing of @CheckRemoved and @CheckOptimizedOut on a class context. */
+  private static class CheckRemovedClassVisitor extends AnnotationVisitorBase {
+
+    private final String annotationDescriptor;
+    private final Parent<KeepCheck> parent;
+    private final KeepEdgeMetaInfo.Builder metaInfoBuilder = KeepEdgeMetaInfo.builder();
+    private final String className;
+    private final KeepCheckKind kind;
+
+    public CheckRemovedClassVisitor(
+        String annotationDescriptor,
+        Parent<KeepCheck> parent,
+        Consumer<KeepEdgeMetaInfo.Builder> addContext,
+        String className,
+        KeepCheckKind kind) {
+      this.annotationDescriptor = annotationDescriptor;
+      this.parent = parent;
+      this.className = className;
+      this.kind = kind;
+      addContext.accept(metaInfoBuilder);
+    }
+
+    @Override
+    public String getAnnotationName() {
+      int sep = annotationDescriptor.lastIndexOf('/');
+      return annotationDescriptor.substring(sep + 1, annotationDescriptor.length() - 1);
+    }
+
+    @Override
+    public void visit(String name, Object value) {
+      if (name.equals(Edge.description) && value instanceof String) {
+        metaInfoBuilder.setDescription((String) value);
+        return;
+      }
+      super.visit(name, value);
+    }
+
+    @Override
+    public void visitEnd() {
+      CheckRemovedClassVisitor superVisitor = this;
+      KeepItemVisitorBase itemVisitor =
+          new KeepItemVisitorBase() {
+            @Override
+            public String getAnnotationName() {
+              return superVisitor.getAnnotationName();
+            }
+          };
+      itemVisitor.visit(Item.className, className);
+      itemVisitor.visitEnd();
+      parent.accept(
+          KeepCheck.builder()
+              .setMetaInfo(metaInfoBuilder.build())
+              .setKind(kind)
+              .setItemPattern(itemVisitor.getItemReference().asItemPattern())
+              .build());
+    }
+  }
+
+  /** Parsing of @CheckRemoved and @CheckOptimizedOut on a class context. */
+  private static class CheckRemovedMemberVisitor extends AnnotationVisitorBase {
+
+    private final String annotationDescriptor;
+    private final Parent<KeepDeclaration> parent;
+    private final KeepItemPattern context;
+    private final KeepEdgeMetaInfo.Builder metaInfoBuilder = KeepEdgeMetaInfo.builder();
+    private final KeepCheckKind kind;
+
+    CheckRemovedMemberVisitor(
+        String annotationDescriptor,
+        Parent<KeepDeclaration> parent,
+        Consumer<KeepEdgeMetaInfo.Builder> addContext,
+        KeepItemPattern context,
+        KeepCheckKind kind) {
+      this.annotationDescriptor = annotationDescriptor;
+      this.parent = parent;
+      this.context = context;
+      this.kind = kind;
+      addContext.accept(metaInfoBuilder);
+    }
+
+    @Override
+    public String getAnnotationName() {
+      int sep = annotationDescriptor.lastIndexOf('/');
+      return annotationDescriptor.substring(sep + 1, annotationDescriptor.length() - 1);
+    }
+
+    @Override
+    public void visit(String name, Object value) {
+      if (name.equals(Edge.description) && value instanceof String) {
+        metaInfoBuilder.setDescription((String) value);
+        return;
+      }
+      super.visit(name, value);
+    }
+
+    @Override
+    public void visitEnd() {
+      super.visitEnd();
+      parent.accept(
+          KeepCheck.builder()
+              .setMetaInfo(metaInfoBuilder.build())
+              .setKind(kind)
+              .setItemPattern(context)
+              .build());
+    }
+  }
+
   abstract static class Declaration<T> {
     abstract String kind();
 
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/ast/AnnotationConstants.java b/src/keepanno/java/com/android/tools/r8/keepanno/ast/AnnotationConstants.java
index 876d04d..a8c7383 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/ast/AnnotationConstants.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/ast/AnnotationConstants.java
@@ -87,6 +87,20 @@
     // Content is the same as UsedByReflection.
   }
 
+  public static final class CheckRemoved {
+    public static final Class<com.android.tools.r8.keepanno.annotations.CheckRemoved> CLASS =
+        com.android.tools.r8.keepanno.annotations.CheckRemoved.class;
+    public static final String DESCRIPTOR = getDescriptor(CLASS);
+    public static final String description = "description";
+  }
+
+  public static final class CheckOptimizedOut {
+    public static final Class<com.android.tools.r8.keepanno.annotations.CheckOptimizedOut> CLASS =
+        com.android.tools.r8.keepanno.annotations.CheckOptimizedOut.class;
+    public static final String DESCRIPTOR = getDescriptor(CLASS);
+    public static final String description = "description";
+  }
+
   // Implicit hidden item which is "super type" of Condition and Target.
   public static final class Item {
     public static final String classFromBinding = "classFromBinding";
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepCheck.java b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepCheck.java
new file mode 100644
index 0000000..2ea942e
--- /dev/null
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepCheck.java
@@ -0,0 +1,72 @@
+// Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package com.android.tools.r8.keepanno.ast;
+
+public class KeepCheck extends KeepDeclaration {
+
+  public enum KeepCheckKind {
+    REMOVED,
+    OPTIMIZED_OUT
+  }
+
+  public static class Builder {
+
+    private KeepEdgeMetaInfo metaInfo = KeepEdgeMetaInfo.none();
+    private KeepCheckKind kind = KeepCheckKind.REMOVED;
+    private KeepItemPattern itemPattern;
+
+    public Builder setMetaInfo(KeepEdgeMetaInfo metaInfo) {
+      this.metaInfo = metaInfo;
+      return this;
+    }
+
+    public Builder setKind(KeepCheckKind kind) {
+      this.kind = kind;
+      return this;
+    }
+
+    public Builder setItemPattern(KeepItemPattern itemPattern) {
+      this.itemPattern = itemPattern;
+      return this;
+    }
+
+    public KeepCheck build() {
+      if (itemPattern == null) {
+        throw new KeepEdgeException("KeepCheck must have an item pattern.");
+      }
+      return new KeepCheck(metaInfo, kind, itemPattern);
+    }
+  }
+
+  public static Builder builder() {
+    return new Builder();
+  }
+
+  private final KeepEdgeMetaInfo metaInfo;
+  private final KeepCheckKind kind;
+  private final KeepItemPattern itemPattern;
+
+  private KeepCheck(KeepEdgeMetaInfo metaInfo, KeepCheckKind kind, KeepItemPattern itemPattern) {
+    this.metaInfo = metaInfo;
+    this.kind = kind;
+    this.itemPattern = itemPattern;
+  }
+
+  @Override
+  public KeepCheck asKeepCheck() {
+    return this;
+  }
+
+  public KeepEdgeMetaInfo getMetaInfo() {
+    return metaInfo;
+  }
+
+  public KeepCheckKind getKind() {
+    return kind;
+  }
+
+  public KeepItemPattern getItemPattern() {
+    return itemPattern;
+  }
+}
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepDeclaration.java b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepDeclaration.java
new file mode 100644
index 0000000..62cb663
--- /dev/null
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepDeclaration.java
@@ -0,0 +1,24 @@
+// Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package com.android.tools.r8.keepanno.ast;
+
+/** Base class for the declarations represented in the keep annoations library. */
+public abstract class KeepDeclaration {
+
+  public final boolean isKeepEdge() {
+    return asKeepEdge() != null;
+  }
+
+  public KeepEdge asKeepEdge() {
+    return null;
+  }
+
+  public final boolean isKeepCheck() {
+    return asKeepCheck() != null;
+  }
+
+  public KeepCheck asKeepCheck() {
+    return null;
+  }
+}
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepEdge.java b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepEdge.java
index dd63480..656f40e 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepEdge.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepEdge.java
@@ -85,7 +85,7 @@
  *     ::= public | protected | package-private | private | static | final | synthetic
  * </pre>
  */
-public final class KeepEdge {
+public final class KeepEdge extends KeepDeclaration {
 
   public static class Builder {
     private KeepEdgeMetaInfo metaInfo = KeepEdgeMetaInfo.none();
@@ -147,6 +147,11 @@
     this.consequences = consequences;
   }
 
+  @Override
+  public KeepEdge asKeepEdge() {
+    return this;
+  }
+
   public KeepEdgeMetaInfo getMetaInfo() {
     return metaInfo;
   }
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/keeprules/KeepEdgeNormalizer.java b/src/keepanno/java/com/android/tools/r8/keepanno/keeprules/KeepEdgeNormalizer.java
index 1664218..87ed1ce 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/keeprules/KeepEdgeNormalizer.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/keeprules/KeepEdgeNormalizer.java
@@ -148,7 +148,7 @@
     return bindingReference;
   }
 
-  private KeepItemPattern getClassItemPattern(KeepItemPattern fromPattern) {
+  public static KeepItemPattern getClassItemPattern(KeepItemPattern fromPattern) {
     return KeepItemPattern.builder()
         .setClassReference(fromPattern.getClassReference())
         .setExtendsPattern(fromPattern.getExtendsPattern())
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/keeprules/KeepRuleExtractor.java b/src/keepanno/java/com/android/tools/r8/keepanno/keeprules/KeepRuleExtractor.java
index 7d70e08..efb5a7f 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/keeprules/KeepRuleExtractor.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/keeprules/KeepRuleExtractor.java
@@ -4,7 +4,10 @@
 package com.android.tools.r8.keepanno.keeprules;
 
 import com.android.tools.r8.keepanno.ast.KeepBindings;
+import com.android.tools.r8.keepanno.ast.KeepCheck;
+import com.android.tools.r8.keepanno.ast.KeepCheck.KeepCheckKind;
 import com.android.tools.r8.keepanno.ast.KeepCondition;
+import com.android.tools.r8.keepanno.ast.KeepDeclaration;
 import com.android.tools.r8.keepanno.ast.KeepEdge;
 import com.android.tools.r8.keepanno.ast.KeepEdgeException;
 import com.android.tools.r8.keepanno.ast.KeepEdgeMetaInfo;
@@ -16,6 +19,7 @@
 import com.android.tools.r8.keepanno.ast.KeepMethodAccessPattern;
 import com.android.tools.r8.keepanno.ast.KeepMethodPattern;
 import com.android.tools.r8.keepanno.ast.KeepOptions;
+import com.android.tools.r8.keepanno.ast.KeepOptions.KeepOption;
 import com.android.tools.r8.keepanno.ast.KeepQualifiedClassNamePattern;
 import com.android.tools.r8.keepanno.ast.KeepTarget;
 import com.android.tools.r8.keepanno.keeprules.PgRule.PgConditionalRule;
@@ -43,8 +47,8 @@
     this.ruleConsumer = ruleConsumer;
   }
 
-  public void extract(KeepEdge edge) {
-    Collection<PgRule> rules = split(edge);
+  public void extract(KeepDeclaration declaration) {
+    Collection<PgRule> rules = split(declaration);
     StringBuilder builder = new StringBuilder();
     for (PgRule rule : rules) {
       rule.printRule(builder);
@@ -53,8 +57,74 @@
     ruleConsumer.accept(builder.toString());
   }
 
-  private static Collection<PgRule> split(KeepEdge edge) {
-    return doSplit(KeepEdgeNormalizer.normalize(edge));
+  private static Collection<PgRule> split(KeepDeclaration declaration) {
+    if (declaration.isKeepCheck()) {
+      return generateCheckRules(declaration.asKeepCheck());
+    }
+    return doSplit(KeepEdgeNormalizer.normalize(declaration.asKeepEdge()));
+  }
+
+  private static Collection<PgRule> generateCheckRules(KeepCheck check) {
+    KeepItemPattern itemPattern = check.getItemPattern();
+    boolean isRemovedPattern = check.getKind() == KeepCheckKind.REMOVED;
+    List<PgRule> rules = new ArrayList<>(isRemovedPattern ? 2 : 1);
+    Holder holder;
+    Map<String, KeepMemberPattern> memberPatterns;
+    List<String> targetMembers;
+    if (itemPattern.isClassItemPattern()) {
+      KeepBindings bindings =
+          KeepBindings.builder().addBinding("CLASS", check.getItemPattern()).build();
+      holder = Holder.create("CLASS", bindings);
+      memberPatterns = Collections.emptyMap();
+      targetMembers = Collections.emptyList();
+    } else {
+      KeepBindings bindings =
+          KeepBindings.builder()
+              .addBinding("CLASS", KeepEdgeNormalizer.getClassItemPattern(check.getItemPattern()))
+              .build();
+      holder = Holder.create("CLASS", bindings);
+      KeepMemberPattern memberPattern = itemPattern.getMemberPattern();
+      memberPatterns = Collections.singletonMap("MEMBER", memberPattern);
+      targetMembers = Collections.singletonList("MEMBER");
+    }
+    // Add a -checkdiscard rule for the class or members.
+    rules.add(
+        new PgUnconditionalRule(
+            check.getMetaInfo(),
+            holder,
+            KeepOptions.keepAll(),
+            memberPatterns,
+            targetMembers,
+            TargetKeepKind.CHECK_DISCARD));
+    // If the check declaration is to ensure full removal we generate a soft-pin rule to disallow
+    // moving/inlining the items.
+    if (isRemovedPattern) {
+      KeepOptions allowShrinking = KeepOptions.allow(KeepOption.SHRINKING);
+      if (itemPattern.isClassItemPattern()) {
+        // A check removal on a class means that the entire class is removed, thus soft-pin the
+        // class and *all* of its members.
+        rules.add(
+            new PgUnconditionalRule(
+                check.getMetaInfo(),
+                holder,
+                allowShrinking,
+                Collections.singletonMap("MEMBERS", KeepMemberPattern.allMembers()),
+                Collections.singletonList("MEMBERS"),
+                TargetKeepKind.CLASS_OR_MEMBERS));
+      } else {
+        // A check removal on members just soft-pins the members.
+        rules.add(
+            new PgDependentMembersRule(
+                check.getMetaInfo(),
+                holder,
+                allowShrinking,
+                memberPatterns,
+                Collections.emptyList(),
+                targetMembers,
+                TargetKeepKind.JUST_MEMBERS));
+      }
+    }
+    return rules;
   }
 
   /**
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/keeprules/PgRule.java b/src/keepanno/java/com/android/tools/r8/keepanno/keeprules/PgRule.java
index 412a91e..e0ad65e 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/keeprules/PgRule.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/keeprules/PgRule.java
@@ -24,7 +24,8 @@
   public enum TargetKeepKind {
     JUST_MEMBERS(RulePrintingUtils.KEEP_CLASS_MEMBERS),
     CLASS_OR_MEMBERS(RulePrintingUtils.KEEP),
-    CLASS_AND_MEMBERS(RulePrintingUtils.KEEP_CLASSES_WITH_MEMBERS);
+    CLASS_AND_MEMBERS(RulePrintingUtils.KEEP_CLASSES_WITH_MEMBERS),
+    CHECK_DISCARD(RulePrintingUtils.CHECK_DISCARD);
 
     private final String ruleKind;
 
@@ -35,12 +36,19 @@
     String getKeepRuleKind() {
       return ruleKind;
     }
+
+    boolean isKeepKind() {
+      return this != CHECK_DISCARD;
+    }
   }
 
-  private static void printNonEmptyMembersPatternAsDefaultInitWorkaround(StringBuilder builder) {
-    // If no members is given, compat R8 and legacy full mode will implicitly keep <init>().
-    // Add a keep of finalize which is a library method that would be kept in any case.
-    builder.append(" { void finalize(); }");
+  private static void printNonEmptyMembersPatternAsDefaultInitWorkaround(
+      StringBuilder builder, TargetKeepKind kind) {
+    if (kind.isKeepKind()) {
+      // If no members is given, compat R8 and legacy full mode will implicitly keep <init>().
+      // Add a keep of finalize which is a library method that would be kept in any case.
+      builder.append(" { void finalize(); }");
+    }
   }
 
   private final KeepEdgeMetaInfo metaInfo;
@@ -178,7 +186,7 @@
     void printTargetHolder(StringBuilder builder) {
       printClassHeader(builder, holderPattern, classReferencePrinter(holderNamePattern));
       if (getTargetMembers().isEmpty()) {
-        printNonEmptyMembersPatternAsDefaultInitWorkaround(builder);
+        printNonEmptyMembersPatternAsDefaultInitWorkaround(builder, targetKeepKind);
       }
     }
 
@@ -251,7 +259,7 @@
     void printTargetHolder(StringBuilder builder) {
       printClassHeader(builder, classTarget, this::printClassName);
       if (getTargetMembers().isEmpty()) {
-        PgRule.printNonEmptyMembersPatternAsDefaultInitWorkaround(builder);
+        PgRule.printNonEmptyMembersPatternAsDefaultInitWorkaround(builder, keepKind);
       }
     }
 
@@ -388,7 +396,7 @@
             }
           });
       if (getTargetMembers().isEmpty()) {
-        PgRule.printNonEmptyMembersPatternAsDefaultInitWorkaround(builder);
+        PgRule.printNonEmptyMembersPatternAsDefaultInitWorkaround(builder, keepKind);
       }
     }
 
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/keeprules/RulePrintingUtils.java b/src/keepanno/java/com/android/tools/r8/keepanno/keeprules/RulePrintingUtils.java
index bf8136e..604fe5b 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/keeprules/RulePrintingUtils.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/keeprules/RulePrintingUtils.java
@@ -37,6 +37,7 @@
   public static final String KEEP = "-keep";
   public static final String KEEP_CLASS_MEMBERS = "-keepclassmembers";
   public static final String KEEP_CLASSES_WITH_MEMBERS = "-keepclasseswithmembers";
+  public static final String CHECK_DISCARD = "-checkdiscard";
 
   public static void printHeader(StringBuilder builder, KeepEdgeMetaInfo metaInfo) {
     if (metaInfo.hasContext()) {
diff --git a/src/main/java/com/android/tools/r8/R8.java b/src/main/java/com/android/tools/r8/R8.java
index 82bd51b..86b5b5f 100644
--- a/src/main/java/com/android/tools/r8/R8.java
+++ b/src/main/java/com/android/tools/r8/R8.java
@@ -38,6 +38,8 @@
 import com.android.tools.r8.horizontalclassmerging.HorizontalClassMerger;
 import com.android.tools.r8.inspector.internal.InspectorImpl;
 import com.android.tools.r8.ir.conversion.IRConverter;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions.MutableMethodConversionOptions;
 import com.android.tools.r8.ir.conversion.PrimaryR8IRConverter;
 import com.android.tools.r8.ir.desugar.BackportedMethodRewriter;
 import com.android.tools.r8.ir.desugar.CfClassSynthesizerDesugaringCollection;
@@ -461,6 +463,10 @@
 
       AccessModifier.run(appViewWithLiveness, executorService, timing);
 
+      new RedundantBridgeRemover(appViewWithLiveness)
+          .setMustRetargetInvokesToTargetMethod()
+          .run(executorService, timing);
+
       boolean isKotlinLibraryCompilationWithInlinePassThrough =
           options.enableCfByteCodePassThrough && appView.hasCfByteCodePassThroughMethods();
 
@@ -563,10 +569,12 @@
               enqueuer.traceApplication(appView.rootSet(), executorService, timing);
           appView.setAppInfo(enqueuerResult.getAppInfo());
           // Rerunning the enqueuer should not give rise to any method rewritings.
+          MutableMethodConversionOptions conversionOptions =
+              MethodConversionOptions.forPostLirPhase(appView);
           appView.withGeneratedMessageLiteBuilderShrinker(
               shrinker ->
                   shrinker.rewriteDeadBuilderReferencesFromDynamicMethods(
-                      appViewWithLiveness, executorService, timing));
+                      conversionOptions, appViewWithLiveness, executorService, timing));
 
           if (options.isShrinking()) {
             // Mark dead proto extensions fields as neither being read nor written. This step must
@@ -679,7 +687,7 @@
       // This can only be done if we have AppInfoWithLiveness.
       if (appView.appInfo().hasLiveness()) {
         new RedundantBridgeRemover(appView.withLiveness())
-            .run(memberRebindingIdentityLens, executorService, timing);
+            .run(executorService, timing, memberRebindingIdentityLens);
       } else {
         // If we don't have AppInfoWithLiveness here, it must be because we are not shrinking. When
         // we are not shrinking, we can't move visibility bridges. In principle, though, it would be
@@ -1038,10 +1046,12 @@
           shrinker ->
               shrinker.setDeadProtoTypes(appViewWithLiveness.appInfo().getDeadProtoTypes()));
     }
+    MutableMethodConversionOptions conversionOptions =
+        MethodConversionOptions.forPreLirPhase(appView);
     appView.withGeneratedMessageLiteBuilderShrinker(
         shrinker ->
             shrinker.rewriteDeadBuilderReferencesFromDynamicMethods(
-                appViewWithLiveness, executorService, timing));
+                conversionOptions, appViewWithLiveness, executorService, timing));
     timing.end();
     return appViewWithLiveness;
   }
diff --git a/src/main/java/com/android/tools/r8/R8Command.java b/src/main/java/com/android/tools/r8/R8Command.java
index 4e89913..4b8b6e3 100644
--- a/src/main/java/com/android/tools/r8/R8Command.java
+++ b/src/main/java/com/android/tools/r8/R8Command.java
@@ -17,7 +17,7 @@
 import com.android.tools.r8.inspector.internal.InspectorImpl;
 import com.android.tools.r8.ir.desugar.desugaredlibrary.DesugaredLibrarySpecification;
 import com.android.tools.r8.keepanno.asm.KeepEdgeReader;
-import com.android.tools.r8.keepanno.ast.KeepEdge;
+import com.android.tools.r8.keepanno.ast.KeepDeclaration;
 import com.android.tools.r8.keepanno.keeprules.KeepRuleExtractor;
 import com.android.tools.r8.naming.MapConsumer;
 import com.android.tools.r8.naming.ProguardMapStringConsumer;
@@ -765,7 +765,7 @@
         for (ProgramResourceProvider provider : getAppBuilder().getProgramResourceProviders()) {
           for (ProgramResource resource : provider.getProgramResources()) {
             if (resource.getKind() == Kind.CF) {
-              Set<KeepEdge> edges = KeepEdgeReader.readKeepEdges(resource.getBytes());
+              Set<KeepDeclaration> declarations = KeepEdgeReader.readKeepEdges(resource.getBytes());
               KeepRuleExtractor extractor =
                   new KeepRuleExtractor(
                       rule -> {
@@ -774,7 +774,7 @@
                                 Collections.singletonList(rule), null, resource.getOrigin());
                         parser.parse(source);
                       });
-              edges.forEach(extractor::extract);
+              declarations.forEach(extractor::extract);
             }
           }
         }
diff --git a/src/main/java/com/android/tools/r8/dex/ApplicationWriter.java b/src/main/java/com/android/tools/r8/dex/ApplicationWriter.java
index 3d5f387..930cdda 100644
--- a/src/main/java/com/android/tools/r8/dex/ApplicationWriter.java
+++ b/src/main/java/com/android/tools/r8/dex/ApplicationWriter.java
@@ -932,11 +932,6 @@
       if (!mapping.hasJumboStrings()) {
         return;
       }
-      // If the globally highest sorting string is not a jumbo string this is also a no-op.
-      if (application.highestSortingString != null
-          && application.highestSortingString.compareTo(mapping.getFirstJumboString()) < 0) {
-        return;
-      }
     }
     for (DexProgramClass clazz : classes) {
       clazz.forEachProgramMethodMatching(
diff --git a/src/main/java/com/android/tools/r8/dex/JumboStringRewriter.java b/src/main/java/com/android/tools/r8/dex/JumboStringRewriter.java
index 13f6812..dede86b 100644
--- a/src/main/java/com/android/tools/r8/dex/JumboStringRewriter.java
+++ b/src/main/java/com/android/tools/r8/dex/JumboStringRewriter.java
@@ -146,7 +146,7 @@
             newDebugInfo);
     // As we have rewritten the code, we now know that its highest string index that is not
     // a jumbo-string is firstJumboString (actually the previous string, but we do not have that).
-    newCode.highestSortingString = firstJumboString;
+    newCode.setHighestSortingStringForJumboProcessedCode(firstJumboString);
     return newCode;
   }
 
diff --git a/src/main/java/com/android/tools/r8/errors/CheckDiscardDiagnostic.java b/src/main/java/com/android/tools/r8/errors/CheckDiscardDiagnostic.java
index 5a9ebb3..9e64b69 100644
--- a/src/main/java/com/android/tools/r8/errors/CheckDiscardDiagnostic.java
+++ b/src/main/java/com/android/tools/r8/errors/CheckDiscardDiagnostic.java
@@ -49,6 +49,10 @@
     this.messages = messages;
   }
 
+  public int getNumberOfFailures() {
+    return messages.size();
+  }
+
   /** The origin of a -checkdiscarded failure is not unique. (The whole app is to blame.) */
   @Override
   public Origin getOrigin() {
diff --git a/src/main/java/com/android/tools/r8/graph/AccessFlags.java b/src/main/java/com/android/tools/r8/graph/AccessFlags.java
index 54fecaa..fe6e49c 100644
--- a/src/main/java/com/android/tools/r8/graph/AccessFlags.java
+++ b/src/main/java/com/android/tools/r8/graph/AccessFlags.java
@@ -146,6 +146,10 @@
     return !isPublic() && !isPrivate();
   }
 
+  public boolean isPackagePrivateOrPublic() {
+    return !isPrivate() && !isProtected();
+  }
+
   public boolean isPublic() {
     return isSet(Constants.ACC_PUBLIC);
   }
diff --git a/src/main/java/com/android/tools/r8/graph/AssemblyWriter.java b/src/main/java/com/android/tools/r8/graph/AssemblyWriter.java
index 90faadc..3fc29d6 100644
--- a/src/main/java/com/android/tools/r8/graph/AssemblyWriter.java
+++ b/src/main/java/com/android/tools/r8/graph/AssemblyWriter.java
@@ -9,6 +9,7 @@
 import com.android.tools.r8.contexts.CompilationContext;
 import com.android.tools.r8.graph.GenericSignature.ClassSignature;
 import com.android.tools.r8.ir.conversion.IRConverter;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions;
 import com.android.tools.r8.ir.conversion.MethodProcessorEventConsumer;
 import com.android.tools.r8.ir.conversion.OneTimeMethodProcessor;
 import com.android.tools.r8.ir.optimize.info.OptimizationFeedbackIgnore;
@@ -190,7 +191,8 @@
                 method,
                 OptimizationFeedbackIgnore.getInstance(),
                 methodProcessor,
-                methodProcessingContext));
+                methodProcessingContext,
+                MethodConversionOptions.forD8(converter.appView)));
   }
 
   private void writeAnnotations(
diff --git a/src/main/java/com/android/tools/r8/graph/CfCode.java b/src/main/java/com/android/tools/r8/graph/CfCode.java
index b7feac3..e2a42f7 100644
--- a/src/main/java/com/android/tools/r8/graph/CfCode.java
+++ b/src/main/java/com/android/tools/r8/graph/CfCode.java
@@ -36,8 +36,8 @@
 import com.android.tools.r8.ir.conversion.CfSourceCode;
 import com.android.tools.r8.ir.conversion.IRBuilder;
 import com.android.tools.r8.ir.conversion.LensCodeRewriterUtils;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions;
 import com.android.tools.r8.ir.conversion.MethodConversionOptions.MutableMethodConversionOptions;
-import com.android.tools.r8.ir.conversion.MethodConversionOptions.ThrowingMethodConversionOptions;
 import com.android.tools.r8.ir.optimize.Inliner.ConstraintWithTarget;
 import com.android.tools.r8.ir.optimize.InliningConstraints;
 import com.android.tools.r8.naming.NamingLens;
@@ -578,7 +578,7 @@
         callerPosition,
         origin,
         protoChanges,
-        new ThrowingMethodConversionOptions(appView.options()));
+        MethodConversionOptions.nonConverting());
   }
 
   private void verifyFramesOrRemove(ProgramMethod method, AppView<?> appView, GraphLens codeLens) {
diff --git a/src/main/java/com/android/tools/r8/graph/Code.java b/src/main/java/com/android/tools/r8/graph/Code.java
index 193e758..3f04412 100644
--- a/src/main/java/com/android/tools/r8/graph/Code.java
+++ b/src/main/java/com/android/tools/r8/graph/Code.java
@@ -14,6 +14,7 @@
 import com.android.tools.r8.ir.code.NumberGenerator;
 import com.android.tools.r8.ir.code.Position;
 import com.android.tools.r8.ir.code.Position.PositionBuilder;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions;
 import com.android.tools.r8.ir.conversion.MethodConversionOptions.MutableMethodConversionOptions;
 import com.android.tools.r8.lightir.LirCode;
 import com.android.tools.r8.origin.Origin;
@@ -24,7 +25,7 @@
 public abstract class Code extends CachedHashValueDexItem {
 
   public final IRCode buildIR(ProgramMethod method, AppView<?> appView, Origin origin) {
-    return buildIR(method, appView, origin, new MutableMethodConversionOptions(appView.options()));
+    return buildIR(method, appView, origin, MethodConversionOptions.forLirPhase(appView));
   }
 
   public abstract IRCode buildIR(
diff --git a/src/main/java/com/android/tools/r8/graph/DefaultInstanceInitializerCode.java b/src/main/java/com/android/tools/r8/graph/DefaultInstanceInitializerCode.java
index 31b2efe..4adaae6 100644
--- a/src/main/java/com/android/tools/r8/graph/DefaultInstanceInitializerCode.java
+++ b/src/main/java/com/android/tools/r8/graph/DefaultInstanceInitializerCode.java
@@ -26,8 +26,8 @@
 import com.android.tools.r8.ir.code.ValueType;
 import com.android.tools.r8.ir.conversion.IRBuilder;
 import com.android.tools.r8.ir.conversion.LensCodeRewriterUtils;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions;
 import com.android.tools.r8.ir.conversion.MethodConversionOptions.MutableMethodConversionOptions;
-import com.android.tools.r8.ir.conversion.MethodConversionOptions.ThrowingMethodConversionOptions;
 import com.android.tools.r8.ir.conversion.SyntheticStraightLineSourceCode;
 import com.android.tools.r8.naming.NamingLens;
 import com.android.tools.r8.origin.Origin;
@@ -166,7 +166,7 @@
         new DefaultInstanceInitializerSourceCode(originalMethod, callerPosition);
     return IRBuilder.createForInlining(
             method, appView, codeLens, source, origin, valueNumberGenerator, protoChanges)
-        .build(context, new ThrowingMethodConversionOptions(appView.options()));
+        .build(context, MethodConversionOptions.nonConverting());
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/graph/DexApplication.java b/src/main/java/com/android/tools/r8/graph/DexApplication.java
index 311a287..da73661 100644
--- a/src/main/java/com/android/tools/r8/graph/DexApplication.java
+++ b/src/main/java/com/android/tools/r8/graph/DexApplication.java
@@ -33,23 +33,18 @@
   public final DexItemFactory dexItemFactory;
   private final DexApplicationReadFlags flags;
 
-  // Information on the lexicographically largest string referenced from code.
-  public final DexString highestSortingString;
-
   /** Constructor should only be invoked by the DexApplication.Builder. */
   DexApplication(
       ClassNameMapper proguardMap,
       DexApplicationReadFlags flags,
       ImmutableList<DataResourceProvider> dataResourceProviders,
       InternalOptions options,
-      DexString highestSortingString,
       Timing timing) {
     this.proguardMap = proguardMap;
     this.flags = flags;
     this.dataResourceProviders = dataResourceProviders;
     this.options = options;
     this.dexItemFactory = options.itemFactory;
-    this.highestSortingString = highestSortingString;
     this.timing = timing;
   }
 
@@ -168,7 +163,6 @@
     final Timing timing;
     DexApplicationReadFlags flags;
 
-    DexString highestSortingString;
     private final Collection<DexProgramClass> synthesizedClasses;
 
     public Builder(InternalOptions options, Timing timing) {
@@ -186,7 +180,6 @@
       dataResourceProviders.addAll(application.dataResourceProviders);
       proguardMap = application.getProguardMap();
       timing = application.timing;
-      highestSortingString = application.highestSortingString;
       options = application.options;
       dexItemFactory = application.dexItemFactory;
       synthesizedClasses = new ArrayList<>();
@@ -246,11 +239,6 @@
       return self();
     }
 
-    public synchronized T setHighestSortingString(DexString value) {
-      highestSortingString = value;
-      return self();
-    }
-
     public synchronized T addProgramClass(DexProgramClass clazz) {
       programClasses.add(clazz);
       return self();
diff --git a/src/main/java/com/android/tools/r8/graph/DexCode.java b/src/main/java/com/android/tools/r8/graph/DexCode.java
index 325eb79..763c1b9 100644
--- a/src/main/java/com/android/tools/r8/graph/DexCode.java
+++ b/src/main/java/com/android/tools/r8/graph/DexCode.java
@@ -36,8 +36,8 @@
 import com.android.tools.r8.ir.conversion.DexSourceCode;
 import com.android.tools.r8.ir.conversion.IRBuilder;
 import com.android.tools.r8.ir.conversion.LensCodeRewriterUtils;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions;
 import com.android.tools.r8.ir.conversion.MethodConversionOptions.MutableMethodConversionOptions;
-import com.android.tools.r8.ir.conversion.MethodConversionOptions.ThrowingMethodConversionOptions;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.utils.ArrayUtils;
 import com.android.tools.r8.utils.DexDebugUtils.PositionInfo;
@@ -76,7 +76,7 @@
   public final TryHandler[] handlers;
   public final DexInstruction[] instructions;
 
-  public DexString highestSortingString;
+  private DexString highestSortingString;
   private DexDebugInfo debugInfo;
   private DexDebugInfoForWriting debugInfoForWriting;
 
@@ -210,6 +210,13 @@
     return DexCode::specify;
   }
 
+  public void setHighestSortingStringForJumboProcessedCode(DexString nonJumboString) {
+    // The call of this method marks this code object as properly jumbo-string processed.
+    // In principle, it should be possible to mark as such and assert that we do not reattempt
+    // processing in rewriteCodeWithJumboStrings.
+    highestSortingString = nonJumboString;
+  }
+
   @Override
   public DexWritableCode rewriteCodeWithJumboStrings(
       ProgramMethod method, ObjectToOffsetMapping mapping, AppView<?> appView, boolean force) {
@@ -554,7 +561,7 @@
             appView.dexItemFactory());
     return IRBuilder.createForInlining(
             method, appView, codeLens, source, origin, valueNumberGenerator, protoChanges)
-        .build(context, new ThrowingMethodConversionOptions(appView.options()));
+        .build(context, MethodConversionOptions.nonConverting());
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java b/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
index 67082ae..5452bf2 100644
--- a/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
+++ b/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
@@ -465,7 +465,6 @@
   public boolean willBeInlinedIntoInstanceInitializer(DexItemFactory dexItemFactory) {
     checkIfObsolete();
     if (getName().startsWith(dexItemFactory.temporaryConstructorMethodPrefix)) {
-      assert isPrivate();
       assert !isStatic();
       return true;
     }
diff --git a/src/main/java/com/android/tools/r8/graph/DirectMappedDexApplication.java b/src/main/java/com/android/tools/r8/graph/DirectMappedDexApplication.java
index 08dad18..b6591b9 100644
--- a/src/main/java/com/android/tools/r8/graph/DirectMappedDexApplication.java
+++ b/src/main/java/com/android/tools/r8/graph/DirectMappedDexApplication.java
@@ -49,9 +49,8 @@
       ImmutableCollection<DexClasspathClass> classpathClasses,
       ImmutableList<DataResourceProvider> dataResourceProviders,
       InternalOptions options,
-      DexString highestSortingString,
       Timing timing) {
-    super(proguardMap, flags, dataResourceProviders, options, highestSortingString, timing);
+    super(proguardMap, flags, dataResourceProviders, options, timing);
     this.programOrClasspathClasses = programOrClasspathClasses;
     this.libraryClasses = libraryClasses;
     this.programClasses = programClasses;
@@ -324,7 +323,6 @@
           newClasspathClasses,
           ImmutableList.copyOf(dataResourceProviders),
           options,
-          highestSortingString,
           timing);
     }
 
diff --git a/src/main/java/com/android/tools/r8/graph/GenericSignaturePrinter.java b/src/main/java/com/android/tools/r8/graph/GenericSignaturePrinter.java
index cff0d21..b5fc8e9 100644
--- a/src/main/java/com/android/tools/r8/graph/GenericSignaturePrinter.java
+++ b/src/main/java/com/android/tools/r8/graph/GenericSignaturePrinter.java
@@ -200,11 +200,13 @@
       } else {
         DexType enclosingType = classTypeSignature.enclosingTypeSignature.type;
         String outerDescriptor = namingLens.lookupDescriptor(enclosingType).toString();
-        String innerClassName = DescriptorUtils.getInnerClassName(outerDescriptor, renamedString);
+        String innerClassName =
+            DescriptorUtils.getInnerClassNameFromDescriptor(outerDescriptor, renamedString);
         if (innerClassName == null && isTypeMissing.test(classTypeSignature.type)) {
           assert renamedString.equals(classTypeSignature.type.toDescriptorString());
           innerClassName =
-              DescriptorUtils.getInnerClassName(enclosingType.toDescriptorString(), renamedString);
+              DescriptorUtils.getInnerClassNameFromDescriptor(
+                  enclosingType.toDescriptorString(), renamedString);
         }
         if (innerClassName == null) {
           // We can no longer encode the inner name in the generic signature.
diff --git a/src/main/java/com/android/tools/r8/graph/LazyLoadedDexApplication.java b/src/main/java/com/android/tools/r8/graph/LazyLoadedDexApplication.java
index 96d4bfa..b5b28fd 100644
--- a/src/main/java/com/android/tools/r8/graph/LazyLoadedDexApplication.java
+++ b/src/main/java/com/android/tools/r8/graph/LazyLoadedDexApplication.java
@@ -40,9 +40,8 @@
       ClasspathClassCollection classpathClasses,
       LibraryClassCollection libraryClasses,
       InternalOptions options,
-      DexString highestSortingString,
       Timing timing) {
-    super(proguardMap, flags, dataResourceProviders, options, highestSortingString, timing);
+    super(proguardMap, flags, dataResourceProviders, options, timing);
     this.programClasses = programClasses;
     this.classpathClasses = classpathClasses;
     this.libraryClasses = libraryClasses;
@@ -329,7 +328,6 @@
           classpathClasses,
           libraryClasses,
           options,
-          highestSortingString,
           timing);
     }
   }
diff --git a/src/main/java/com/android/tools/r8/graph/MethodAccessInfoCollection.java b/src/main/java/com/android/tools/r8/graph/MethodAccessInfoCollection.java
index e3b45a8..99cd8d2 100644
--- a/src/main/java/com/android/tools/r8/graph/MethodAccessInfoCollection.java
+++ b/src/main/java/com/android/tools/r8/graph/MethodAccessInfoCollection.java
@@ -63,13 +63,16 @@
     fullyDestroyed = true;
   }
 
-  public void destroyNonDirectInvokes() {
+  public void destroyNonDirectNonSuperInvokes() {
     interfaceInvokes = ThrowingMap.get();
     staticInvokes = ThrowingMap.get();
-    superInvokes = ThrowingMap.get();
     virtualInvokes = ThrowingMap.get();
   }
 
+  public void destroySuperInvokes() {
+    superInvokes = ThrowingMap.get();
+  }
+
   public Modifier modifier() {
     return new Modifier(
         directInvokes, interfaceInvokes, staticInvokes, superInvokes, virtualInvokes);
@@ -100,6 +103,10 @@
     superInvokes.forEach(consumer);
   }
 
+  public boolean hasSuperInvoke(DexMethod method) {
+    return !superInvokes.getOrDefault(method, ProgramMethodSet.empty()).isEmpty();
+  }
+
   public void forEachSuperInvokeContext(DexMethod method, Consumer<ProgramMethod> consumer) {
     superInvokes.getOrDefault(method, ProgramMethodSet.empty()).forEach(consumer);
   }
@@ -119,14 +126,17 @@
     if (fullyDestroyed) {
       result = this;
     } else if (isThrowingMap(interfaceInvokes)) {
-      assert !isThrowingMap(directInvokes);
       assert isThrowingMap(staticInvokes);
-      assert isThrowingMap(superInvokes);
       assert isThrowingMap(virtualInvokes);
+      assert !isThrowingMap(directInvokes);
       MethodAccessInfoCollection.Builder<?> builder = identityBuilder();
       rewriteInvokesWithLens(builder, directInvokes, definitions, lens, InvokeType.DIRECT);
+      rewriteInvokesWithLens(builder, superInvokes, definitions, lens, InvokeType.DIRECT);
       result = builder.build();
-      result.destroyNonDirectInvokes();
+      result.destroyNonDirectNonSuperInvokes();
+      if (isThrowingMap(superInvokes)) {
+        result.destroySuperInvokes();
+      }
     } else {
       MethodAccessInfoCollection.Builder<?> builder = identityBuilder();
       rewriteInvokesWithLens(builder, directInvokes, definitions, lens, InvokeType.DIRECT);
@@ -146,17 +156,19 @@
       DexDefinitionSupplier definitions,
       GraphLens lens,
       InvokeType type) {
-    invokes.forEach(
-        (reference, contexts) -> {
-          ProgramMethodSet newContexts = contexts.rewrittenWithLens(definitions, lens);
-          for (ProgramMethod newContext : newContexts) {
-            MethodLookupResult methodLookupResult =
-                lens.lookupMethod(reference, newContext.getReference(), type);
-            DexMethod newReference = methodLookupResult.getReference();
-            InvokeType newType = methodLookupResult.getType();
-            builder.registerInvokeInContext(newReference, newContext, newType);
-          }
-        });
+    if (!isThrowingMap(invokes)) {
+      invokes.forEach(
+          (reference, contexts) -> {
+            ProgramMethodSet newContexts = contexts.rewrittenWithLens(definitions, lens);
+            for (ProgramMethod newContext : newContexts) {
+              MethodLookupResult methodLookupResult =
+                  lens.lookupMethod(reference, newContext.getReference(), type);
+              DexMethod newReference = methodLookupResult.getReference();
+              InvokeType newType = methodLookupResult.getType();
+              builder.registerInvokeInContext(newReference, newContext, newType);
+            }
+          });
+    }
   }
 
   public MethodAccessInfoCollection withoutPrunedItems(PrunedItems prunedItems) {
diff --git a/src/main/java/com/android/tools/r8/graph/ProgramMethod.java b/src/main/java/com/android/tools/r8/graph/ProgramMethod.java
index ff6d789..32ba2c2 100644
--- a/src/main/java/com/android/tools/r8/graph/ProgramMethod.java
+++ b/src/main/java/com/android/tools/r8/graph/ProgramMethod.java
@@ -12,6 +12,7 @@
 import com.android.tools.r8.ir.code.NumberGenerator;
 import com.android.tools.r8.ir.code.Position;
 import com.android.tools.r8.ir.conversion.LensCodeRewriterUtils;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions;
 import com.android.tools.r8.ir.conversion.MethodConversionOptions.MutableMethodConversionOptions;
 import com.android.tools.r8.ir.conversion.MethodProcessor;
 import com.android.tools.r8.ir.optimize.Inliner.ConstraintWithTarget;
@@ -29,7 +30,7 @@
   }
 
   public IRCode buildIR(AppView<?> appView) {
-    return buildIR(appView, new MutableMethodConversionOptions(appView.options()));
+    return buildIR(appView, MethodConversionOptions.forLirPhase(appView));
   }
 
   public IRCode buildIR(AppView<?> appView, MutableMethodConversionOptions conversionOptions) {
diff --git a/src/main/java/com/android/tools/r8/graph/ThrowNullCode.java b/src/main/java/com/android/tools/r8/graph/ThrowNullCode.java
index 90c6d8d..735be28 100644
--- a/src/main/java/com/android/tools/r8/graph/ThrowNullCode.java
+++ b/src/main/java/com/android/tools/r8/graph/ThrowNullCode.java
@@ -20,8 +20,8 @@
 import com.android.tools.r8.ir.code.Position.SyntheticPosition;
 import com.android.tools.r8.ir.conversion.IRBuilder;
 import com.android.tools.r8.ir.conversion.LensCodeRewriterUtils;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions;
 import com.android.tools.r8.ir.conversion.MethodConversionOptions.MutableMethodConversionOptions;
-import com.android.tools.r8.ir.conversion.MethodConversionOptions.ThrowingMethodConversionOptions;
 import com.android.tools.r8.ir.conversion.SyntheticStraightLineSourceCode;
 import com.android.tools.r8.naming.NamingLens;
 import com.android.tools.r8.origin.Origin;
@@ -77,7 +77,7 @@
     ThrowNullSourceCode source = new ThrowNullSourceCode(method, callerPosition);
     return IRBuilder.createForInlining(
             method, appView, codeLens, source, origin, valueNumberGenerator, protoChanges)
-        .build(context, new ThrowingMethodConversionOptions(appView.options()));
+        .build(context, MethodConversionOptions.nonConverting());
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/graph/UseRegistry.java b/src/main/java/com/android/tools/r8/graph/UseRegistry.java
index 02078ee..1d9e498 100644
--- a/src/main/java/com/android/tools/r8/graph/UseRegistry.java
+++ b/src/main/java/com/android/tools/r8/graph/UseRegistry.java
@@ -254,6 +254,9 @@
               || arg.isDexValueDouble()
               || arg.isDexValueString();
       }
+      if (continuation.shouldBreak()) {
+        break;
+      }
     }
   }
 
diff --git a/src/main/java/com/android/tools/r8/graph/fixup/TreeFixerBase.java b/src/main/java/com/android/tools/r8/graph/fixup/TreeFixerBase.java
index bf5e3de..a84af1a 100644
--- a/src/main/java/com/android/tools/r8/graph/fixup/TreeFixerBase.java
+++ b/src/main/java/com/android/tools/r8/graph/fixup/TreeFixerBase.java
@@ -233,8 +233,8 @@
           && outerClassType != null
           && innerClassAttribute.getInnerName() != null) {
         String innerClassName =
-            DescriptorUtils.getInnerClassName(
-                newOuterClassType.toDescriptorString(), newInnerClassType.toDescriptorString());
+            DescriptorUtils.getInnerClassNameFromSimpleName(
+                newOuterClassType.getSimpleName(), newInnerClassType.getSimpleName());
         if (innerClassName != null) {
           newInnerName = dexItemFactory.createString(innerClassName);
         } else {
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/HorizontalClassMerger.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/HorizontalClassMerger.java
index 9f2e2ad..59efae5 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/HorizontalClassMerger.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/HorizontalClassMerger.java
@@ -17,6 +17,8 @@
 import com.android.tools.r8.graph.lens.MethodLookupResult;
 import com.android.tools.r8.horizontalclassmerging.code.SyntheticInitializerConverter;
 import com.android.tools.r8.ir.code.InvokeType;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions.MutableMethodConversionOptions;
 import com.android.tools.r8.profile.art.ArtProfileCompletenessChecker;
 import com.android.tools.r8.profile.rewriting.ProfileCollectionAdditions;
 import com.android.tools.r8.shaking.AppInfoWithLiveness;
@@ -88,7 +90,7 @@
       timing.begin("HorizontalClassMerger (" + mode.toString() + ")");
       IRCodeProvider codeProvider =
           appView.hasClassHierarchy()
-              ? IRCodeProvider.create(appView.withClassHierarchy())
+              ? IRCodeProvider.create(appView.withClassHierarchy(), this::getConversionOptions)
               : IRCodeProvider.createThrowing();
       run(runtimeTypeCheckInfo, codeProvider, executorService, timing);
 
@@ -104,6 +106,12 @@
     }
   }
 
+  private MutableMethodConversionOptions getConversionOptions() {
+    return mode == Mode.INITIAL
+        ? MethodConversionOptions.forPreLirPhase(appView)
+        : MethodConversionOptions.forPostLirPhase(appView);
+  }
+
   private void run(
       RuntimeTypeCheckInfo runtimeTypeCheckInfo,
       IRCodeProvider codeProvider,
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/IRCodeProvider.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/IRCodeProvider.java
index ab14412..6a35c88 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/IRCodeProvider.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/IRCodeProvider.java
@@ -10,7 +10,9 @@
 import com.android.tools.r8.graph.ProgramMethod;
 import com.android.tools.r8.graph.lens.GraphLens;
 import com.android.tools.r8.ir.code.IRCode;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions.MutableMethodConversionOptions;
 import com.android.tools.r8.synthesis.SyntheticItems.GlobalSyntheticsStrategy;
+import java.util.function.Supplier;
 
 public interface IRCodeProvider {
 
@@ -18,8 +20,10 @@
 
   void setGraphLens(GraphLens graphLens);
 
-  static IRCodeProvider create(AppView<? extends AppInfoWithClassHierarchy> appView) {
-    return new IRCodeProviderImpl(appView);
+  static IRCodeProvider create(
+      AppView<? extends AppInfoWithClassHierarchy> appView,
+      Supplier<MutableMethodConversionOptions> getConversionOptions) {
+    return new IRCodeProviderImpl(appView, getConversionOptions);
   }
 
   static IRCodeProvider createThrowing() {
@@ -37,8 +41,11 @@
   class IRCodeProviderImpl implements IRCodeProvider {
 
     private final AppView<AppInfo> appViewForConversion;
+    private Supplier<MutableMethodConversionOptions> getConversionOptions;
 
-    private IRCodeProviderImpl(AppView<? extends AppInfoWithClassHierarchy> appView) {
+    private IRCodeProviderImpl(
+        AppView<? extends AppInfoWithClassHierarchy> appView,
+        Supplier<MutableMethodConversionOptions> getConversionOptions) {
       // At this point the code rewritings described by repackaging and synthetic finalization have
       // not been applied to the code objects. These code rewritings will be applied in the
       // application writer. We therefore simulate that we are in D8, to allow building IR for each
@@ -51,6 +58,7 @@
       appViewForConversion.setGraphLens(appView.graphLens());
       appViewForConversion.setCodeLens(appView.codeLens());
       this.appViewForConversion = appViewForConversion;
+      this.getConversionOptions = getConversionOptions;
     }
 
     @Override
@@ -58,7 +66,7 @@
       return method
           .getDefinition()
           .getCode()
-          .buildIR(method, appViewForConversion, method.getOrigin());
+          .buildIR(method, appViewForConversion, method.getOrigin(), getConversionOptions.get());
     }
 
     @Override
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedExtensionRegistryShrinker.java b/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedExtensionRegistryShrinker.java
index a78dc55..613d763 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedExtensionRegistryShrinker.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedExtensionRegistryShrinker.java
@@ -22,6 +22,7 @@
 import com.android.tools.r8.ir.code.Instruction;
 import com.android.tools.r8.ir.code.StaticPut;
 import com.android.tools.r8.ir.conversion.IRConverter;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions;
 import com.android.tools.r8.ir.conversion.MethodProcessorEventConsumer;
 import com.android.tools.r8.ir.conversion.OneTimeMethodProcessor;
 import com.android.tools.r8.ir.optimize.info.OptimizationFeedbackIgnore;
@@ -178,7 +179,8 @@
                 method,
                 OptimizationFeedbackIgnore.getInstance(),
                 methodProcessor,
-                methodProcessingContext),
+                methodProcessingContext,
+                MethodConversionOptions.forPostLirPhase(appView)),
         executorService);
     timing.end();
   }
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedMessageLiteBuilderShrinker.java b/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedMessageLiteBuilderShrinker.java
index 51de538..9ecd2a9 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedMessageLiteBuilderShrinker.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedMessageLiteBuilderShrinker.java
@@ -33,6 +33,7 @@
 import com.android.tools.r8.ir.code.StaticGet;
 import com.android.tools.r8.ir.code.Value;
 import com.android.tools.r8.ir.conversion.IRConverter;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions.MutableMethodConversionOptions;
 import com.android.tools.r8.ir.conversion.MethodProcessor;
 import com.android.tools.r8.ir.conversion.callgraph.Node;
 import com.android.tools.r8.ir.optimize.Inliner;
@@ -42,6 +43,7 @@
 import com.android.tools.r8.ir.optimize.info.OptimizationFeedbackSimple;
 import com.android.tools.r8.ir.optimize.inliner.FixedInliningReasonStrategy;
 import com.android.tools.r8.shaking.AppInfoWithLiveness;
+import com.android.tools.r8.shaking.DependentMinimumKeepInfoCollection;
 import com.android.tools.r8.shaking.Enqueuer;
 import com.android.tools.r8.shaking.EnqueuerWorklist;
 import com.android.tools.r8.utils.Box;
@@ -202,7 +204,10 @@
    * references.
    */
   public void rewriteDeadBuilderReferencesFromDynamicMethods(
-      AppView<AppInfoWithLiveness> appView, ExecutorService executorService, Timing timing)
+      MutableMethodConversionOptions conversionOptions,
+      AppView<AppInfoWithLiveness> appView,
+      ExecutorService executorService,
+      Timing timing)
       throws ExecutionException {
     if (builders.isEmpty()) {
       return;
@@ -215,7 +220,7 @@
         (builder, dynamicMethod) -> {
           if (!appInfo.isLiveProgramClass(builder)) {
             rewriteDeadBuilderReferencesFromDynamicMethod(
-                appView, builder, dynamicMethod, converter);
+                appView, builder, dynamicMethod, converter, conversionOptions);
           }
         },
         executorService);
@@ -227,8 +232,9 @@
       AppView<AppInfoWithLiveness> appView,
       DexProgramClass builder,
       ProgramMethod dynamicMethod,
-      IRConverter converter) {
-    IRCode code = dynamicMethod.buildIR(appView);
+      IRConverter converter,
+      MutableMethodConversionOptions conversionOptions) {
+    IRCode code = dynamicMethod.buildIR(appView, conversionOptions);
     InstructionListIterator instructionIterator = code.instructionListIterator();
 
     assert builder.superType == references.generatedMessageLiteBuilderType
@@ -314,6 +320,14 @@
         .extend(subtypingInfo);
   }
 
+  public void extendRootSet(DependentMinimumKeepInfoCollection dependentMinimumKeepInfo) {
+    dependentMinimumKeepInfo
+        .getOrCreateUnconditionalMinimumKeepInfoFor(
+            references.generatedMessageLiteBuilderMethods.constructorMethod)
+        .asMethodJoiner()
+        .disallowInlining();
+  }
+
   public void preprocessCallGraphBeforeCycleElimination(Map<DexMethod, Node> nodes) {
     Node node = nodes.get(references.generatedMessageLiteBuilderMethods.constructorMethod);
     if (node != null) {
@@ -332,7 +346,6 @@
   public void inlineCallsToDynamicMethod(
       ProgramMethod method,
       IRCode code,
-      EnumValueOptimizer enumValueOptimizer,
       OptimizationFeedback feedback,
       MethodProcessor methodProcessor,
       Inliner inliner) {
@@ -345,9 +358,7 @@
 
     // Run the enum optimization to optimize all Enum.ordinal() invocations. This is required to
     // get rid of the enum switch in dynamicMethod().
-    if (enumValueOptimizer != null) {
-      enumValueOptimizer.run(code, Timing.empty());
-    }
+    new EnumValueOptimizer(appView).run(code, Timing.empty());
   }
 
   /**
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedMessageLiteShrinker.java b/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedMessageLiteShrinker.java
index 809f0ad..608c06f 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedMessageLiteShrinker.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedMessageLiteShrinker.java
@@ -41,6 +41,7 @@
 import com.android.tools.r8.ir.code.NewInstance;
 import com.android.tools.r8.ir.code.Value;
 import com.android.tools.r8.ir.conversion.IRConverter;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions;
 import com.android.tools.r8.ir.conversion.MethodProcessorEventConsumer;
 import com.android.tools.r8.ir.conversion.OneTimeMethodProcessor;
 import com.android.tools.r8.ir.optimize.info.OptimizationFeedbackIgnore;
@@ -258,7 +259,8 @@
                 method,
                 OptimizationFeedbackIgnore.getInstance(),
                 methodProcessor,
-                methodProcessingContext),
+                methodProcessingContext,
+                MethodConversionOptions.forPostLirPhase(appView)),
         executorService);
     timing.end();
   }
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/proto/schema/ProtoEnqueuerExtension.java b/src/main/java/com/android/tools/r8/ir/analysis/proto/schema/ProtoEnqueuerExtension.java
index 61747c0..8e43229 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/proto/schema/ProtoEnqueuerExtension.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/proto/schema/ProtoEnqueuerExtension.java
@@ -35,6 +35,7 @@
 import com.android.tools.r8.ir.code.StaticGet;
 import com.android.tools.r8.ir.code.StaticPut;
 import com.android.tools.r8.ir.code.Value;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions;
 import com.android.tools.r8.ir.optimize.info.FieldOptimizationInfo;
 import com.android.tools.r8.shaking.Enqueuer;
 import com.android.tools.r8.shaking.EnqueuerWorklist;
@@ -167,7 +168,7 @@
     DexType holder = dynamicMethod.getHolderType();
     assert !protos.containsKey(holder);
 
-    IRCode code = dynamicMethod.buildIR(appView);
+    IRCode code = dynamicMethod.buildIR(appView, MethodConversionOptions.nonConverting());
     InvokeMethod newMessageInfoInvoke =
         GeneratedMessageLiteShrinker.getNewMessageInfoInvoke(code, references);
     ProtoMessageInfo protoMessageInfo =
@@ -231,7 +232,7 @@
                 return;
               }
 
-              IRCode code = clinit.buildIR(appView);
+              IRCode code = clinit.buildIR(appView, MethodConversionOptions.nonConverting());
               Map<DexEncodedField, StaticPut> uniqueStaticPuts =
                   IRCodeUtils.findUniqueStaticPuts(appView, code, extensionFields);
               for (DexEncodedField extensionField : extensionFields) {
@@ -256,7 +257,8 @@
   private Map<DexProgramClass, Set<DexEncodedField>> collectExtensionFields() {
     Map<DexProgramClass, Set<DexEncodedField>> extensionFieldsByClass = new IdentityHashMap<>();
     for (ProgramMethod findLiteExtensionByNumberMethod : findLiteExtensionByNumberMethods) {
-      IRCode code = findLiteExtensionByNumberMethod.buildIR(appView);
+      IRCode code =
+          findLiteExtensionByNumberMethod.buildIR(appView, MethodConversionOptions.nonConverting());
       Set<Phi> seenPhis = Sets.newIdentityHashSet();
       for (BasicBlock block : code.blocks(BasicBlock::isReturnBlock)) {
         Value returnValue = block.exit().asReturn().returnValue();
diff --git a/src/main/java/com/android/tools/r8/ir/code/MoveException.java b/src/main/java/com/android/tools/r8/ir/code/MoveException.java
index ae9434b..73836d1 100644
--- a/src/main/java/com/android/tools/r8/ir/code/MoveException.java
+++ b/src/main/java/com/android/tools/r8/ir/code/MoveException.java
@@ -87,7 +87,7 @@
     InternalOptions options = appView.options();
     if (options.debug
         || code.context().getOrComputeReachabilitySensitive(appView)
-        || code.getConversionOptions().isGeneratingClassFiles()) {
+        || !code.getConversionOptions().isGeneratingDex()) {
       return DeadInstructionResult.notDead();
     }
     return DeadInstructionResult.deadIfOutValueIsDead();
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/D8MethodProcessor.java b/src/main/java/com/android/tools/r8/ir/conversion/D8MethodProcessor.java
index 6c7a613..4e778ae 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/D8MethodProcessor.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/D8MethodProcessor.java
@@ -128,7 +128,8 @@
                     method,
                     OptimizationFeedbackIgnore.getInstance(),
                     this,
-                    processorContext.createMethodProcessingContext(method)),
+                    processorContext.createMethodProcessingContext(method),
+                    MethodConversionOptions.forD8(converter.appView)),
             executorService));
   }
 
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
index 7e0cf3a..5b22d0e 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
@@ -29,6 +29,7 @@
 import com.android.tools.r8.ir.code.InstructionIterator;
 import com.android.tools.r8.ir.code.NumberGenerator;
 import com.android.tools.r8.ir.code.Value;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions.MutableMethodConversionOptions;
 import com.android.tools.r8.ir.conversion.passes.ArrayConstructionSimplifier;
 import com.android.tools.r8.ir.conversion.passes.BinopRewriter;
 import com.android.tools.r8.ir.conversion.passes.BranchSimplifier;
@@ -38,6 +39,7 @@
 import com.android.tools.r8.ir.conversion.passes.MoveResultRewriter;
 import com.android.tools.r8.ir.conversion.passes.NaturalIntLoopRemover;
 import com.android.tools.r8.ir.conversion.passes.ParentConstructorHoistingCodeRewriter;
+import com.android.tools.r8.ir.conversion.passes.RedundantConstNumberRemover;
 import com.android.tools.r8.ir.conversion.passes.SplitBranch;
 import com.android.tools.r8.ir.conversion.passes.ThrowCatchOptimizer;
 import com.android.tools.r8.ir.conversion.passes.TrivialCheckCastAndInstanceOfRemover;
@@ -124,8 +126,6 @@
   private final ClassInliner classInliner;
   protected final InternalOptions options;
   public final CodeRewriter codeRewriter;
-  public final CommonSubexpressionElimination commonSubexpressionElimination;
-  private final SplitBranch splitBranch;
   public AssertionErrorTwoArgsConstructorRewriter assertionErrorTwoArgsConstructorRewriter;
   public final MemberValuePropagation<?> memberValuePropagation;
   private final LensCodeRewriter lensCodeRewriter;
@@ -136,8 +136,6 @@
   private final StringSwitchRemover stringSwitchRemover;
   private final TypeChecker typeChecker;
   protected ServiceLoaderRewriter serviceLoaderRewriter;
-  private final EnumValueOptimizer enumValueOptimizer;
-  private final BinopRewriter binopRewriter;
   protected final EnumUnboxer enumUnboxer;
   protected InstanceInitializerOutliner instanceInitializerOutliner;
   protected final RemoveVerificationErrorForUnknownReturnedValues
@@ -176,8 +174,6 @@
     this.appView = appView;
     this.options = appView.options();
     this.codeRewriter = new CodeRewriter(appView);
-    this.commonSubexpressionElimination = new CommonSubexpressionElimination(appView);
-    this.splitBranch = new SplitBranch(appView);
     this.assertionErrorTwoArgsConstructorRewriter =
         appView.options().desugarState.isOn()
             ? new AssertionErrorTwoArgsConstructorRewriter(appView)
@@ -227,8 +223,6 @@
       this.stringSwitchRemover = null;
       this.serviceLoaderRewriter = null;
       this.methodOptimizationInfoCollector = null;
-      this.enumValueOptimizer = null;
-      this.binopRewriter = null;
       this.enumUnboxer = EnumUnboxer.empty();
       this.assumeInserter = null;
       this.instanceInitializerOutliner = null;
@@ -289,12 +283,6 @@
           options.enableServiceLoaderRewriting
               ? new ServiceLoaderRewriter(appViewWithLiveness, appView.apiLevelCompute())
               : null;
-      this.enumValueOptimizer =
-          options.enableEnumValueOptimization ? new EnumValueOptimizer(appViewWithLiveness) : null;
-      this.binopRewriter =
-          options.testing.enableBinopOptimization && !options.debug
-              ? new BinopRewriter(appView)
-              : null;
     } else {
       AppView<AppInfo> appViewWithoutClassHierarchy = appView.withoutClassHierarchy();
       this.assumeInserter = null;
@@ -314,8 +302,6 @@
       this.typeChecker = null;
       this.serviceLoaderRewriter = null;
       this.methodOptimizationInfoCollector = null;
-      this.enumValueOptimizer = null;
-      this.binopRewriter = null;
       this.enumUnboxer = EnumUnboxer.empty();
     }
     this.stringSwitchRemover =
@@ -413,15 +399,18 @@
   public void optimizeSynthesizedMethods(
       List<ProgramMethod> programMethods,
       MethodProcessorEventConsumer eventConsumer,
+      MutableMethodConversionOptions conversionOptions,
       ExecutorService executorService)
       throws ExecutionException {
     // Process the generated class, but don't apply any outlining.
     ProgramMethodSet methods = ProgramMethodSet.create(programMethods::forEach);
-    processMethodsConcurrently(methods, eventConsumer, executorService);
+    processMethodsConcurrently(methods, eventConsumer, conversionOptions, executorService);
   }
 
   public void optimizeSynthesizedMethod(
-      ProgramMethod synthesizedMethod, MethodProcessorEventConsumer eventConsumer) {
+      ProgramMethod synthesizedMethod,
+      MethodProcessorEventConsumer eventConsumer,
+      MutableMethodConversionOptions conversionOptions) {
     if (!synthesizedMethod.getDefinition().isProcessed()) {
       // Process the generated method, but don't apply any outlining.
       OneTimeMethodProcessor methodProcessor =
@@ -429,25 +418,31 @@
       methodProcessor.forEachWaveWithExtension(
           (method, methodProcessingContext) ->
               processDesugaredMethod(
-                  method, delayedOptimizationFeedback, methodProcessor, methodProcessingContext));
+                  method,
+                  delayedOptimizationFeedback,
+                  methodProcessor,
+                  methodProcessingContext,
+                  conversionOptions));
     }
   }
 
   public void processClassesConcurrently(
       Collection<DexProgramClass> classes,
       MethodProcessorEventConsumer eventConsumer,
+      MutableMethodConversionOptions conversionOptions,
       ExecutorService executorService)
       throws ExecutionException {
     ProgramMethodSet wave = ProgramMethodSet.create();
     for (DexProgramClass clazz : classes) {
       clazz.forEachProgramMethod(wave::add);
     }
-    processMethodsConcurrently(wave, eventConsumer, executorService);
+    processMethodsConcurrently(wave, eventConsumer, conversionOptions, executorService);
   }
 
   public void processMethodsConcurrently(
       ProgramMethodSet wave,
       MethodProcessorEventConsumer eventConsumer,
+      MutableMethodConversionOptions conversionOptions,
       ExecutorService executorService)
       throws ExecutionException {
     if (!wave.isEmpty()) {
@@ -456,7 +451,11 @@
       methodProcessor.forEachWaveWithExtension(
           (method, methodProcessingContext) ->
               processDesugaredMethod(
-                  method, delayedOptimizationFeedback, methodProcessor, methodProcessingContext),
+                  method,
+                  delayedOptimizationFeedback,
+                  methodProcessor,
+                  methodProcessingContext,
+                  conversionOptions),
           executorService);
     }
   }
@@ -466,12 +465,14 @@
       ProgramMethod method,
       OptimizationFeedback feedback,
       MethodProcessor methodProcessor,
-      MethodProcessingContext methodProcessingContext) {
+      MethodProcessingContext methodProcessingContext,
+      MutableMethodConversionOptions conversionOptions) {
     DexEncodedMethod definition = method.getDefinition();
     Code code = definition.getCode();
     boolean matchesMethodFilter = options.methodMatchesFilter(definition);
     if (code != null && matchesMethodFilter) {
-      return rewriteDesugaredCode(method, feedback, methodProcessor, methodProcessingContext);
+      return rewriteDesugaredCode(
+          method, feedback, methodProcessor, methodProcessingContext, conversionOptions);
     } else {
       // Mark abstract methods as processed as well.
       definition.markProcessed(ConstraintWithTarget.NEVER);
@@ -491,20 +492,22 @@
       ProgramMethod method,
       OptimizationFeedback feedback,
       MethodProcessor methodProcessor,
-      MethodProcessingContext methodProcessingContext) {
+      MethodProcessingContext methodProcessingContext,
+      MutableMethodConversionOptions conversionOptions) {
     return ExceptionUtils.withOriginAndPositionAttachmentHandler(
         method.getOrigin(),
         new MethodPosition(method.getReference().asMethodReference()),
         () ->
             rewriteDesugaredCodeInternal(
-                method, feedback, methodProcessor, methodProcessingContext));
+                method, feedback, methodProcessor, methodProcessingContext, conversionOptions));
   }
 
   protected Timing rewriteDesugaredCodeInternal(
       ProgramMethod method,
       OptimizationFeedback feedback,
       MethodProcessor methodProcessor,
-      MethodProcessingContext methodProcessingContext) {
+      MethodProcessingContext methodProcessingContext,
+      MutableMethodConversionOptions conversionOptions) {
     if (options.verbose) {
       options.reporter.info(
           new StringDiagnostic("Processing: " + method.toSourceString()));
@@ -518,7 +521,7 @@
       return Timing.empty();
     }
 
-    IRCode code = method.buildIR(appView);
+    IRCode code = method.buildIR(appView, conversionOptions);
     if (code == null) {
       feedback.markProcessed(method.getDefinition(), ConstraintWithTarget.NEVER);
       return Timing.empty();
@@ -644,13 +647,10 @@
       previous = printMethod(code, "IR after member-value propagation (SSA)", previous);
     }
 
-    if (enumValueOptimizer != null) {
-      assert appView.enableWholeProgramOptimizations();
-      timing.begin("Remove switch maps");
-      enumValueOptimizer.removeSwitchMaps(code);
-      timing.end();
-      previous = printMethod(code, "IR after enum-value optimization (SSA)", previous);
-    }
+    timing.begin("Remove switch maps");
+    new EnumValueOptimizer(appView).removeSwitchMaps(code);
+    timing.end();
+    previous = printMethod(code, "IR after enum-switch optimization (SSA)", previous);
 
     if (instanceInitializerOutliner != null) {
       instanceInitializerOutliner.rewriteInstanceInitializers(
@@ -740,63 +740,35 @@
 
     assert code.verifyTypes(appView);
 
-    new TrivialCheckCastAndInstanceOfRemover(appView)
-        .run(code, methodProcessor, methodProcessingContext, timing);
-
-    if (enumValueOptimizer != null) {
-      assert appView.enableWholeProgramOptimizations();
-      enumValueOptimizer.run(code, timing);
-    }
-
-    new KnownArrayLengthRewriter(appView).run(code, timing);
-    new NaturalIntLoopRemover(appView).run(code, timing);
     if (assertionErrorTwoArgsConstructorRewriter != null) {
       timing.begin("Rewrite AssertionError");
       assertionErrorTwoArgsConstructorRewriter.rewrite(
           code, methodProcessor, methodProcessingContext);
       timing.end();
     }
-    commonSubexpressionElimination.run(code, timing);
+
+    new TrivialCheckCastAndInstanceOfRemover(appView)
+        .run(code, methodProcessor, methodProcessingContext, timing);
+    new EnumValueOptimizer(appView).run(code, timing);
+    new KnownArrayLengthRewriter(appView).run(code, timing);
+    new NaturalIntLoopRemover(appView).run(code, timing);
+    new CommonSubexpressionElimination(appView).run(code, timing);
     new ArrayConstructionSimplifier(appView).run(code, timing);
     new MoveResultRewriter(appView).run(code, timing);
-    if (options.enableStringConcatenationOptimization && !isDebugMode) {
-      new StringBuilderAppendOptimizer(appView).run(code, timing);
-    }
+    new StringBuilderAppendOptimizer(appView).run(code, timing);
     new SparseConditionalConstantPropagation(appView, code).run(code, timing);
-    timing.begin("Rewrite always throwing instructions");
-    new ThrowCatchOptimizer(appView).optimizeAlwaysThrowingInstructions(code);
-    timing.end();
-    timing.begin("Simplify control flow");
-    if (new BranchSimplifier(appView).simplifyBranches(code)) {
+    new ThrowCatchOptimizer(appView).run(code, timing);
+    if (new BranchSimplifier(appView)
+        .run(code, timing)
+        .asControlFlowSimplificationResult()
+        .anyAffectedValues()) {
       new TrivialCheckCastAndInstanceOfRemover(appView)
           .run(code, methodProcessor, methodProcessingContext, timing);
     }
-    timing.end();
-    splitBranch.run(code, timing);
-    if (options.enableRedundantConstNumberOptimization) {
-      timing.begin("Remove const numbers");
-      codeRewriter.redundantConstNumberRemoval(code);
-      timing.end();
-    }
-    if (RedundantFieldLoadAndStoreElimination.shouldRun(appView, code)) {
-      timing.begin("Remove field loads");
-      new RedundantFieldLoadAndStoreElimination(appView, code).run();
-      timing.end();
-    }
-    if (binopRewriter != null) {
-      binopRewriter.run(code, timing);
-    }
-
-    if (options.testing.invertConditionals) {
-      invertConditionalsForTesting(code);
-    }
-
-    if (!isDebugMode) {
-      timing.begin("Rewrite throw NPE");
-      new ThrowCatchOptimizer(appView).rewriteThrowNullPointerException(code);
-      timing.end();
-      previous = printMethod(code, "IR after rewrite throw null (SSA)", previous);
-    }
+    new SplitBranch(appView).run(code, timing);
+    new RedundantConstNumberRemover(appView).run(code, timing);
+    new RedundantFieldLoadAndStoreElimination(appView, code).run(code, timing);
+    new BinopRewriter(appView).run(code, timing);
 
     timing.begin("Optimize class initializers");
     ClassInitializerDefaultsResult classInitializerDefaultsResult =
@@ -810,6 +782,10 @@
     deadCodeRemover.run(code, timing);
     assert code.isConsistentSSA(appView);
 
+    if (options.testing.invertConditionals) {
+      invertConditionalsForTesting(code);
+    }
+
     previous = printMethod(code, "IR after dead code removal (SSA)", previous);
 
     assert code.verifyTypes(appView);
@@ -824,7 +800,6 @@
       classInliner.processMethodCode(
           appView.withLiveness(),
           stringOptimizer,
-          enumValueOptimizer,
           code.context(),
           code,
           feedback,
@@ -937,7 +912,6 @@
 
     // Assert that we do not have unremoved non-sense code in the output, e.g., v <- non-null NULL.
     assert code.verifyNoNullabilityBottomTypes();
-
     assert code.verifyTypes(appView);
 
     previous =
@@ -1068,16 +1042,17 @@
     if (options.testing.roundtripThroughLir) {
       code = roundtripThroughLir(code, feedback, bytecodeMetadataProvider, timing);
     }
-    if (options.testing.canUseLir(appView)) {
+    MethodConversionOptions conversionOptions = code.getConversionOptions();
+    if (conversionOptions.isGeneratingLir()) {
       timing.begin("IR->LIR");
       finalizeToLir(code, feedback, bytecodeMetadataProvider, timing);
       timing.end();
-    } else if (options.isGeneratingClassFiles()) {
+    } else if (conversionOptions.isGeneratingClassFiles()) {
       timing.begin("IR->CF");
       finalizeToCf(code, feedback, bytecodeMetadataProvider, timing);
       timing.end();
     } else {
-      assert options.isGeneratingDex();
+      assert conversionOptions.isGeneratingDex();
       timing.begin("IR->DEX");
       finalizeToDex(code, feedback, bytecodeMetadataProvider, timing);
       timing.end();
@@ -1130,7 +1105,8 @@
             appView,
             null,
             RewrittenPrototypeDescription.none(),
-            appView.graphLens().getOriginalMethodSignature(code.context().getReference()));
+            appView.graphLens().getOriginalMethodSignature(code.context().getReference()),
+            (MutableMethodConversionOptions) code.getConversionOptions());
     timing.end();
     return irCode;
   }
@@ -1177,7 +1153,6 @@
             .finalizeCode(code, bytecodeMetadataProvider, timing),
         appView);
     markProcessed(code, feedback);
-    updateHighestSortingStrings(definition);
   }
 
   public void markProcessed(IRCode code, OptimizationFeedback feedback) {
@@ -1205,18 +1180,6 @@
     return true;
   }
 
-  protected synchronized void updateHighestSortingStrings(DexEncodedMethod method) {
-    Code code = method.getCode();
-    assert code.isDexWritableCode();
-    DexString highestSortingReferencedString = code.asDexWritableCode().getHighestSortingString();
-    if (highestSortingReferencedString != null) {
-      if (highestSortingString == null
-          || highestSortingReferencedString.compareTo(highestSortingString) > 0) {
-        highestSortingString = highestSortingReferencedString;
-      }
-    }
-  }
-
   public void printPhase(String phase) {
     if (!options.extensiveLoggingFilter.isEmpty()) {
       System.out.println("Entering phase: " + phase);
@@ -1289,32 +1252,4 @@
       inliner.onMethodCodePruned(method);
     }
   }
-
-  public void finalizeLirMethodToOutputFormat(ProgramMethod method) {
-    Code code = method.getDefinition().getCode();
-    if (!(code instanceof LirCode)) {
-      return;
-    }
-    Timing onThreadTiming = Timing.empty();
-    IRCode irCode = method.buildIR(appView);
-    // Processing is done and no further uses of the meta-data should arise.
-    BytecodeMetadataProvider bytecodeMetadataProvider = BytecodeMetadataProvider.empty();
-    // During processing optimization info may cause previously live code to become dead.
-    // E.g., we may now have knowledge that an invoke does not have side effects.
-    // Thus, we re-run the dead-code remover now as it is assumed complete by CF/DEX finalization.
-    deadCodeRemover.run(irCode, onThreadTiming);
-    if (options.isGeneratingClassFiles()) {
-      method.setCode(
-          new IRToCfFinalizer(appView, deadCodeRemover)
-              .finalizeCode(irCode, bytecodeMetadataProvider, onThreadTiming),
-          appView);
-    } else {
-      assert options.isGeneratingDex();
-      method.setCode(
-          new IRToDexFinalizer(appView, deadCodeRemover)
-              .finalizeCode(irCode, bytecodeMetadataProvider, onThreadTiming),
-          appView);
-      updateHighestSortingStrings(method.getDefinition());
-    }
-  }
 }
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/IRToDexFinalizer.java b/src/main/java/com/android/tools/r8/ir/conversion/IRToDexFinalizer.java
index 8c161b8..535c9e7 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/IRToDexFinalizer.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/IRToDexFinalizer.java
@@ -37,17 +37,20 @@
       D8NestBasedAccessDesugaring.checkAndFailOnIncompleteNests(appView);
     }
     DexEncodedMethod method = code.method();
+    workaroundBugs(code, timing);
     code.traceBlocks();
-    workaroundBugs(code);
     // Perform register allocation.
     RegisterAllocator registerAllocator = performRegisterAllocation(code, method, timing);
     return new DexBuilder(code, bytecodeMetadataProvider, registerAllocator, options).build();
   }
 
-  private void workaroundBugs(IRCode code) {
+  private void workaroundBugs(IRCode code, Timing timing) {
     RuntimeWorkaroundCodeRewriter.workaroundNumberConversionRegisterAllocationBug(code, options);
     // Workaround massive dex2oat memory use for self-recursive methods.
     RuntimeWorkaroundCodeRewriter.workaroundDex2OatInliningIssue(appView, code);
+    if (RuntimeWorkaroundCodeRewriter.workaroundInstanceOfTypeWeakeningInVerifier(appView, code)) {
+      deadCodeRemover.run(code, timing);
+    }
     // Workaround MAX_INT switch issue.
     RuntimeWorkaroundCodeRewriter.workaroundSwitchMaxIntBug(code, appView);
     RuntimeWorkaroundCodeRewriter.workaroundDex2OatLinkedListBug(code, options);
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/MethodConversionOptions.java b/src/main/java/com/android/tools/r8/ir/conversion/MethodConversionOptions.java
index adf0102..69c916e 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/MethodConversionOptions.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/MethodConversionOptions.java
@@ -5,15 +5,67 @@
 package com.android.tools.r8.ir.conversion;
 
 import com.android.tools.r8.errors.Unreachable;
+import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.utils.InternalOptions;
 
 public abstract class MethodConversionOptions {
 
+  public static MutableMethodConversionOptions forPreLirPhase(AppView<?> appView) {
+    if (!appView.enableWholeProgramOptimizations()) {
+      return forD8(appView);
+    }
+    assert appView.testing().isPreLirPhase();
+    return new MutableMethodConversionOptions(Target.CF, appView.options());
+  }
+
+  public static MutableMethodConversionOptions forPostLirPhase(AppView<?> appView) {
+    if (!appView.enableWholeProgramOptimizations()) {
+      return forD8(appView);
+    }
+    assert appView.testing().isPostLirPhase();
+    Target target = appView.options().isGeneratingClassFiles() ? Target.CF : Target.DEX;
+    return new MutableMethodConversionOptions(target, appView.options());
+  }
+
+  public static MutableMethodConversionOptions forLirPhase(AppView<?> appView) {
+    if (!appView.enableWholeProgramOptimizations()) {
+      return forD8(appView);
+    }
+    assert appView.testing().isSupportedLirPhase();
+    return new MutableMethodConversionOptions(determineTarget(appView), appView.options());
+  }
+
+  public static MutableMethodConversionOptions forD8(AppView<?> appView) {
+    assert !appView.enableWholeProgramOptimizations();
+    return new MutableMethodConversionOptions(determineTarget(appView), appView.options());
+  }
+
+  public static MutableMethodConversionOptions nonConverting() {
+    return new ThrowingMethodConversionOptions();
+  }
+
+  private enum Target {
+    CF,
+    DEX,
+    LIR
+  }
+
+  private static Target determineTarget(AppView<?> appView) {
+    if (appView.testing().canUseLir(appView)) {
+      return Target.LIR;
+    }
+    if (appView.options().isGeneratingClassFiles()) {
+      return Target.CF;
+    }
+    assert appView.options().isGeneratingDex();
+    return Target.DEX;
+  }
+
+  public abstract boolean isGeneratingLir();
+
   public abstract boolean isGeneratingClassFiles();
 
-  public final boolean isGeneratingDex() {
-    return !isGeneratingClassFiles();
-  }
+  public abstract boolean isGeneratingDex();
 
   public abstract boolean isPeepholeOptimizationsEnabled();
 
@@ -21,13 +73,17 @@
 
   public static class MutableMethodConversionOptions extends MethodConversionOptions {
 
+    private Target target;
     private boolean enablePeepholeOptimizations = true;
     private boolean enableStringSwitchConversion;
-    private boolean isGeneratingClassFiles;
 
-    public MutableMethodConversionOptions(InternalOptions options) {
-      this.enableStringSwitchConversion = options.isStringSwitchConversionEnabled();
-      this.isGeneratingClassFiles = options.isGeneratingClassFiles();
+    private MutableMethodConversionOptions(Target target, boolean enableStringSwitchConversion) {
+      this.target = target;
+      this.enableStringSwitchConversion = enableStringSwitchConversion;
+    }
+
+    private MutableMethodConversionOptions(Target target, InternalOptions options) {
+      this(target, options.isStringSwitchConversionEnabled());
     }
 
     public void disablePeepholeOptimizations(MethodProcessor methodProcessor) {
@@ -40,15 +96,19 @@
       return this;
     }
 
-    public MutableMethodConversionOptions setIsGeneratingClassFiles(
-        boolean isGeneratingClassFiles) {
-      this.isGeneratingClassFiles = isGeneratingClassFiles;
-      return this;
+    @Override
+    public boolean isGeneratingLir() {
+      return target == Target.LIR;
     }
 
     @Override
     public boolean isGeneratingClassFiles() {
-      return isGeneratingClassFiles;
+      return target == Target.CF;
+    }
+
+    @Override
+    public boolean isGeneratingDex() {
+      return target == Target.DEX;
     }
 
     @Override
@@ -64,8 +124,13 @@
 
   public static class ThrowingMethodConversionOptions extends MutableMethodConversionOptions {
 
-    public ThrowingMethodConversionOptions(InternalOptions options) {
-      super(options);
+    private ThrowingMethodConversionOptions() {
+      super(null, true);
+    }
+
+    @Override
+    public boolean isGeneratingLir() {
+      throw new Unreachable();
     }
 
     @Override
@@ -74,6 +139,11 @@
     }
 
     @Override
+    public boolean isGeneratingDex() {
+      throw new Unreachable();
+    }
+
+    @Override
     public boolean isPeepholeOptimizationsEnabled() {
       throw new Unreachable();
     }
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/PrimaryD8L8IRConverter.java b/src/main/java/com/android/tools/r8/ir/conversion/PrimaryD8L8IRConverter.java
index bcbbe63..c5c3e73 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/PrimaryD8L8IRConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/PrimaryD8L8IRConverter.java
@@ -85,7 +85,7 @@
     application = commitPendingSyntheticItems(appView, application);
 
     // Build a new application with jumbo string info,
-    Builder<?> builder = application.builder().setHighestSortingString(highestSortingString);
+    Builder<?> builder = application.builder();
 
     if (appView.options().isDesugaredLibraryCompilation()) {
       new EmulatedInterfaceApplicationRewriter(appView).rewriteApplication(builder);
@@ -169,9 +169,6 @@
     } else {
       assert definition.getCode().isDexCode();
     }
-    if (!options.isGeneratingClassFiles()) {
-      updateHighestSortingStrings(definition);
-    }
   }
 
   private void checkPrefixMerging(ProgramMethod method) {
@@ -380,7 +377,12 @@
       MethodProcessor methodProcessor,
       MethodProcessingContext methodProcessingContext) {
     boolean didDesugar = desugar(method, desugaringEventConsumer, methodProcessingContext);
-    return rewriteDesugaredCodeInternal(method, feedback, methodProcessor, methodProcessingContext);
+    return rewriteDesugaredCodeInternal(
+        method,
+        feedback,
+        methodProcessor,
+        methodProcessingContext,
+        MethodConversionOptions.forD8(appView));
   }
 
   private boolean desugar(
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/PrimaryR8IRConverter.java b/src/main/java/com/android/tools/r8/ir/conversion/PrimaryR8IRConverter.java
index 9df87ae..729a2e5 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/PrimaryR8IRConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/PrimaryR8IRConverter.java
@@ -6,14 +6,18 @@
 
 import com.android.tools.r8.graph.AppInfoWithClassHierarchy;
 import com.android.tools.r8.graph.AppView;
+import com.android.tools.r8.graph.Code;
 import com.android.tools.r8.graph.DexApplication;
-import com.android.tools.r8.graph.DexApplication.Builder;
 import com.android.tools.r8.graph.DexEncodedMethod;
 import com.android.tools.r8.graph.DexProgramClass;
+import com.android.tools.r8.graph.ProgramMethod;
 import com.android.tools.r8.graph.PrunedItems;
+import com.android.tools.r8.graph.bytecodemetadata.BytecodeMetadataProvider;
 import com.android.tools.r8.graph.lens.GraphLens;
 import com.android.tools.r8.ir.analysis.fieldaccess.TrivialFieldAccessReprocessor;
+import com.android.tools.r8.ir.code.IRCode;
 import com.android.tools.r8.ir.optimize.info.OptimizationFeedbackDelayed;
+import com.android.tools.r8.lightir.LirCode;
 import com.android.tools.r8.optimize.argumentpropagation.ArgumentPropagator;
 import com.android.tools.r8.shaking.AppInfoWithLiveness;
 import com.android.tools.r8.utils.ThreadUtils;
@@ -51,6 +55,7 @@
   private DexApplication internalOptimize(
       AppView<AppInfoWithLiveness> appView, ExecutorService executorService)
       throws ExecutionException {
+    appView.testing().enterLirSupportedPhase();
     // Desugaring happens in the enqueuer.
     assert instructionDesugaring.isEmpty();
 
@@ -93,7 +98,11 @@
       primaryMethodProcessor.forEachMethod(
           (method, methodProcessingContext) ->
               processDesugaredMethod(
-                  method, feedback, primaryMethodProcessor, methodProcessingContext),
+                  method,
+                  feedback,
+                  primaryMethodProcessor,
+                  methodProcessingContext,
+                  MethodConversionOptions.forLirPhase(appView)),
           this::waveStart,
           this::waveDone,
           timing,
@@ -168,7 +177,11 @@
         postMethodProcessor.forEachMethod(
             (method, methodProcessingContext) ->
                 processDesugaredMethod(
-                    method, feedback, postMethodProcessor, methodProcessingContext),
+                    method,
+                    feedback,
+                    postMethodProcessor,
+                    methodProcessingContext,
+                    MethodConversionOptions.forLirPhase(appView)),
             feedback,
             executorService,
             timing);
@@ -191,10 +204,6 @@
     // synthetics.)
     commitPendingSyntheticItems(appView);
 
-    // Build a new application with jumbo string info.
-    Builder<?> builder = appView.appInfo().app().builder();
-    builder.setHighestSortingString(highestSortingString);
-
     // Update optimization info for all synthesized methods at once.
     feedback.updateVisibleOptimizationInfo();
 
@@ -209,11 +218,12 @@
     // Assure that no more optimization feedback left after post processing.
     assert feedback.noUpdatesLeft();
     finalizeLirToOutputFormat(timing, executorService);
-    return builder.build();
+    return appView.appInfo().app();
   }
 
   private void finalizeLirToOutputFormat(Timing timing, ExecutorService executorService)
       throws ExecutionException {
+    appView.testing().exitLirSupportedPhase();
     if (!options.testing.canUseLir(appView)) {
       return;
     }
@@ -230,6 +240,34 @@
     timing.end();
   }
 
+  void finalizeLirMethodToOutputFormat(ProgramMethod method) {
+    Code code = method.getDefinition().getCode();
+    if (!(code instanceof LirCode)) {
+      return;
+    }
+    Timing onThreadTiming = Timing.empty();
+    IRCode irCode = method.buildIR(appView, MethodConversionOptions.forPostLirPhase(appView));
+    // Processing is done and no further uses of the meta-data should arise.
+    BytecodeMetadataProvider bytecodeMetadataProvider = BytecodeMetadataProvider.empty();
+    // During processing optimization info may cause previously live code to become dead.
+    // E.g., we may now have knowledge that an invoke does not have side effects.
+    // Thus, we re-run the dead-code remover now as it is assumed complete by CF/DEX finalization.
+    deadCodeRemover.run(irCode, onThreadTiming);
+    MethodConversionOptions conversionOptions = irCode.getConversionOptions();
+    if (conversionOptions.isGeneratingClassFiles()) {
+      method.setCode(
+          new IRToCfFinalizer(appView, deadCodeRemover)
+              .finalizeCode(irCode, bytecodeMetadataProvider, onThreadTiming),
+          appView);
+    } else {
+      assert conversionOptions.isGeneratingDex();
+      method.setCode(
+          new IRToDexFinalizer(appView, deadCodeRemover)
+              .finalizeCode(irCode, bytecodeMetadataProvider, onThreadTiming),
+          appView);
+    }
+  }
+
   private void clearDexMethodCompilationState() {
     appView.appInfo().classes().forEach(this::clearDexMethodCompilationState);
   }
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/passes/BinopRewriter.java b/src/main/java/com/android/tools/r8/ir/conversion/passes/BinopRewriter.java
index f684ff5..70c64f1 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/passes/BinopRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/passes/BinopRewriter.java
@@ -245,7 +245,9 @@
 
   @Override
   protected boolean shouldRewriteCode(IRCode code) {
-    return true;
+    return options.testing.enableBinopOptimization
+        && !isDebugMode(code.context())
+        && code.metadata().mayHaveArithmeticOrLogicalBinop();
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/passes/BranchSimplifier.java b/src/main/java/com/android/tools/r8/ir/conversion/passes/BranchSimplifier.java
index 28ddb01..a239404 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/passes/BranchSimplifier.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/passes/BranchSimplifier.java
@@ -4,6 +4,10 @@
 
 package com.android.tools.r8.ir.conversion.passes;
 
+import static com.android.tools.r8.ir.conversion.passes.BranchSimplifier.ControlFlowSimplificationResult.NO_CHANGE;
+import static com.android.tools.r8.ir.conversion.passes.BranchSimplifier.ControlFlowSimplificationResult.create;
+
+import com.android.tools.r8.graph.AppInfo;
 import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexClass;
 import com.android.tools.r8.graph.DexEncodedField;
@@ -35,10 +39,10 @@
 import com.android.tools.r8.ir.code.Value;
 import com.android.tools.r8.ir.code.ValueType;
 import com.android.tools.r8.ir.code.Xor;
+import com.android.tools.r8.ir.conversion.passes.result.CodeRewriterResult;
 import com.android.tools.r8.ir.optimize.controlflow.SwitchCaseAnalyzer;
 import com.android.tools.r8.shaking.AppInfoWithLiveness;
 import com.android.tools.r8.utils.BooleanUtils;
-import com.android.tools.r8.utils.InternalOptions;
 import com.android.tools.r8.utils.InternalOutputMode;
 import com.android.tools.r8.utils.LongInterval;
 import com.google.common.collect.ImmutableList;
@@ -59,20 +63,32 @@
 import java.util.PriorityQueue;
 import java.util.Set;
 
-public class BranchSimplifier {
-
-  private final AppView<?> appView;
-  private final InternalOptions options;
+public class BranchSimplifier extends CodeRewriterPass<AppInfo> {
 
   public BranchSimplifier(AppView<?> appView) {
-    this.appView = appView;
-    this.options = appView.options();
+    super(appView);
   }
 
-  public boolean simplifyBranches(IRCode code) {
-    boolean anyAffectedValues = rewriteSwitch(code);
-    anyAffectedValues |= simplifyIf(code).anyAffectedValues();
-    return anyAffectedValues;
+  @Override
+  protected String getTimingId() {
+    return "BranchSimplifier";
+  }
+
+  @Override
+  protected boolean shouldRewriteCode(IRCode code) {
+    return true;
+  }
+
+  @Override
+  protected CodeRewriterResult noChange() {
+    return NO_CHANGE;
+  }
+
+  @Override
+  protected CodeRewriterResult rewriteCode(IRCode code) {
+    ControlFlowSimplificationResult switchResult = rewriteSwitch(code);
+    ControlFlowSimplificationResult ifResult = simplifyIf(code);
+    return switchResult.combine(ifResult);
   }
 
   public ControlFlowSimplificationResult simplifyIf(IRCode code) {
@@ -126,10 +142,26 @@
     }
     code.removeRedundantBlocks();
     assert code.isConsistentSSA(appView);
-    return new ControlFlowSimplificationResult(!affectedValues.isEmpty(), simplified);
+    return create(!affectedValues.isEmpty(), simplified);
   }
 
-  public static class ControlFlowSimplificationResult {
+  public static class ControlFlowSimplificationResult implements CodeRewriterResult {
+
+    static ControlFlowSimplificationResult create(
+        boolean anyAffectedValues, boolean anySimplifications) {
+      if (anyAffectedValues) {
+        assert anySimplifications;
+        return ALL_CHANGED;
+      }
+      return anySimplifications ? ONLY_SIMPLIFICATIONS : NO_CHANGE;
+    }
+
+    static final ControlFlowSimplificationResult ALL_CHANGED =
+        new ControlFlowSimplificationResult(true, true);
+    static final ControlFlowSimplificationResult ONLY_SIMPLIFICATIONS =
+        new ControlFlowSimplificationResult(false, true);
+    static final ControlFlowSimplificationResult NO_CHANGE =
+        new ControlFlowSimplificationResult(false, false);
 
     private final boolean anyAffectedValues;
     private final boolean anySimplifications;
@@ -140,6 +172,11 @@
       this.anySimplifications = anySimplifications;
     }
 
+    @Override
+    public ControlFlowSimplificationResult asControlFlowSimplificationResult() {
+      return this;
+    }
+
     public boolean anyAffectedValues() {
       return anyAffectedValues;
     }
@@ -147,6 +184,18 @@
     public boolean anySimplifications() {
       return anySimplifications;
     }
+
+    @Override
+    public boolean hasChanged() {
+      assert !anyAffectedValues || anySimplifications;
+      return anySimplifications();
+    }
+
+    public ControlFlowSimplificationResult combine(ControlFlowSimplificationResult ifResult) {
+      return create(
+          anyAffectedValues || ifResult.anyAffectedValues,
+          anySimplifications || ifResult.anySimplifications);
+    }
   }
 
   private boolean simplifyIfZeroTest(IRCode code, BasicBlock block, If theIf) {
@@ -567,22 +616,25 @@
     return true;
   }
 
-  private boolean rewriteSwitch(IRCode code) {
+  private ControlFlowSimplificationResult rewriteSwitch(IRCode code) {
     return rewriteSwitch(code, SwitchCaseAnalyzer.getInstance());
   }
 
-  private boolean rewriteSwitch(IRCode code, SwitchCaseAnalyzer switchCaseAnalyzer) {
+  private ControlFlowSimplificationResult rewriteSwitch(
+      IRCode code, SwitchCaseAnalyzer switchCaseAnalyzer) {
     if (!options.isSwitchRewritingEnabled()) {
-      return false;
+      return NO_CHANGE;
     }
     if (!code.metadata().mayHaveSwitch()) {
-      return false;
+      return NO_CHANGE;
     }
     return rewriteSwitchFull(code, switchCaseAnalyzer);
   }
 
-  private boolean rewriteSwitchFull(IRCode code, SwitchCaseAnalyzer switchCaseAnalyzer) {
+  private ControlFlowSimplificationResult rewriteSwitchFull(
+      IRCode code, SwitchCaseAnalyzer switchCaseAnalyzer) {
     boolean needToRemoveUnreachableBlocks = false;
+    boolean anySimplifications = false;
     ListIterator<BasicBlock> blocksIterator = code.listIterator();
     while (blocksIterator.hasNext()) {
       BasicBlock block = blocksIterator.next();
@@ -594,6 +646,7 @@
           if (options.testing.enableDeadSwitchCaseElimination) {
             SwitchCaseEliminator eliminator =
                 removeUnnecessarySwitchCases(code, theSwitch, iterator, switchCaseAnalyzer);
+            anySimplifications |= eliminator.canBeOptimized();
             if (eliminator.mayHaveIntroducedUnreachableBlocks()) {
               needToRemoveUnreachableBlocks = true;
             }
@@ -608,7 +661,8 @@
             theSwitch = instruction.asSwitch();
           }
           if (theSwitch.isIntSwitch()) {
-            rewriteIntSwitch(code, blocksIterator, block, iterator, theSwitch.asIntSwitch());
+            anySimplifications |=
+                rewriteIntSwitch(code, blocksIterator, block, iterator, theSwitch.asIntSwitch());
           }
         }
       }
@@ -621,12 +675,13 @@
 
     Set<Value> affectedValues =
         needToRemoveUnreachableBlocks ? code.removeUnreachableBlocks() : ImmutableSet.of();
-    if (!affectedValues.isEmpty()) {
+    boolean anyAffectedValues = !affectedValues.isEmpty();
+    if (anyAffectedValues) {
       new TypeAnalysis(appView).narrowing(affectedValues);
     }
     code.removeRedundantBlocks();
     assert code.isConsistentSSA(appView);
-    return !affectedValues.isEmpty();
+    return create(anyAffectedValues, anySimplifications);
   }
 
   public void rewriteSingleKeySwitchToIf(
@@ -652,19 +707,19 @@
     iterator.replaceCurrentInstruction(replacement);
   }
 
-  private void rewriteIntSwitch(
+  private boolean rewriteIntSwitch(
       IRCode code,
       ListIterator<BasicBlock> blockIterator,
       BasicBlock block,
       InstructionListIterator iterator,
       IntSwitch theSwitch) {
     if (disableSwitchToIfRewritingForClassIdComparisons(theSwitch)) {
-      return;
+      return false;
     }
 
     if (theSwitch.numberOfKeys() == 1) {
       rewriteSingleKeySwitchToIf(code, block, iterator, theSwitch);
-      return;
+      return true;
     }
 
     // If there are more than 1 key, we use the following algorithm to find keys to combine.
@@ -753,7 +808,9 @@
     if (newSwitchesSize + outliersAsIfSize + codeUnitMargin() < currentSize) {
       convertSwitchToSwitchAndIfs(
           code, blockIterator, block, iterator, theSwitch, newSwitchSequences, outliers);
+      return true;
     }
+    return false;
   }
 
   // TODO(b/181732463): We currently disable switch-to-if rewritings for switches on $r8$classId
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/passes/CodeRewriterPass.java b/src/main/java/com/android/tools/r8/ir/conversion/passes/CodeRewriterPass.java
index aba955c..5f1705f 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/passes/CodeRewriterPass.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/passes/CodeRewriterPass.java
@@ -9,6 +9,7 @@
 import com.android.tools.r8.graph.AppInfo;
 import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexItemFactory;
+import com.android.tools.r8.graph.ProgramMethod;
 import com.android.tools.r8.ir.code.IRCode;
 import com.android.tools.r8.ir.conversion.MethodProcessor;
 import com.android.tools.r8.ir.conversion.passes.result.CodeRewriterResult;
@@ -58,6 +59,10 @@
     return CodeRewriterResult.NO_CHANGE;
   }
 
+  protected boolean isDebugMode(ProgramMethod context) {
+    return options.debug || context.getOrComputeReachabilitySensitive(appView);
+  }
+
   protected abstract String getTimingId();
 
   protected CodeRewriterResult rewriteCode(IRCode code) {
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/passes/KnownArrayLengthRewriter.java b/src/main/java/com/android/tools/r8/ir/conversion/passes/KnownArrayLengthRewriter.java
index 291f8b9..05c3702 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/passes/KnownArrayLengthRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/passes/KnownArrayLengthRewriter.java
@@ -34,6 +34,7 @@
 
   @Override
   protected CodeRewriterResult rewriteCode(IRCode code) {
+    boolean hasChanged = false;
     InstructionListIterator iterator = code.instructionListIterator();
     while (iterator.hasNext()) {
       Instruction current = iterator.next();
@@ -63,22 +64,27 @@
         Value size = arrayDefinition.asNewArrayEmpty().size();
         arrayLength.outValue().replaceUsers(size);
         iterator.removeOrReplaceByDebugLocalRead();
+        hasChanged = true;
       } else if (arrayDefinition.isNewArrayFilledData()) {
         long size = arrayDefinition.asNewArrayFilledData().size;
         if (size > Integer.MAX_VALUE) {
           continue;
         }
         iterator.replaceCurrentInstructionWithConstInt(code, (int) size);
+        hasChanged = true;
       } else if (abstractValue.hasKnownArrayLength()) {
         iterator.replaceCurrentInstructionWithConstInt(code, abstractValue.getKnownArrayLength());
+        hasChanged = true;
       } else {
         continue;
       }
 
       phiUsers.forEach(Phi::removeTrivialPhi);
     }
-    code.removeRedundantBlocks();
+    if (hasChanged) {
+      code.removeRedundantBlocks();
+    }
     assert code.isConsistentSSA(appView);
-    return CodeRewriterResult.NONE;
+    return CodeRewriterResult.hasChanged(hasChanged);
   }
 }
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/passes/NaturalIntLoopRemover.java b/src/main/java/com/android/tools/r8/ir/conversion/passes/NaturalIntLoopRemover.java
index 2238b82..96b52dc 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/passes/NaturalIntLoopRemover.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/passes/NaturalIntLoopRemover.java
@@ -58,7 +58,8 @@
 
   @Override
   protected boolean shouldRewriteCode(IRCode code) {
-    return appView.options().enableLoopUnrolling;
+    // This is relevant only if a loop may be present, which implies at least 4 blocks.
+    return appView.options().enableLoopUnrolling && code.getBlocks().size() >= 4;
   }
 
   private boolean isComparisonBlock(BasicBlock comparisonBlockCandidate) {
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/passes/RedundantConstNumberRemover.java b/src/main/java/com/android/tools/r8/ir/conversion/passes/RedundantConstNumberRemover.java
new file mode 100644
index 0000000..70402cc
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/ir/conversion/passes/RedundantConstNumberRemover.java
@@ -0,0 +1,278 @@
+// Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+package com.android.tools.r8.ir.conversion.passes;
+
+import com.android.tools.r8.graph.AppInfo;
+import com.android.tools.r8.graph.AppView;
+import com.android.tools.r8.ir.code.BasicBlock;
+import com.android.tools.r8.ir.code.ConstNumber;
+import com.android.tools.r8.ir.code.DominatorTree;
+import com.android.tools.r8.ir.code.IRCode;
+import com.android.tools.r8.ir.code.If;
+import com.android.tools.r8.ir.code.IfType;
+import com.android.tools.r8.ir.code.Instruction;
+import com.android.tools.r8.ir.code.Value;
+import com.android.tools.r8.ir.conversion.passes.result.CodeRewriterResult;
+import com.android.tools.r8.utils.LazyBox;
+import it.unimi.dsi.fastutil.longs.Long2ReferenceMap;
+import it.unimi.dsi.fastutil.longs.Long2ReferenceOpenHashMap;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.ListIterator;
+
+/**
+ * This optimization exploits that we can sometimes learn the constant value of an SSA value that
+ * flows into an if-eq of if-neq instruction.
+ *
+ * <p>Consider the following example:
+ *
+ * <pre>
+ * 1. if (obj != null) {
+ * 2.  return doStuff();
+ * 3. }
+ * 4. return null;
+ * </pre>
+ *
+ * <p>Since we know that `obj` is null in all blocks that are dominated by the false-target of the
+ * if-instruction in line 1, we can safely replace the null-constant in line 4 by `obj`, and thereby
+ * save a const-number instruction.
+ */
+public class RedundantConstNumberRemover extends CodeRewriterPass<AppInfo> {
+
+  public RedundantConstNumberRemover(AppView<?> appView) {
+    super(appView);
+  }
+
+  @Override
+  protected String getTimingId() {
+    return "RedundantConstNumberRemover";
+  }
+
+  @Override
+  protected boolean shouldRewriteCode(IRCode code) {
+    return options.enableRedundantConstNumberOptimization && code.metadata().mayHaveConstNumber();
+  }
+
+  @Override
+  protected CodeRewriterResult rewriteCode(IRCode code) {
+    redundantConstNumberRemoval(code);
+    return CodeRewriterResult.NONE;
+  }
+
+  public void redundantConstNumberRemoval(IRCode code) {
+    if (appView.options().canHaveDalvikIntUsedAsNonIntPrimitiveTypeBug()
+        && !appView.options().testing.forceRedundantConstNumberRemoval) {
+      // See also b/124152497.
+      return;
+    }
+
+    LazyBox<Long2ReferenceMap<List<ConstNumber>>> constantsByValue =
+        new LazyBox<>(() -> getConstantsByValue(code));
+    LazyBox<DominatorTree> dominatorTree = new LazyBox<>(() -> new DominatorTree(code));
+
+    boolean changed = false;
+    for (BasicBlock block : code.blocks) {
+      Instruction lastInstruction = block.getInstructions().getLast();
+      if (!lastInstruction.isIf()) {
+        continue;
+      }
+
+      If ifInstruction = lastInstruction.asIf();
+      IfType type = ifInstruction.getType();
+
+      Value lhs = ifInstruction.inValues().get(0);
+      Value rhs = !ifInstruction.isZeroTest() ? ifInstruction.inValues().get(1) : null;
+
+      if (!ifInstruction.isZeroTest() && !lhs.isConstNumber() && !rhs.isConstNumber()) {
+        // We can only conclude anything from an if-instruction if it is a zero-test or if one of
+        // the two operands is a constant.
+        continue;
+      }
+
+      // If the type is neither EQ nor NE, we cannot conclude anything about any of the in-values
+      // of the if-instruction from the outcome of the if-instruction.
+      if (type != IfType.EQ && type != IfType.NE) {
+        continue;
+      }
+
+      BasicBlock trueTarget, falseTarget;
+      if (type == IfType.EQ) {
+        trueTarget = ifInstruction.getTrueTarget();
+        falseTarget = ifInstruction.fallthroughBlock();
+      } else {
+        falseTarget = ifInstruction.getTrueTarget();
+        trueTarget = ifInstruction.fallthroughBlock();
+      }
+
+      if (ifInstruction.isZeroTest()) {
+        changed |=
+            replaceDominatedConstNumbers(0, lhs, trueTarget, constantsByValue, code, dominatorTree);
+        if (lhs.knownToBeBoolean()) {
+          changed |=
+              replaceDominatedConstNumbers(
+                  1, lhs, falseTarget, constantsByValue, code, dominatorTree);
+        }
+      } else {
+        assert rhs != null;
+        if (lhs.isConstNumber()) {
+          ConstNumber lhsAsNumber = lhs.getConstInstruction().asConstNumber();
+          changed |=
+              replaceDominatedConstNumbers(
+                  lhsAsNumber.getRawValue(),
+                  rhs,
+                  trueTarget,
+                  constantsByValue,
+                  code,
+                  dominatorTree);
+          if (lhs.knownToBeBoolean() && rhs.knownToBeBoolean()) {
+            changed |=
+                replaceDominatedConstNumbers(
+                    negateBoolean(lhsAsNumber),
+                    rhs,
+                    falseTarget,
+                    constantsByValue,
+                    code,
+                    dominatorTree);
+          }
+        } else {
+          assert rhs.isConstNumber();
+          ConstNumber rhsAsNumber = rhs.getConstInstruction().asConstNumber();
+          changed |=
+              replaceDominatedConstNumbers(
+                  rhsAsNumber.getRawValue(),
+                  lhs,
+                  trueTarget,
+                  constantsByValue,
+                  code,
+                  dominatorTree);
+          if (lhs.knownToBeBoolean() && rhs.knownToBeBoolean()) {
+            changed |=
+                replaceDominatedConstNumbers(
+                    negateBoolean(rhsAsNumber),
+                    lhs,
+                    falseTarget,
+                    constantsByValue,
+                    code,
+                    dominatorTree);
+          }
+        }
+      }
+
+      if (constantsByValue.computeIfAbsent().isEmpty()) {
+        break;
+      }
+    }
+
+    if (changed) {
+      code.removeAllDeadAndTrivialPhis();
+    }
+    assert code.isConsistentSSA(appView);
+  }
+
+  private static Long2ReferenceMap<List<ConstNumber>> getConstantsByValue(IRCode code) {
+    // A map from the raw value of constants in `code` to the const number instructions that define
+    // the given raw value (irrespective of the type of the raw value).
+    Long2ReferenceMap<List<ConstNumber>> constantsByValue = new Long2ReferenceOpenHashMap<>();
+
+    // Initialize `constantsByValue`.
+    for (Instruction instruction : code.instructions()) {
+      if (instruction.isConstNumber()) {
+        ConstNumber constNumber = instruction.asConstNumber();
+        if (constNumber.outValue().hasLocalInfo()) {
+          // Not necessarily constant, because it could be changed in the debugger.
+          continue;
+        }
+        long rawValue = constNumber.getRawValue();
+        if (constantsByValue.containsKey(rawValue)) {
+          constantsByValue.get(rawValue).add(constNumber);
+        } else {
+          List<ConstNumber> list = new ArrayList<>();
+          list.add(constNumber);
+          constantsByValue.put(rawValue, list);
+        }
+      }
+    }
+    return constantsByValue;
+  }
+
+  private static int negateBoolean(ConstNumber number) {
+    assert number.outValue().knownToBeBoolean();
+    return number.getRawValue() == 0 ? 1 : 0;
+  }
+
+  private boolean replaceDominatedConstNumbers(
+      long withValue,
+      Value newValue,
+      BasicBlock dominator,
+      LazyBox<Long2ReferenceMap<List<ConstNumber>>> constantsByValueSupplier,
+      IRCode code,
+      LazyBox<DominatorTree> dominatorTree) {
+    if (newValue.hasLocalInfo()) {
+      // We cannot replace a constant with a value that has local info, because that could change
+      // debugging behavior.
+      return false;
+    }
+
+    Long2ReferenceMap<List<ConstNumber>> constantsByValue =
+        constantsByValueSupplier.computeIfAbsent();
+    List<ConstNumber> constantsWithValue = constantsByValue.get(withValue);
+    if (constantsWithValue == null || constantsWithValue.isEmpty()) {
+      return false;
+    }
+
+    boolean changed = false;
+
+    ListIterator<ConstNumber> constantWithValueIterator = constantsWithValue.listIterator();
+    while (constantWithValueIterator.hasNext()) {
+      ConstNumber constNumber = constantWithValueIterator.next();
+      Value value = constNumber.outValue();
+      assert !value.hasLocalInfo();
+      assert constNumber.getRawValue() == withValue;
+
+      BasicBlock block = constNumber.getBlock();
+
+      // If the following condition does not hold, then the if-instruction does not dominate the
+      // block containing the constant, although the true or false target does.
+      if (block == dominator && block.getPredecessors().size() != 1) {
+        // This should generally not happen, but it is possible to write bytecode where it does.
+        assert false;
+        continue;
+      }
+
+      if (value.knownToBeBoolean() && !newValue.knownToBeBoolean()) {
+        // We cannot replace a boolean by a none-boolean since that can lead to verification
+        // errors. For example, the following code fails with "register v1 has type Imprecise
+        // Constant: 127 but expected Boolean return-1nr".
+        //
+        //   public boolean convertIntToBoolean(int v1) {
+        //       const/4 v0, 0x1
+        //       if-eq v1, v0, :eq_true
+        //       const/4 v1, 0x0
+        //     :eq_true
+        //       return v1
+        //   }
+        continue;
+      }
+
+      if (dominatorTree.computeIfAbsent().dominatedBy(block, dominator)) {
+        if (newValue.getType().lessThanOrEqual(value.getType(), appView)) {
+          value.replaceUsers(newValue);
+          block.listIterator(code, constNumber).removeOrReplaceByDebugLocalRead();
+          constantWithValueIterator.remove();
+          changed = true;
+        } else if (value.getType().isNullType()) {
+          // TODO(b/120257211): Need a mechanism to determine if `newValue` can be used at all of
+          // the use sites of `value` without introducing a type error.
+        }
+      }
+    }
+
+    if (constantsWithValue.isEmpty()) {
+      constantsByValue.remove(withValue);
+    }
+
+    return changed;
+  }
+}
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/passes/SplitBranch.java b/src/main/java/com/android/tools/r8/ir/conversion/passes/SplitBranch.java
index e4bac3e..2defd76 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/passes/SplitBranch.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/passes/SplitBranch.java
@@ -40,7 +40,8 @@
 
   @Override
   protected boolean shouldRewriteCode(IRCode code) {
-    return true;
+    // This is relevant only if there is a diamond followed by an if which is a minimum of 6 blocks.
+    return code.getBlocks().size() >= 6;
   }
 
   /**
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/passes/SwitchCaseEliminator.java b/src/main/java/com/android/tools/r8/ir/conversion/passes/SwitchCaseEliminator.java
index cbda630..4a1a1d4 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/passes/SwitchCaseEliminator.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/passes/SwitchCaseEliminator.java
@@ -45,7 +45,7 @@
         && switchCasesToBeRemoved.size() == theSwitch.numberOfKeys();
   }
 
-  private boolean canBeOptimized() {
+  boolean canBeOptimized() {
     assert switchCasesToBeRemoved == null || !switchCasesToBeRemoved.isEmpty();
     return switchCasesToBeRemoved != null || hasAlwaysHitCase() || !isFallthroughLive();
   }
@@ -96,7 +96,7 @@
     liveFallthrough = false;
   }
 
-  boolean optimize() {
+  void optimize() {
     if (canBeOptimized()) {
       int originalNumberOfSuccessors = block.getSuccessors().size();
       IntList removedSuccessorIndices = unlinkDeadSuccessors();
@@ -107,9 +107,7 @@
         // Replace switch by a new switch where the dead switch cases have been removed.
         replaceSwitchByOptimizedSwitch(originalNumberOfSuccessors, removedSuccessorIndices);
       }
-      return true;
     }
-    return false;
   }
 
   private IntList unlinkDeadSuccessors() {
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/passes/ThrowCatchOptimizer.java b/src/main/java/com/android/tools/r8/ir/conversion/passes/ThrowCatchOptimizer.java
index f34a6bd..fd79613 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/passes/ThrowCatchOptimizer.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/passes/ThrowCatchOptimizer.java
@@ -5,10 +5,10 @@
 package com.android.tools.r8.ir.conversion.passes;
 
 import com.android.tools.r8.errors.Unreachable;
+import com.android.tools.r8.graph.AppInfo;
 import com.android.tools.r8.graph.AppInfoWithClassHierarchy;
 import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexClassAndMethod;
-import com.android.tools.r8.graph.DexItemFactory;
 import com.android.tools.r8.graph.DexMethod;
 import com.android.tools.r8.graph.ProgramMethod;
 import com.android.tools.r8.ir.analysis.type.TypeAnalysis;
@@ -32,6 +32,7 @@
 import com.android.tools.r8.ir.code.Position;
 import com.android.tools.r8.ir.code.Throw;
 import com.android.tools.r8.ir.code.Value;
+import com.android.tools.r8.ir.conversion.passes.result.CodeRewriterResult;
 import com.android.tools.r8.ir.optimize.info.MethodOptimizationInfo;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Sets;
@@ -40,18 +41,34 @@
 import java.util.ListIterator;
 import java.util.Set;
 
-public class ThrowCatchOptimizer {
-
-  private final AppView<?> appView;
-  private final DexItemFactory dexItemFactory;
+public class ThrowCatchOptimizer extends CodeRewriterPass<AppInfo> {
 
   public ThrowCatchOptimizer(AppView<?> appView) {
-    this.appView = appView;
-    this.dexItemFactory = appView.dexItemFactory();
+    super(appView);
+  }
+
+  @Override
+  protected String getTimingId() {
+    return "ThrowCatchOptimizer";
+  }
+
+  @Override
+  protected boolean shouldRewriteCode(IRCode code) {
+    return true;
+  }
+
+  @Override
+  protected CodeRewriterResult rewriteCode(IRCode code) {
+    optimizeAlwaysThrowingInstructions(code);
+    if (!isDebugMode(code.context())) {
+      rewriteThrowNullPointerException(code);
+    }
+    return CodeRewriterResult.NONE;
   }
 
   // Rewrite 'throw new NullPointerException()' to 'throw null'.
-  public void rewriteThrowNullPointerException(IRCode code) {
+  private void rewriteThrowNullPointerException(IRCode code) {
+    boolean hasChanged = false;
     boolean shouldRemoveUnreachableBlocks = false;
     for (BasicBlock block : code.blocks) {
       InstructionListIterator it = block.listIterator(code);
@@ -64,7 +81,7 @@
           if (appView
               .dexItemFactory()
               .objectsMethods
-              .isRequireNonNullMethod(code.method().getReference())) {
+              .isRequireNonNullMethod(code.context().getReference())) {
             continue;
           }
 
@@ -126,6 +143,7 @@
               valueIsNullTarget,
               throwInstruction.getPosition());
           shouldRemoveUnreachableBlocks = true;
+          hasChanged = true;
         }
 
         // Check for 'new-instance NullPointerException' with 2 users, not declaring a local and
@@ -172,6 +190,7 @@
                     // Replace them with 'const 0' and 'throw'.
                     it.add(nullPointer);
                     it.add(throwInstruction);
+                    hasChanged = true;
                   }
                 }
               }
@@ -186,13 +205,16 @@
         new TypeAnalysis(appView).narrowing(affectedValues);
       }
     }
+    if (hasChanged) {
+      code.removeRedundantBlocks();
+    }
     assert code.isConsistentSSA(appView);
   }
 
   // Find all instructions that always throw, split the block after each such instruction and follow
   // it with a block throwing a null value (which should result in NPE). Note that this throw is not
   // expected to be ever reached, but is intended to satisfy verifier.
-  public void optimizeAlwaysThrowingInstructions(IRCode code) {
+  private void optimizeAlwaysThrowingInstructions(IRCode code) {
     Set<Value> affectedValues = Sets.newIdentityHashSet();
     Set<BasicBlock> blocksToRemove = Sets.newIdentityHashSet();
     ListIterator<BasicBlock> blockIterator = code.listIterator();
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/passes/TrivialCheckCastAndInstanceOfRemover.java b/src/main/java/com/android/tools/r8/ir/conversion/passes/TrivialCheckCastAndInstanceOfRemover.java
index 77104d5..a2654cf 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/passes/TrivialCheckCastAndInstanceOfRemover.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/passes/TrivialCheckCastAndInstanceOfRemover.java
@@ -8,7 +8,6 @@
 
 import com.android.tools.r8.contexts.CompilationContext.MethodProcessingContext;
 import com.android.tools.r8.graph.AccessControl;
-import com.android.tools.r8.graph.AppInfo;
 import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexClass;
 import com.android.tools.r8.graph.DexProgramClass;
@@ -36,7 +35,7 @@
 import com.google.common.collect.Sets;
 import java.util.Set;
 
-public class TrivialCheckCastAndInstanceOfRemover extends CodeRewriterPass<AppInfo> {
+public class TrivialCheckCastAndInstanceOfRemover extends CodeRewriterPass<AppInfoWithLiveness> {
 
   public TrivialCheckCastAndInstanceOfRemover(AppView<?> appView) {
     super(appView);
@@ -61,6 +60,7 @@
       MethodProcessingContext methodProcessingContext) {
     assert appView.appInfo().hasLiveness();
     AppView<AppInfoWithLiveness> appViewWithLiveness = appView.withLiveness();
+    boolean hasChanged = false;
 
     // If we can remove a CheckCast it is due to us having at least as much information about the
     // type as the CheckCast gives. We then need to propagate that information to the users of
@@ -99,6 +99,7 @@
                 methodProcessingContext);
         if (removeResult != RemoveCheckCastInstructionIfTrivialResult.NO_REMOVALS) {
           assert removeResult == RemoveCheckCastInstructionIfTrivialResult.REMOVED_CAST_DO_NARROW;
+          hasChanged = true;
           needToRemoveTrivialPhis |= hasPhiUsers;
           typeAnalysis.narrowing(affectedValues);
           affectedValues.clear();
@@ -107,6 +108,7 @@
         boolean hasPhiUsers = current.outValue().hasPhiUsers();
         if (removeInstanceOfInstructionIfTrivial(
             appViewWithLiveness, current.asInstanceOf(), it, code)) {
+          hasChanged = true;
           needToRemoveTrivialPhis |= hasPhiUsers;
         }
       }
@@ -123,9 +125,11 @@
         typeAnalysis.narrowing(affectedValues);
       }
     }
-    code.removeRedundantBlocks();
+    if (hasChanged) {
+      code.removeRedundantBlocks();
+    }
     assert code.isConsistentSSA(appView);
-    return CodeRewriterResult.NONE;
+    return CodeRewriterResult.hasChanged(hasChanged);
   }
 
   enum RemoveCheckCastInstructionIfTrivialResult {
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/passes/result/CodeRewriterResult.java b/src/main/java/com/android/tools/r8/ir/conversion/passes/result/CodeRewriterResult.java
index 68d5c0d..1af288a 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/passes/result/CodeRewriterResult.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/passes/result/CodeRewriterResult.java
@@ -5,6 +5,7 @@
 package com.android.tools.r8.ir.conversion.passes.result;
 
 import com.android.tools.r8.errors.Unreachable;
+import com.android.tools.r8.ir.conversion.passes.BranchSimplifier.ControlFlowSimplificationResult;
 
 public interface CodeRewriterResult {
 
@@ -37,4 +38,8 @@
   }
 
   boolean hasChanged();
+
+  default ControlFlowSimplificationResult asControlFlowSimplificationResult() {
+    throw new Unreachable("Not a control flow simplification result.");
+  }
 }
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/CovariantReturnTypeAnnotationTransformer.java b/src/main/java/com/android/tools/r8/ir/desugar/CovariantReturnTypeAnnotationTransformer.java
index 8ac1b02..3fbcfee 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/CovariantReturnTypeAnnotationTransformer.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/CovariantReturnTypeAnnotationTransformer.java
@@ -24,6 +24,7 @@
 import com.android.tools.r8.graph.MethodAccessFlags;
 import com.android.tools.r8.graph.ProgramMethod;
 import com.android.tools.r8.ir.conversion.IRConverter;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions;
 import com.android.tools.r8.ir.conversion.MethodProcessorEventConsumer;
 import com.android.tools.r8.ir.synthetic.ForwardMethodBuilder;
 import com.google.common.base.Predicates;
@@ -198,7 +199,10 @@
             .build();
     // Optimize to generate DexCode instead of CfCode.
     ProgramMethod programMethod = new ProgramMethod(methodHolder, newVirtualMethod);
-    converter.optimizeSynthesizedMethod(programMethod, methodProcessorEventConsumer);
+    converter.optimizeSynthesizedMethod(
+        programMethod,
+        methodProcessorEventConsumer,
+        MethodConversionOptions.forD8(converter.appView));
     eventConsumer.acceptCovariantReturnTypeBridgeMethod(programMethod, method);
     return newVirtualMethod;
   }
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/records/RecordFieldValuesRewriter.java b/src/main/java/com/android/tools/r8/ir/desugar/records/RecordFieldValuesRewriter.java
index 6646ce0..bd8b0fc 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/records/RecordFieldValuesRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/records/RecordFieldValuesRewriter.java
@@ -21,6 +21,7 @@
 import com.android.tools.r8.ir.code.RecordFieldValues;
 import com.android.tools.r8.ir.code.Value;
 import com.android.tools.r8.ir.conversion.IRConverter;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions;
 import com.android.tools.r8.ir.optimize.info.OptimizationFeedbackIgnore;
 import com.android.tools.r8.shaking.AppInfoWithLiveness;
 import com.android.tools.r8.utils.Timing;
@@ -67,7 +68,11 @@
         programMethod
             .getDefinition()
             .getCode()
-            .buildIR(programMethod, appView, programMethod.getOrigin());
+            .buildIR(
+                programMethod,
+                appView,
+                programMethod.getOrigin(),
+                MethodConversionOptions.forPostLirPhase(appView));
     boolean done = false;
     ListIterator<BasicBlock> blockIterator = irCode.listIterator();
     while (blockIterator.hasNext()) {
@@ -85,7 +90,6 @@
     assert done;
     irConverter.removeDeadCodeAndFinalizeIR(
         irCode, OptimizationFeedbackIgnore.getInstance(), Timing.empty());
-    irConverter.finalizeLirMethodToOutputFormat(programMethod);
   }
 
   public void rewriteRecordFieldArray(
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/CodeRewriter.java b/src/main/java/com/android/tools/r8/ir/optimize/CodeRewriter.java
index e696879..19f053f 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/CodeRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/CodeRewriter.java
@@ -21,11 +21,9 @@
 import com.android.tools.r8.ir.analysis.type.TypeElement;
 import com.android.tools.r8.ir.code.Assume;
 import com.android.tools.r8.ir.code.BasicBlock;
-import com.android.tools.r8.ir.code.ConstNumber;
 import com.android.tools.r8.ir.code.ConstString;
 import com.android.tools.r8.ir.code.DebugLocalWrite;
 import com.android.tools.r8.ir.code.DebugLocalsChange;
-import com.android.tools.r8.ir.code.DominatorTree;
 import com.android.tools.r8.ir.code.IRCode;
 import com.android.tools.r8.ir.code.If;
 import com.android.tools.r8.ir.code.IfType;
@@ -40,7 +38,6 @@
 import com.android.tools.r8.ir.code.StaticGet;
 import com.android.tools.r8.ir.code.Value;
 import com.android.tools.r8.ir.regalloc.LinearScanRegisterAllocator;
-import com.android.tools.r8.utils.LazyBox;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Sets;
 import com.google.common.collect.Streams;
@@ -51,11 +48,7 @@
 import it.unimi.dsi.fastutil.ints.Int2ReferenceOpenHashMap;
 import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
 import it.unimi.dsi.fastutil.ints.IntSet;
-import it.unimi.dsi.fastutil.longs.Long2ReferenceMap;
-import it.unimi.dsi.fastutil.longs.Long2ReferenceOpenHashMap;
-import java.util.ArrayList;
 import java.util.List;
-import java.util.ListIterator;
 import java.util.Set;
 
 public class CodeRewriter {
@@ -210,242 +203,6 @@
   }
 
   /**
-   * This optimization exploits that we can sometimes learn the constant value of an SSA value that
-   * flows into an if-eq of if-neq instruction.
-   *
-   * <p>Consider the following example:
-   *
-   * <pre>
-   * 1. if (obj != null) {
-   * 2.  return doStuff();
-   * 3. }
-   * 4. return null;
-   * </pre>
-   *
-   * <p>Since we know that `obj` is null in all blocks that are dominated by the false-target of the
-   * if-instruction in line 1, we can safely replace the null-constant in line 4 by `obj`, and
-   * thereby save a const-number instruction.
-   */
-  public void redundantConstNumberRemoval(IRCode code) {
-    if (appView.options().canHaveDalvikIntUsedAsNonIntPrimitiveTypeBug()
-        && !appView.options().testing.forceRedundantConstNumberRemoval) {
-      // See also b/124152497.
-      return;
-    }
-
-    if (!code.metadata().mayHaveConstNumber()) {
-      return;
-    }
-
-    LazyBox<Long2ReferenceMap<List<ConstNumber>>> constantsByValue =
-        new LazyBox<>(() -> getConstantsByValue(code));
-    LazyBox<DominatorTree> dominatorTree = new LazyBox<>(() -> new DominatorTree(code));
-
-    boolean changed = false;
-    for (BasicBlock block : code.blocks) {
-      Instruction lastInstruction = block.getInstructions().getLast();
-      if (!lastInstruction.isIf()) {
-        continue;
-      }
-
-      If ifInstruction = lastInstruction.asIf();
-      IfType type = ifInstruction.getType();
-
-      Value lhs = ifInstruction.inValues().get(0);
-      Value rhs = !ifInstruction.isZeroTest() ? ifInstruction.inValues().get(1) : null;
-
-      if (!ifInstruction.isZeroTest() && !lhs.isConstNumber() && !rhs.isConstNumber()) {
-        // We can only conclude anything from an if-instruction if it is a zero-test or if one of
-        // the two operands is a constant.
-        continue;
-      }
-
-      // If the type is neither EQ nor NE, we cannot conclude anything about any of the in-values
-      // of the if-instruction from the outcome of the if-instruction.
-      if (type != IfType.EQ && type != IfType.NE) {
-        continue;
-      }
-
-      BasicBlock trueTarget, falseTarget;
-      if (type == IfType.EQ) {
-        trueTarget = ifInstruction.getTrueTarget();
-        falseTarget = ifInstruction.fallthroughBlock();
-      } else {
-        falseTarget = ifInstruction.getTrueTarget();
-        trueTarget = ifInstruction.fallthroughBlock();
-      }
-
-      if (ifInstruction.isZeroTest()) {
-        changed |=
-            replaceDominatedConstNumbers(0, lhs, trueTarget, constantsByValue, code, dominatorTree);
-        if (lhs.knownToBeBoolean()) {
-          changed |=
-              replaceDominatedConstNumbers(
-                  1, lhs, falseTarget, constantsByValue, code, dominatorTree);
-        }
-      } else {
-        assert rhs != null;
-        if (lhs.isConstNumber()) {
-          ConstNumber lhsAsNumber = lhs.getConstInstruction().asConstNumber();
-          changed |=
-              replaceDominatedConstNumbers(
-                  lhsAsNumber.getRawValue(),
-                  rhs,
-                  trueTarget,
-                  constantsByValue,
-                  code,
-                  dominatorTree);
-          if (lhs.knownToBeBoolean() && rhs.knownToBeBoolean()) {
-            changed |=
-                replaceDominatedConstNumbers(
-                    negateBoolean(lhsAsNumber),
-                    rhs,
-                    falseTarget,
-                    constantsByValue,
-                    code,
-                    dominatorTree);
-          }
-        } else {
-          assert rhs.isConstNumber();
-          ConstNumber rhsAsNumber = rhs.getConstInstruction().asConstNumber();
-          changed |=
-              replaceDominatedConstNumbers(
-                  rhsAsNumber.getRawValue(),
-                  lhs,
-                  trueTarget,
-                  constantsByValue,
-                  code,
-                  dominatorTree);
-          if (lhs.knownToBeBoolean() && rhs.knownToBeBoolean()) {
-            changed |=
-                replaceDominatedConstNumbers(
-                    negateBoolean(rhsAsNumber),
-                    lhs,
-                    falseTarget,
-                    constantsByValue,
-                    code,
-                    dominatorTree);
-          }
-        }
-      }
-
-      if (constantsByValue.computeIfAbsent().isEmpty()) {
-        break;
-      }
-    }
-
-    if (changed) {
-      code.removeAllDeadAndTrivialPhis();
-    }
-    assert code.isConsistentSSA(appView);
-  }
-
-  private static Long2ReferenceMap<List<ConstNumber>> getConstantsByValue(IRCode code) {
-    // A map from the raw value of constants in `code` to the const number instructions that define
-    // the given raw value (irrespective of the type of the raw value).
-    Long2ReferenceMap<List<ConstNumber>> constantsByValue = new Long2ReferenceOpenHashMap<>();
-
-    // Initialize `constantsByValue`.
-    for (Instruction instruction : code.instructions()) {
-      if (instruction.isConstNumber()) {
-        ConstNumber constNumber = instruction.asConstNumber();
-        if (constNumber.outValue().hasLocalInfo()) {
-          // Not necessarily constant, because it could be changed in the debugger.
-          continue;
-        }
-        long rawValue = constNumber.getRawValue();
-        if (constantsByValue.containsKey(rawValue)) {
-          constantsByValue.get(rawValue).add(constNumber);
-        } else {
-          List<ConstNumber> list = new ArrayList<>();
-          list.add(constNumber);
-          constantsByValue.put(rawValue, list);
-        }
-      }
-    }
-    return constantsByValue;
-  }
-
-  private static int negateBoolean(ConstNumber number) {
-    assert number.outValue().knownToBeBoolean();
-    return number.getRawValue() == 0 ? 1 : 0;
-  }
-
-  private boolean replaceDominatedConstNumbers(
-      long withValue,
-      Value newValue,
-      BasicBlock dominator,
-      LazyBox<Long2ReferenceMap<List<ConstNumber>>> constantsByValueSupplier,
-      IRCode code,
-      LazyBox<DominatorTree> dominatorTree) {
-    if (newValue.hasLocalInfo()) {
-      // We cannot replace a constant with a value that has local info, because that could change
-      // debugging behavior.
-      return false;
-    }
-
-    Long2ReferenceMap<List<ConstNumber>> constantsByValue =
-        constantsByValueSupplier.computeIfAbsent();
-    List<ConstNumber> constantsWithValue = constantsByValue.get(withValue);
-    if (constantsWithValue == null || constantsWithValue.isEmpty()) {
-      return false;
-    }
-
-    boolean changed = false;
-
-    ListIterator<ConstNumber> constantWithValueIterator = constantsWithValue.listIterator();
-    while (constantWithValueIterator.hasNext()) {
-      ConstNumber constNumber = constantWithValueIterator.next();
-      Value value = constNumber.outValue();
-      assert !value.hasLocalInfo();
-      assert constNumber.getRawValue() == withValue;
-
-      BasicBlock block = constNumber.getBlock();
-
-      // If the following condition does not hold, then the if-instruction does not dominate the
-      // block containing the constant, although the true or false target does.
-      if (block == dominator && block.getPredecessors().size() != 1) {
-        // This should generally not happen, but it is possible to write bytecode where it does.
-        assert false;
-        continue;
-      }
-
-      if (value.knownToBeBoolean() && !newValue.knownToBeBoolean()) {
-        // We cannot replace a boolean by a none-boolean since that can lead to verification
-        // errors. For example, the following code fails with "register v1 has type Imprecise
-        // Constant: 127 but expected Boolean return-1nr".
-        //
-        //   public boolean convertIntToBoolean(int v1) {
-        //       const/4 v0, 0x1
-        //       if-eq v1, v0, :eq_true
-        //       const/4 v1, 0x0
-        //     :eq_true
-        //       return v1
-        //   }
-        continue;
-      }
-
-      if (dominatorTree.computeIfAbsent().dominatedBy(block, dominator)) {
-        if (newValue.getType().lessThanOrEqual(value.getType(), appView)) {
-          value.replaceUsers(newValue);
-          block.listIterator(code, constNumber).removeOrReplaceByDebugLocalRead();
-          constantWithValueIterator.remove();
-          changed = true;
-        } else if (value.getType().isNullType()) {
-          // TODO(b/120257211): Need a mechanism to determine if `newValue` can be used at all of
-          // the use sites of `value` without introducing a type error.
-        }
-      }
-    }
-
-    if (constantsWithValue.isEmpty()) {
-      constantsByValue.remove(withValue);
-    }
-
-    return changed;
-  }
-
-  /**
    * Remove moves that are not actually used by instructions in exiting paths. These moves can arise
    * due to debug local info needing a particular value and the live-interval for it then moves it
    * back into the properly assigned register. If the register is only used for debug purposes, it
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/DeadCodeRemover.java b/src/main/java/com/android/tools/r8/ir/optimize/DeadCodeRemover.java
index e9b180c..b41131a 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/DeadCodeRemover.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/DeadCodeRemover.java
@@ -60,11 +60,15 @@
         removeDeadInstructions(worklist, code, block, valueIsDeadAnalysis);
         removeDeadPhis(worklist, block, valueIsDeadAnalysis);
       }
-    } while (branchSimplifier.simplifyIf(code).anySimplifications()
+    } while (branchSimplifier
+            .simplifyIf(code)
+            .asControlFlowSimplificationResult()
+            .anySimplifications()
         || removeUnneededCatchHandlers(code));
 
     code.removeRedundantBlocks();
     assert code.isConsistentSSA(appView);
+    assert verifyNoDeadCode(code);
 
     timing.end();
   }
@@ -140,6 +144,7 @@
           CheckCast checkCast = current.asCheckCast();
           if (!checkCast.isRefiningStaticType(appView.options())
               && checkCast.outValue().getLocalInfo() == checkCast.object().getLocalInfo()) {
+            updateWorklistWithNonDebugUses(worklist, checkCast);
             checkCast.outValue().replaceUsers(checkCast.object());
             checkCast.object().uniquePhiUsers().forEach(Phi::removeTrivialPhi);
           }
@@ -196,6 +201,16 @@
     }
   }
 
+  private static void updateWorklistWithNonDebugUses(
+      Queue<BasicBlock> worklist, CheckCast checkCast) {
+    for (Instruction user : checkCast.outValue().uniqueUsers()) {
+      worklist.add(user.getBlock());
+    }
+    for (Phi user : checkCast.outValue().uniquePhiUsers()) {
+      worklist.add(user.getBlock());
+    }
+  }
+
   private boolean removeUnneededCatchHandlers(IRCode code) {
     boolean mayHaveIntroducedUnreachableBlocks = false;
     for (BasicBlock block : code.blocks) {
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/RedundantFieldLoadAndStoreElimination.java b/src/main/java/com/android/tools/r8/ir/optimize/RedundantFieldLoadAndStoreElimination.java
index 1ea3e94..5b45fd5 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/RedundantFieldLoadAndStoreElimination.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/RedundantFieldLoadAndStoreElimination.java
@@ -8,6 +8,7 @@
 import static com.android.tools.r8.utils.PredicateUtils.not;
 
 import com.android.tools.r8.errors.Unreachable;
+import com.android.tools.r8.graph.AppInfo;
 import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexClassAndField;
 import com.android.tools.r8.graph.DexClassAndMethod;
@@ -41,6 +42,8 @@
 import com.android.tools.r8.ir.code.StaticGet;
 import com.android.tools.r8.ir.code.StaticPut;
 import com.android.tools.r8.ir.code.Value;
+import com.android.tools.r8.ir.conversion.passes.CodeRewriterPass;
+import com.android.tools.r8.ir.conversion.passes.result.CodeRewriterResult;
 import com.android.tools.r8.ir.optimize.info.field.InstanceFieldInitializationInfoCollection;
 import com.android.tools.r8.ir.optimize.info.initializer.InstanceInitializerInfo;
 import com.android.tools.r8.shaking.AppInfoWithLiveness;
@@ -63,12 +66,11 @@
  * <p>Simple algorithm that goes through all blocks in one pass in topological order and propagates
  * active field sets across control-flow edges where the target has only one predecessor.
  */
-public class RedundantFieldLoadAndStoreElimination {
+public class RedundantFieldLoadAndStoreElimination extends CodeRewriterPass<AppInfo> {
 
   private static final int MAX_CAPACITY = 10000;
   private static final int MIN_CAPACITY_PER_BLOCK = 50;
 
-  private final AppView<?> appView;
   private final ProgramMethod method;
   private final IRCode code;
   private final int maxCapacityPerBlock;
@@ -87,20 +89,32 @@
   private final Map<BasicBlock, Set<Instruction>> instructionsToRemove = new IdentityHashMap<>();
 
   public RedundantFieldLoadAndStoreElimination(AppView<?> appView, IRCode code) {
-    this.appView = appView;
+    super(appView);
     this.method = code.context();
     this.code = code;
     this.maxCapacityPerBlock = Math.max(MIN_CAPACITY_PER_BLOCK, MAX_CAPACITY / code.blocks.size());
     this.release = !appView.options().debug;
   }
 
-  public static boolean shouldRun(AppView<?> appView, IRCode code) {
+  @Override
+  protected String getTimingId() {
+    return "RedundantFieldLoadAndStoreElimination";
+  }
+
+  @Override
+  protected boolean shouldRewriteCode(IRCode code) {
     return appView.options().enableRedundantFieldLoadElimination
         && (code.metadata().mayHaveArrayGet()
             || code.metadata().mayHaveFieldInstruction()
             || code.metadata().mayHaveInitClass());
   }
 
+  @Override
+  protected CodeRewriterResult rewriteCode(IRCode code) {
+    run();
+    return CodeRewriterResult.NONE;
+  }
+
   private interface FieldValue {
 
     default ExistingValue asExistingValue() {
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/RuntimeWorkaroundCodeRewriter.java b/src/main/java/com/android/tools/r8/ir/optimize/RuntimeWorkaroundCodeRewriter.java
index 02e3b25..9ae8565 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/RuntimeWorkaroundCodeRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/RuntimeWorkaroundCodeRewriter.java
@@ -16,6 +16,7 @@
 import com.android.tools.r8.ir.code.AlwaysMaterializingUser;
 import com.android.tools.r8.ir.code.BasicBlock;
 import com.android.tools.r8.ir.code.IRCode;
+import com.android.tools.r8.ir.code.InstanceOf;
 import com.android.tools.r8.ir.code.Instruction;
 import com.android.tools.r8.ir.code.InstructionListIterator;
 import com.android.tools.r8.ir.code.IntSwitch;
@@ -70,6 +71,23 @@
     }
   }
 
+  public static boolean workaroundInstanceOfTypeWeakeningInVerifier(
+      AppView<?> appView, IRCode code) {
+    boolean didReplaceInstructions = false;
+    for (BasicBlock block : code.getBlocks()) {
+      InstructionListIterator instructionIterator = block.listIterator(code);
+      while (instructionIterator.hasNext()) {
+        InstanceOf instanceOf = instructionIterator.nextUntil(Instruction::isInstanceOf);
+        if (instanceOf != null && instanceOf.value().getType().isNullType()) {
+          instructionIterator.replaceCurrentInstructionWithConstFalse(code);
+          didReplaceInstructions = true;
+        }
+      }
+    }
+    assert code.isConsistentSSA(appView);
+    return didReplaceInstructions;
+  }
+
   public static void workaroundSwitchMaxIntBug(IRCode code, AppView<?> appView) {
     if (appView.options().canHaveSwitchMaxIntBug() && code.metadata().mayHaveSwitch()) {
       // Always rewrite for workaround switch bug.
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/SwitchMapCollector.java b/src/main/java/com/android/tools/r8/ir/optimize/SwitchMapCollector.java
index a40fca9..cdb30da 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/SwitchMapCollector.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/SwitchMapCollector.java
@@ -15,6 +15,7 @@
 import com.android.tools.r8.ir.code.Instruction;
 import com.android.tools.r8.ir.code.InvokeVirtual;
 import com.android.tools.r8.ir.code.Value;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions;
 import com.android.tools.r8.shaking.AppInfoWithLiveness;
 import it.unimi.dsi.fastutil.ints.Int2ReferenceArrayMap;
 import it.unimi.dsi.fastutil.ints.Int2ReferenceMap;
@@ -94,7 +95,10 @@
     List<DexEncodedField> switchMapFields = clazz.staticFields().stream()
         .filter(this::maybeIsSwitchMap).collect(Collectors.toList());
     if (!switchMapFields.isEmpty()) {
-      IRCode initializer = clazz.getProgramClassInitializer().buildIR(appView);
+      IRCode initializer =
+          clazz
+              .getProgramClassInitializer()
+              .buildIR(appView, MethodConversionOptions.nonConverting());
       switchMapFields.forEach(field -> extractSwitchMap(field, initializer));
     }
   }
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/classinliner/ClassInliner.java b/src/main/java/com/android/tools/r8/ir/optimize/classinliner/ClassInliner.java
index d3d2a08..19b2d81 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/classinliner/ClassInliner.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/classinliner/ClassInliner.java
@@ -25,7 +25,6 @@
 import com.android.tools.r8.ir.optimize.Inliner;
 import com.android.tools.r8.ir.optimize.InliningOracle;
 import com.android.tools.r8.ir.optimize.classinliner.InlineCandidateProcessor.IllegalClassInlinerStateException;
-import com.android.tools.r8.ir.optimize.enums.EnumValueOptimizer;
 import com.android.tools.r8.ir.optimize.info.OptimizationFeedback;
 import com.android.tools.r8.ir.optimize.inliner.InliningIRProvider;
 import com.android.tools.r8.ir.optimize.string.StringOptimizer;
@@ -129,7 +128,6 @@
   public final void processMethodCode(
       AppView<AppInfoWithLiveness> appView,
       StringOptimizer stringOptimizer,
-      EnumValueOptimizer enumValueOptimizer,
       ProgramMethod method,
       IRCode code,
       OptimizationFeedback feedback,
@@ -242,7 +240,7 @@
       appView.withGeneratedMessageLiteBuilderShrinker(
           shrinker ->
               shrinker.inlineCallsToDynamicMethod(
-                  method, code, enumValueOptimizer, feedback, methodProcessor, inliner));
+                  method, code, feedback, methodProcessor, inliner));
     }
 
     if (anyInlinedMethods) {
@@ -252,7 +250,7 @@
       new TrivialCheckCastAndInstanceOfRemover(appView)
           .run(code, methodProcessor, methodProcessingContext, Timing.empty());
       // If a method was inlined we may be able to prune additional branches.
-      new BranchSimplifier(appView).simplifyBranches(code);
+      new BranchSimplifier(appView).run(code, Timing.empty());
       // If a method was inlined we may see more trivial computation/conversion of String.
       boolean isDebugMode =
           appView.options().debug || method.getOrComputeReachabilitySensitive(appView);
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxerImpl.java b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxerImpl.java
index 115ab23..7f34299 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxerImpl.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxerImpl.java
@@ -319,9 +319,12 @@
         enumUnboxingCandidatesInfo.addMethodDependency(eligibleEnum, code.context());
       }
     }
-    if (methodsDependingOnLibraryModelisation.contains(code.context(), appView.graphLens())) {
-      code.mutateConversionOptions(
-          conversionOptions -> conversionOptions.disablePeepholeOptimizations(methodProcessor));
+    // TODO(b/225838009): Remove this when always using LIR.
+    if (!appView.testing().canUseLir(appView)) {
+      if (methodsDependingOnLibraryModelisation.contains(code.context(), appView.graphLens())) {
+        code.mutateConversionOptions(
+            conversionOptions -> conversionOptions.disablePeepholeOptimizations(methodProcessor));
+      }
     }
   }
 
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingRewriter.java b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingRewriter.java
index fa88164..867c2dc 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingRewriter.java
@@ -387,11 +387,15 @@
             Value rewrittenOutValue =
                 code.createValue(
                     TypeElement.fromDexType(fieldMethod.getReturnType(), maybeNull(), appView));
+            Value in = instanceGet.object();
+            if (in.getType().isNullType()) {
+              iterator.previous();
+              in = iterator.insertConstIntInstruction(code, options, 0);
+              iterator.next();
+            }
             InvokeStatic invoke =
                 new InvokeStatic(
-                    fieldMethod.getReference(),
-                    rewrittenOutValue,
-                    ImmutableList.of(instanceGet.object()));
+                    fieldMethod.getReference(), rewrittenOutValue, ImmutableList.of(in));
             iterator.replaceCurrentInstruction(invoke);
             if (unboxedEnumsData.isUnboxedEnum(instanceGet.getField().type)) {
               convertedEnums.put(invoke, instanceGet.getField().type);
@@ -529,6 +533,8 @@
       if (invokedMethod == factory.javaLangSystemMembers.arraycopy) {
         // Intentionally empty.
       } else if (invokedMethod == factory.javaLangSystemMembers.identityHashCode) {
+        // Note that System.identityHashCode(null) == 0, so it works even if the input is null
+        // and not rewritten.
         assert invoke.arguments().size() == 1;
         Value argument = invoke.getFirstArgument();
         DexType enumType = getEnumClassTypeOrNull(argument, convertedEnums);
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingTreeFixer.java b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingTreeFixer.java
index eaa1d40..a0d4d36 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingTreeFixer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingTreeFixer.java
@@ -50,6 +50,7 @@
 import com.android.tools.r8.ir.conversion.ExtraParameter;
 import com.android.tools.r8.ir.conversion.ExtraUnusedNullParameter;
 import com.android.tools.r8.ir.conversion.IRConverter;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions;
 import com.android.tools.r8.ir.conversion.MethodProcessorEventConsumer;
 import com.android.tools.r8.ir.conversion.OneTimeMethodProcessor;
 import com.android.tools.r8.ir.optimize.enums.EnumDataMap.EnumData;
@@ -283,7 +284,11 @@
     methodProcessor.forEachWaveWithExtension(
         (method, methodProcessingContext) ->
             converter.processDesugaredMethod(
-                method, OptimizationFeedback.getSimple(), methodProcessor, methodProcessingContext),
+                method,
+                OptimizationFeedback.getSimple(),
+                methodProcessor,
+                methodProcessingContext,
+                MethodConversionOptions.forLirPhase(appView)),
         executorService);
 
     return checkNotNullToCheckNotZeroMapping;
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingUtilityClasses.java b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingUtilityClasses.java
index fc83f40..fe3de2f 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingUtilityClasses.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingUtilityClasses.java
@@ -9,6 +9,7 @@
 import com.android.tools.r8.graph.DexProgramClass;
 import com.android.tools.r8.graph.DexType;
 import com.android.tools.r8.ir.conversion.IRConverter;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions;
 import com.android.tools.r8.ir.conversion.MethodProcessorEventConsumer;
 import com.android.tools.r8.ir.conversion.OneTimeMethodProcessor;
 import com.android.tools.r8.ir.optimize.enums.EnumDataMap.EnumData;
@@ -111,7 +112,8 @@
                   method,
                   OptimizationFeedbackSimple.getInstance(),
                   methodProcessor,
-                  methodProcessingContext),
+                  methodProcessingContext,
+                  MethodConversionOptions.forLirPhase(appView)),
           executorService);
       return utilityClasses;
     }
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumValueOptimizer.java b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumValueOptimizer.java
index 46ed560..c88b48d 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumValueOptimizer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumValueOptimizer.java
@@ -25,7 +25,6 @@
 import com.android.tools.r8.ir.code.ConstNumber;
 import com.android.tools.r8.ir.code.ConstString;
 import com.android.tools.r8.ir.code.IRCode;
-import com.android.tools.r8.ir.code.IRMetadata;
 import com.android.tools.r8.ir.code.Instruction;
 import com.android.tools.r8.ir.code.InstructionListIterator;
 import com.android.tools.r8.ir.code.IntSwitch;
@@ -51,7 +50,7 @@
 
 public class EnumValueOptimizer extends CodeRewriterPass<AppInfoWithLiveness> {
 
-  public EnumValueOptimizer(AppView<AppInfoWithLiveness> appView) {
+  public EnumValueOptimizer(AppView<?> appView) {
     super(appView);
   }
 
@@ -62,22 +61,8 @@
 
   @Override
   protected CodeRewriterResult rewriteCode(IRCode code) {
-    rewriteConstantEnumMethodCalls(code);
-    return CodeRewriterResult.NONE;
-  }
-
-  @Override
-  protected boolean shouldRewriteCode(IRCode code) {
-    return code.metadata().mayHaveInvokeMethodWithReceiver();
-  }
-
-  @SuppressWarnings("ConstantConditions")
-  private void rewriteConstantEnumMethodCalls(IRCode code) {
-    IRMetadata metadata = code.metadata();
-    if (!metadata.mayHaveInvokeMethodWithReceiver()) {
-      return;
-    }
-
+    assert appView.enableWholeProgramOptimizations();
+    boolean hasChanged = false;
     Set<Value> affectedValues = Sets.newIdentityHashSet();
     InstructionListIterator iterator = code.instructionListIterator();
     while (iterator.hasNext()) {
@@ -128,6 +113,7 @@
               && !isToStringInvoke) {
             assert isNameInvoke || isOrdinalInvoke;
             iterator.removeOrReplaceByDebugLocalRead();
+            hasChanged = true;
           }
           continue;
         }
@@ -138,6 +124,7 @@
               getOrdinalValue(code, abstractValue, methodWithReceiver.getReceiver().isNeverNull());
           if (ordinalValue != null) {
             iterator.replaceCurrentInstruction(new ConstNumber(outValue, ordinalValue.getValue()));
+            hasChanged = true;
           }
           continue;
         }
@@ -149,10 +136,8 @@
         }
 
         if (isNameInvoke) {
-          Value newValue =
-              code.createValue(TypeElement.stringClassType(appView, definitelyNotNull()));
-          iterator.replaceCurrentInstruction(new ConstString(newValue, nameValue.getDexString()));
-          newValue.addAffectedValuesTo(affectedValues);
+          replaceByName(code, affectedValues, iterator, nameValue);
+          hasChanged = true;
           continue;
         }
 
@@ -182,16 +167,33 @@
           continue;
         }
 
-        Value newValue =
-            code.createValue(TypeElement.stringClassType(appView, definitelyNotNull()));
-        iterator.replaceCurrentInstruction(new ConstString(newValue, nameValue.getDexString()));
-        newValue.addAffectedValuesTo(affectedValues);
+        replaceByName(code, affectedValues, iterator, nameValue);
+        hasChanged = true;
       }
     }
     if (!affectedValues.isEmpty()) {
       new TypeAnalysis(appView).narrowing(affectedValues);
     }
     assert code.isConsistentSSA(appView);
+    return CodeRewriterResult.hasChanged(hasChanged);
+  }
+
+  private void replaceByName(
+      IRCode code,
+      Set<Value> affectedValues,
+      InstructionListIterator iterator,
+      SingleStringValue nameValue) {
+    Value newValue = code.createValue(TypeElement.stringClassType(appView, definitelyNotNull()));
+    iterator.replaceCurrentInstruction(new ConstString(newValue, nameValue.getDexString()));
+    newValue.addAffectedValuesTo(affectedValues);
+  }
+
+  @Override
+  protected boolean shouldRewriteCode(IRCode code) {
+    if (!options.enableEnumValueOptimization || !appView.hasLiveness()) {
+      return false;
+    }
+    return code.metadata().mayHaveInvokeMethodWithReceiver();
   }
 
   /**
@@ -215,6 +217,10 @@
    * </blockquote>
    */
   public void removeSwitchMaps(IRCode code) {
+    if (!options.enableEnumValueOptimization || !appView.hasLiveness()) {
+      return;
+    }
+    assert appView.enableWholeProgramOptimizations();
     Set<Value> affectedValues = Sets.newIdentityHashSet();
     boolean mayHaveIntroducedUnreachableBlocks = false;
     for (BasicBlock block : code.blocks) {
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/outliner/OutlinerImpl.java b/src/main/java/com/android/tools/r8/ir/optimize/outliner/OutlinerImpl.java
index 1cedcc3..45f03bc 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/outliner/OutlinerImpl.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/outliner/OutlinerImpl.java
@@ -59,6 +59,7 @@
 import com.android.tools.r8.ir.code.ValueTypeConstraint;
 import com.android.tools.r8.ir.conversion.IRBuilder;
 import com.android.tools.r8.ir.conversion.IRConverter;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions;
 import com.android.tools.r8.ir.conversion.MethodConversionOptions.MutableMethodConversionOptions;
 import com.android.tools.r8.ir.conversion.MethodProcessorEventConsumer;
 import com.android.tools.r8.ir.conversion.SourceCode;
@@ -1360,7 +1361,10 @@
       MethodProcessorEventConsumer methodProcessorEventConsumer =
           MethodProcessorEventConsumer.empty();
       converter.optimizeSynthesizedMethods(
-          outlineMethods, methodProcessorEventConsumer, executorService);
+          outlineMethods,
+          methodProcessorEventConsumer,
+          MethodConversionOptions.forLirPhase(appView),
+          executorService);
       feedback.updateVisibleOptimizationInfo();
       forEachSelectedOutliningMethod(
           converter,
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/string/StringBuilderAppendOptimizer.java b/src/main/java/com/android/tools/r8/ir/optimize/string/StringBuilderAppendOptimizer.java
index 2ff8ec9..5ed16f7 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/string/StringBuilderAppendOptimizer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/string/StringBuilderAppendOptimizer.java
@@ -95,8 +95,10 @@
 
   @Override
   protected boolean shouldRewriteCode(IRCode code) {
-    return code.metadata().mayHaveNewInstance()
-        || code.metadata().mayHaveInvokeMethodWithReceiver();
+    return options.enableStringConcatenationOptimization
+        && !isDebugMode(code.context())
+        && (code.metadata().mayHaveNewInstance()
+            || code.metadata().mayHaveInvokeMethodWithReceiver());
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/ir/synthetic/AbstractSynthesizedCode.java b/src/main/java/com/android/tools/r8/ir/synthetic/AbstractSynthesizedCode.java
index 2200050..f726dda 100644
--- a/src/main/java/com/android/tools/r8/ir/synthetic/AbstractSynthesizedCode.java
+++ b/src/main/java/com/android/tools/r8/ir/synthetic/AbstractSynthesizedCode.java
@@ -18,8 +18,8 @@
 import com.android.tools.r8.ir.code.NumberGenerator;
 import com.android.tools.r8.ir.code.Position;
 import com.android.tools.r8.ir.conversion.IRBuilder;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions;
 import com.android.tools.r8.ir.conversion.MethodConversionOptions.MutableMethodConversionOptions;
-import com.android.tools.r8.ir.conversion.MethodConversionOptions.ThrowingMethodConversionOptions;
 import com.android.tools.r8.ir.conversion.SourceCode;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.utils.RetracerForCodePrinting;
@@ -68,7 +68,7 @@
             origin,
             valueNumberGenerator,
             protoChanges)
-        .build(context, new ThrowingMethodConversionOptions(appView.options()));
+        .build(context, MethodConversionOptions.nonConverting());
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/lightir/Lir2IRConverter.java b/src/main/java/com/android/tools/r8/lightir/Lir2IRConverter.java
index f455dda..079b862 100644
--- a/src/main/java/com/android/tools/r8/lightir/Lir2IRConverter.java
+++ b/src/main/java/com/android/tools/r8/lightir/Lir2IRConverter.java
@@ -128,7 +128,8 @@
       AppView<?> appView,
       Position callerPosition,
       RewrittenPrototypeDescription protoChanges,
-      DexMethod originalMethod) {
+      DexMethod originalMethod,
+      MutableMethodConversionOptions conversionOptions) {
     Parser<EV> parser =
         new Parser<>(
             lirCode,
@@ -141,7 +142,7 @@
     parser.parseArguments(method);
     parser.ensureDebugInfo();
     lirCode.forEach(view -> view.accept(parser));
-    IRCode irCode = parser.getIRCode(method);
+    IRCode irCode = parser.getIRCode(method, conversionOptions);
     // Some instructions have bottom types (e.g., phis). Compute their actual types by widening.
     new TypeAnalysis(appView).widening(irCode);
     return irCode;
@@ -338,7 +339,8 @@
 
     // TODO(b/270398965): Replace LinkedList.
     @SuppressWarnings("JdkObsolete")
-    public IRCode getIRCode(ProgramMethod method) {
+    public IRCode getIRCode(
+        ProgramMethod method, MutableMethodConversionOptions conversionOptions) {
       LinkedList<BasicBlock> blockList = new LinkedList<>();
       IntList blockIndices = new IntArrayList(blocks.keySet());
       blockIndices.sort(Integer::compare);
@@ -364,7 +366,7 @@
           basicBlockNumberGenerator,
           code.getMetadataForIR(),
           method.getOrigin(),
-          new MutableMethodConversionOptions(appView.options()));
+          conversionOptions);
     }
 
     public BasicBlock getBasicBlock(int instructionIndex) {
diff --git a/src/main/java/com/android/tools/r8/lightir/LirCode.java b/src/main/java/com/android/tools/r8/lightir/LirCode.java
index d1a7149..0fccf4e 100644
--- a/src/main/java/com/android/tools/r8/lightir/LirCode.java
+++ b/src/main/java/com/android/tools/r8/lightir/LirCode.java
@@ -28,6 +28,7 @@
 import com.android.tools.r8.ir.code.NumberGenerator;
 import com.android.tools.r8.ir.code.Position;
 import com.android.tools.r8.ir.code.Position.SourcePosition;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions;
 import com.android.tools.r8.ir.conversion.MethodConversionOptions.MutableMethodConversionOptions;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.utils.InternalOptions;
@@ -282,7 +283,8 @@
       MutableMethodConversionOptions conversionOptions) {
     RewrittenPrototypeDescription protoChanges =
         appView.graphLens().lookupPrototypeChangesForMethodDefinition(method.getReference());
-    return internalBuildIR(method, appView, new NumberGenerator(), null, protoChanges);
+    return internalBuildIR(
+        method, appView, new NumberGenerator(), null, protoChanges, conversionOptions);
   }
 
   @Override
@@ -298,7 +300,13 @@
     assert valueNumberGenerator != null;
     assert callerPosition != null;
     assert protoChanges != null;
-    return internalBuildIR(method, appView, valueNumberGenerator, callerPosition, protoChanges);
+    return internalBuildIR(
+        method,
+        appView,
+        valueNumberGenerator,
+        callerPosition,
+        protoChanges,
+        MethodConversionOptions.nonConverting());
   }
 
   private IRCode internalBuildIR(
@@ -306,7 +314,8 @@
       AppView<?> appView,
       NumberGenerator valueNumberGenerator,
       Position callerPosition,
-      RewrittenPrototypeDescription protoChanges) {
+      RewrittenPrototypeDescription protoChanges,
+      MutableMethodConversionOptions conversionOptions) {
     LirCode<Integer> typedLir = asLirCode();
     return Lir2IRConverter.translate(
         method,
@@ -315,7 +324,8 @@
         appView,
         callerPosition,
         protoChanges,
-        appView.graphLens().getOriginalMethodSignature(method.getReference()));
+        appView.graphLens().getOriginalMethodSignature(method.getReference()),
+        conversionOptions);
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/naming/ComposingBuilder.java b/src/main/java/com/android/tools/r8/naming/ComposingBuilder.java
index d0d89a8..04e7817 100644
--- a/src/main/java/com/android/tools/r8/naming/ComposingBuilder.java
+++ b/src/main/java/com/android/tools/r8/naming/ComposingBuilder.java
@@ -588,7 +588,6 @@
         List<MappedRangesOfName> mappedRangesOfNames =
             entry.getValue().partitionOnMethodSignature();
         for (MappedRangesOfName rangesOfName : mappedRangesOfNames) {
-          MemberNaming memberNaming = rangesOfName.getMemberNaming(mapper);
           List<MappedRange> newRangesToCompose = rangesOfName.getMappedRanges();
           RangeBuilder minified = new RangeBuilder();
           // The new minified ranges may have ranges that range over positions that has additional
@@ -654,13 +653,10 @@
             }
           }
           composedRanges =
-              fixupOutlineInformation(
-                  computedOutlineInformation,
-                  newRangesToCompose,
-                  composedRanges,
-                  memberNaming.getOriginalSignature().asMethodSignature());
+              fixupOutlines(computedOutlineInformation, newRangesToCompose, composedRanges);
           MethodSignature residualSignature =
-              memberNaming
+              rangesOfName
+                  .getMemberNaming(mapper)
                   .computeResidualSignature(type -> inverseClassMapping.getOrDefault(type, type))
                   .asMethodSignature();
           if (ListUtils.last(composedRanges).minifiedRange != null) {
@@ -677,16 +673,14 @@
       }
     }
 
-    private List<MappedRange> fixupOutlineInformation(
+    private List<MappedRange> fixupOutlines(
         ComputedOutlineInformation computedOutlineInformation,
         List<MappedRange> newRangesToBeComposed,
-        List<MappedRange> composedRanges,
-        MethodSignature originalSignature)
+        List<MappedRange> composedRanges)
         throws MappingComposeException {
       composedRanges = fixupInlinedOutlines(computedOutlineInformation, composedRanges);
       fixupOutlineInformation(computedOutlineInformation, newRangesToBeComposed, composedRanges);
-      fixupOutlineCallsiteInformation(
-          computedOutlineInformation, originalSignature, composedRanges);
+      fixupOutlineCallsiteInformation(computedOutlineInformation, composedRanges);
       return composedRanges;
     }
 
@@ -846,10 +840,12 @@
 
     private void fixupOutlineCallsiteInformation(
         ComputedOutlineInformation computedOutlineInformation,
-        MethodSignature originalSignature,
         List<MappedRange> composedRanges)
         throws MappingComposeException {
-      if (computedOutlineInformation.outlineCallsiteMappingInformationToPatchUp.isEmpty()) {
+      Map<OutlineCallsiteMappingInformation, List<ComputedMappedRangeForOutline>>
+          outlineCallsitesToPatchUp =
+              computedOutlineInformation.outlineCallsiteMappingInformationToPatchUp;
+      if (outlineCallsitesToPatchUp.isEmpty()) {
         return;
       }
       MappedRange lastComposedRange = ListUtils.last(composedRanges);
@@ -857,42 +853,45 @@
       // program. We therefore have to find the original positions and copy all inline frames
       // and amend the outermost frame with the residual signature and the next free position.
       List<OutlineCallsiteMappingInformation> outlineCallSites =
-          new ArrayList<>(
-              computedOutlineInformation.outlineCallsiteMappingInformationToPatchUp.keySet());
-      outlineCallSites.sort(Comparator.comparing(mapping -> mapping.getOutline().toString()));
+          ListUtils.sort(
+              outlineCallsitesToPatchUp.keySet(),
+              Comparator.comparing(mapping -> mapping.getOutline().toString()));
       IntBox firstAvailableRange = new IntBox(lastComposedRange.minifiedRange.to + 1);
       for (OutlineCallsiteMappingInformation outlineCallSite : outlineCallSites) {
-        Int2IntSortedMap newPositionMap =
-            new Int2IntLinkedOpenHashMap(outlineCallSite.getPositions().size());
-        visitOutlineMappedPositions(
-            outlineCallSite,
-            originalSignature,
-            positionInfo -> {
-              int newIndex = firstAvailableRange.getAndIncrement();
-              Range newMinifiedRange = new Range(newIndex, newIndex);
-              MappedRange outerMostOutlineCallsiteFrame =
-                  ListUtils.last(positionInfo.mappedRanges());
-              for (MappedRange inlineMappedRangeInOutlinePosition : positionInfo.mappedRanges()) {
-                if (inlineMappedRangeInOutlinePosition != outerMostOutlineCallsiteFrame) {
-                  composedRanges.add(
-                      inlineMappedRangeInOutlinePosition.withMinifiedRange(newMinifiedRange));
+        for (ComputedMappedRangeForOutline computedMappedRangeForOutline :
+            outlineCallsitesToPatchUp.get(outlineCallSite)) {
+          Int2IntSortedMap newPositionMap =
+              new Int2IntLinkedOpenHashMap(outlineCallSite.getPositions().size());
+          visitOutlineMappedPositions(
+              outlineCallSite,
+              computedMappedRangeForOutline.current.getOriginalSignature(),
+              positionInfo -> {
+                int newIndex = firstAvailableRange.getAndIncrement();
+                Range newMinifiedRange = new Range(newIndex, newIndex);
+                MappedRange outerMostOutlineCallsiteFrame =
+                    ListUtils.last(positionInfo.mappedRanges());
+                for (MappedRange inlineMappedRangeInOutlinePosition : positionInfo.mappedRanges()) {
+                  if (inlineMappedRangeInOutlinePosition != outerMostOutlineCallsiteFrame) {
+                    composedRanges.add(
+                        inlineMappedRangeInOutlinePosition.withMinifiedRange(newMinifiedRange));
+                  }
                 }
-              }
-              int originalPosition =
-                  outerMostOutlineCallsiteFrame.getOriginalLineNumber(
-                      positionInfo.outlineCallsitePosition());
-              boolean hasInlineFrames = positionInfo.mappedRanges().size() > 1;
-              composedRanges.add(
-                  new MappedRange(
-                      newMinifiedRange,
-                      lastComposedRange.signature,
-                      hasInlineFrames
-                          ? new Range(originalPosition)
-                          : new Range(originalPosition, originalPosition),
-                      lastComposedRange.getRenamedName()));
-              newPositionMap.put(positionInfo.outlinePosition(), newIndex);
-              outlineCallSite.setPositionsInternal(newPositionMap);
-            });
+                int originalPosition =
+                    outerMostOutlineCallsiteFrame.getOriginalLineNumber(
+                        positionInfo.outlineCallsitePosition());
+                boolean hasInlineFrames = positionInfo.mappedRanges().size() > 1;
+                composedRanges.add(
+                    new MappedRange(
+                        newMinifiedRange,
+                        lastComposedRange.signature,
+                        hasInlineFrames
+                            ? new Range(originalPosition)
+                            : new Range(originalPosition, originalPosition),
+                        lastComposedRange.getRenamedName()));
+                newPositionMap.put(positionInfo.outlinePosition(), newIndex);
+                outlineCallSite.setPositionsInternal(newPositionMap);
+              });
+        }
       }
     }
 
diff --git a/src/main/java/com/android/tools/r8/naming/dexitembasedstring/RecordFieldNamesComputationInfo.java b/src/main/java/com/android/tools/r8/naming/dexitembasedstring/RecordFieldNamesComputationInfo.java
index 8c2f8b7..253aa47 100644
--- a/src/main/java/com/android/tools/r8/naming/dexitembasedstring/RecordFieldNamesComputationInfo.java
+++ b/src/main/java/com/android/tools/r8/naming/dexitembasedstring/RecordFieldNamesComputationInfo.java
@@ -16,7 +16,6 @@
 import com.android.tools.r8.naming.NamingLens;
 import com.android.tools.r8.utils.StringUtils;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 import java.util.function.IntFunction;
 
@@ -119,7 +118,6 @@
       DexDefinitionSupplier definitions,
       GraphLens graphLens,
       IntFunction<String> nameSupplier) {
-    assert Arrays.stream(fields).allMatch(f -> f.holder == type);
     DexClass recordClass = definitions.contextIndependentDefinitionFor(type);
     assert recordClass != null;
     List<String> names = new ArrayList<>(fields.length);
diff --git a/src/main/java/com/android/tools/r8/optimize/accessmodification/AccessModifier.java b/src/main/java/com/android/tools/r8/optimize/accessmodification/AccessModifier.java
index f5482db..6304490 100644
--- a/src/main/java/com/android/tools/r8/optimize/accessmodification/AccessModifier.java
+++ b/src/main/java/com/android/tools/r8/optimize/accessmodification/AccessModifier.java
@@ -15,8 +15,6 @@
 import com.android.tools.r8.graph.DexMethod;
 import com.android.tools.r8.graph.DexMethodSignature;
 import com.android.tools.r8.graph.DexProgramClass;
-import com.android.tools.r8.graph.FieldAccessFlags;
-import com.android.tools.r8.graph.FieldAccessInfo;
 import com.android.tools.r8.graph.ImmediateProgramSubtypingInfo;
 import com.android.tools.r8.graph.InnerClassAttribute;
 import com.android.tools.r8.graph.MethodAccessFlags;
@@ -106,15 +104,13 @@
       DexProgramClass clazz,
       AccessModifierNamingState namingState,
       BottomUpTraversalState traversalState) {
-    publicizeClass(clazz);
-    publicizeFields(clazz);
+    publicizeClass(clazz, traversalState);
+    publicizeFields(clazz, traversalState);
     publicizeMethods(clazz, namingState, traversalState);
-    // TODO(b/278736230): Also finalize classes and methods here.
-    finalizeFields(clazz);
   }
 
-  private void publicizeClass(DexProgramClass clazz) {
-    if (isAccessModificationAllowed(clazz) && !clazz.getAccessFlags().isPublic()) {
+  private void publicizeClass(DexProgramClass clazz, BottomUpTraversalState traversalState) {
+    if (isAccessModificationAllowed(clazz, traversalState) && !clazz.getAccessFlags().isPublic()) {
       clazz.getAccessFlags().promoteToPublic();
     }
 
@@ -130,12 +126,12 @@
     }
   }
 
-  private void publicizeFields(DexProgramClass clazz) {
-    clazz.forEachProgramField(this::publicizeField);
+  private void publicizeFields(DexProgramClass clazz, BottomUpTraversalState traversalState) {
+    clazz.forEachProgramField(field -> publicizeField(field, traversalState));
   }
 
-  private void publicizeField(ProgramField field) {
-    if (isAccessModificationAllowed(field) && !field.getAccessFlags().isPublic()) {
+  private void publicizeField(ProgramField field, BottomUpTraversalState traversalState) {
+    if (isAccessModificationAllowed(field, traversalState) && !field.getAccessFlags().isPublic()) {
       field.getAccessFlags().promoteToPublic();
     }
   }
@@ -165,7 +161,7 @@
       AccessModifierNamingState namingState,
       BottomUpTraversalState traversalState) {
     MethodAccessFlags accessFlags = method.getAccessFlags();
-    if (accessFlags.isPublic() || !isAccessModificationAllowed(method)) {
+    if (accessFlags.isPublic() || !isAccessModificationAllowed(method, traversalState)) {
       return commitMethod(method, localNamingState, namingState);
     }
 
@@ -254,18 +250,35 @@
     return newMethodReference;
   }
 
-  private boolean isAccessModificationAllowed(ProgramDefinition definition) {
+  private boolean isAccessModificationAllowed(
+      ProgramDefinition definition, BottomUpTraversalState traversalState) {
     if (!appView.getKeepInfo(definition).isAccessModificationAllowed(options)) {
+      if (!options.getAccessModifierOptions().isForceModifyingPackagePrivateAndProtectedMethods()
+          || !definition.isMethod()
+          || definition.getAccessFlags().isPrivate()) {
+        return false;
+      }
+    }
+    if (!appView.getKeepInfo(definition).isAccessModificationAllowedForTesting(options)) {
       return false;
     }
+    if (isFailedResolutionTarget(definition)) {
+      return false;
+    }
+    return definition.isClass()
+        || options.getAccessModifierOptions().canPollutePublicApi()
+        || !traversalState.isKeptOrHasKeptSubclass;
+  }
+
+  private boolean isFailedResolutionTarget(ProgramDefinition definition) {
     if (definition.isClass()) {
-      return !appView.appInfo().isFailedClassResolutionTarget(definition.asClass().getType());
+      return appView.appInfo().isFailedClassResolutionTarget(definition.asClass().getType());
     }
     if (definition.isField()) {
-      return !appView.appInfo().isFailedFieldResolutionTarget(definition.asField().getReference());
+      return appView.appInfo().isFailedFieldResolutionTarget(definition.asField().getReference());
     }
     assert definition.isMethod();
-    return !appView.appInfo().isFailedMethodResolutionTarget(definition.asMethod().getReference());
+    return appView.appInfo().isFailedMethodResolutionTarget(definition.asMethod().getReference());
   }
 
   private boolean isRenamingAllowed(ProgramMethod method) {
@@ -296,28 +309,4 @@
     }
     return method.getDefinition();
   }
-
-  // Finalization of classes and members.
-
-  private void finalizeFields(DexProgramClass clazz) {
-    clazz.forEachProgramField(this::finalizeField);
-  }
-
-  private void finalizeField(ProgramField field) {
-    FieldAccessFlags flags = field.getAccessFlags();
-    FieldAccessInfo accessInfo =
-        appView.appInfo().getFieldAccessInfoCollection().get(field.getReference());
-    if (!appView.getKeepInfo(field).isPinned(options)
-        && !accessInfo.hasReflectiveWrite()
-        && !accessInfo.isWrittenFromMethodHandle()
-        && accessInfo.isWrittenOnlyInMethodSatisfying(
-            method ->
-                method.getDefinition().isInitializer()
-                    && method.getAccessFlags().isStatic() == flags.isStatic()
-                    && method.getHolder() == field.getHolder())
-        && !flags.isFinal()
-        && !flags.isVolatile()) {
-      flags.promoteToFinal();
-    }
-  }
 }
diff --git a/src/main/java/com/android/tools/r8/optimize/accessmodification/AccessModifierOptions.java b/src/main/java/com/android/tools/r8/optimize/accessmodification/AccessModifierOptions.java
index a9d69d6..99a0645 100644
--- a/src/main/java/com/android/tools/r8/optimize/accessmodification/AccessModifierOptions.java
+++ b/src/main/java/com/android/tools/r8/optimize/accessmodification/AccessModifierOptions.java
@@ -8,14 +8,42 @@
 
 public class AccessModifierOptions {
 
+  // TODO(b/131130038): Do not allow accessmodification when kept.
+  private boolean forceModifyPackagePrivateAndProtectedMethods = true;
+
   private InternalOptions options;
 
   public AccessModifierOptions(InternalOptions options) {
     this.options = options;
   }
 
+  public boolean canPollutePublicApi() {
+    return isAccessModificationRulePresent() || options.isGeneratingDex();
+  }
+
   public boolean isAccessModificationEnabled() {
+    // TODO(b/288062771): Enable access modification for L8.
+    if (!options.synthesizedClassPrefix.isEmpty()) {
+      return false;
+    }
+    if (options.forceProguardCompatibility) {
+      return isAccessModificationRulePresent();
+    }
+    return true;
+  }
+
+  private boolean isAccessModificationRulePresent() {
     return options.hasProguardConfiguration()
         && options.getProguardConfiguration().isAccessModificationAllowed();
   }
+
+  public boolean isForceModifyingPackagePrivateAndProtectedMethods() {
+    return forceModifyPackagePrivateAndProtectedMethods;
+  }
+
+  public void setForceModifyPackagePrivateAndProtectedMethods(
+      boolean forceModifyPackagePrivateAndProtectedMethods) {
+    this.forceModifyPackagePrivateAndProtectedMethods =
+        forceModifyPackagePrivateAndProtectedMethods;
+  }
 }
diff --git a/src/main/java/com/android/tools/r8/optimize/accessmodification/AccessModifierTraversal.java b/src/main/java/com/android/tools/r8/optimize/accessmodification/AccessModifierTraversal.java
index 1fef67f..e07407b 100644
--- a/src/main/java/com/android/tools/r8/optimize/accessmodification/AccessModifierTraversal.java
+++ b/src/main/java/com/android/tools/r8/optimize/accessmodification/AccessModifierTraversal.java
@@ -14,6 +14,8 @@
 import com.android.tools.r8.graph.ProgramMethod;
 import com.android.tools.r8.optimize.argumentpropagation.utils.DepthFirstTopDownClassHierarchyTraversal;
 import com.android.tools.r8.shaking.AppInfoWithLiveness;
+import com.android.tools.r8.shaking.KeepClassInfo;
+import com.android.tools.r8.utils.InternalOptions;
 import com.android.tools.r8.utils.MapUtils;
 import com.android.tools.r8.utils.collections.DexMethodSignatureMap;
 import com.google.common.collect.Iterables;
@@ -65,7 +67,11 @@
     states.remove(clazz.getType());
 
     // Remove and join the bottom up traversal states of the subclasses.
-    BottomUpTraversalState state = new BottomUpTraversalState();
+    KeepClassInfo keepInfo = appView.getKeepInfo(clazz);
+    InternalOptions options = appView.options();
+    BottomUpTraversalState state =
+        new BottomUpTraversalState(
+            !keepInfo.isMinificationAllowed(options) && !keepInfo.isShrinkingAllowed(options));
     forEachSubClass(
         clazz,
         subclass -> {
@@ -125,11 +131,14 @@
     private static final BottomUpTraversalState EMPTY =
         new BottomUpTraversalState(DexMethodSignatureMap.empty());
 
+    boolean isKeptOrHasKeptSubclass;
+
     // The set of non-private virtual methods below the current class.
     DexMethodSignatureMap<Set<String>> nonPrivateVirtualMethods;
 
-    BottomUpTraversalState() {
+    BottomUpTraversalState(boolean isKept) {
       this(DexMethodSignatureMap.create());
+      this.isKeptOrHasKeptSubclass = isKept;
     }
 
     BottomUpTraversalState(DexMethodSignatureMap<Set<String>> packagePrivateMethods) {
@@ -146,6 +155,7 @@
     }
 
     void add(BottomUpTraversalState backtrackingState) {
+      isKeptOrHasKeptSubclass |= backtrackingState.isKeptOrHasKeptSubclass;
       backtrackingState.nonPrivateVirtualMethods.forEach(
           (methodSignature, packageDescriptors) ->
               this.nonPrivateVirtualMethods
@@ -173,5 +183,9 @@
     boolean isEmpty() {
       return nonPrivateVirtualMethods.isEmpty();
     }
+
+    void setIsKeptOrHasKeptSubclass() {
+      isKeptOrHasKeptSubclass = true;
+    }
   }
 }
diff --git a/src/main/java/com/android/tools/r8/optimize/redundantbridgeremoval/RedundantBridgeRemover.java b/src/main/java/com/android/tools/r8/optimize/redundantbridgeremoval/RedundantBridgeRemover.java
index 73a0444..ad329a1 100644
--- a/src/main/java/com/android/tools/r8/optimize/redundantbridgeremoval/RedundantBridgeRemover.java
+++ b/src/main/java/com/android/tools/r8/optimize/redundantbridgeremoval/RedundantBridgeRemover.java
@@ -43,13 +43,20 @@
   private final RedundantBridgeRemovalLens.Builder lensBuilder =
       new RedundantBridgeRemovalLens.Builder();
 
+  private boolean mustRetargetInvokesToTargetMethod = false;
+
   public RedundantBridgeRemover(AppView<AppInfoWithLiveness> appView) {
     this.appView = appView;
     this.immediateSubtypingInfo = ImmediateProgramSubtypingInfo.create(appView);
     this.redundantBridgeRemovalOptions = appView.options().getRedundantBridgeRemovalOptions();
   }
 
-  private DexClassAndMethod getTargetForRedundantBridge(ProgramMethod method) {
+  public RedundantBridgeRemover setMustRetargetInvokesToTargetMethod() {
+    mustRetargetInvokesToTargetMethod = true;
+    return this;
+  }
+
+  private DexClassAndMethod getTargetForRedundantNonAbstractBridge(ProgramMethod method) {
     DexEncodedMethod definition = method.getDefinition();
     BridgeInfo bridgeInfo = definition.getOptimizationInfo().getBridgeInfo();
     boolean isBridge = definition.isBridge() || bridgeInfo != null;
@@ -112,10 +119,14 @@
     return false;
   }
 
+  public void run(ExecutorService executorService, Timing timing) throws ExecutionException {
+    run(executorService, timing, null);
+  }
+
   public void run(
-      MemberRebindingIdentityLens memberRebindingIdentityLens,
       ExecutorService executorService,
-      Timing timing)
+      Timing timing,
+      MemberRebindingIdentityLens memberRebindingIdentityLens)
       throws ExecutionException {
     assert memberRebindingIdentityLens == null
         || memberRebindingIdentityLens == appView.graphLens();
@@ -148,6 +159,7 @@
     }
 
     appView.notifyOptimizationFinishedForTesting();
+    appView.appInfo().notifyRedundantBridgeRemoverFinished(true);
     timing.end();
   }
 
@@ -185,38 +197,42 @@
     return traversal.getRemovedBridges();
   }
 
-  private boolean isRedundantAbstractBridge(ProgramMethod method) {
+  private DexClassAndMethod getTargetForRedundantAbstractBridge(ProgramMethod method) {
     if (!method.getAccessFlags().isAbstract() || method.getDefinition().getCode() != null) {
-      return false;
+      return null;
     }
     DexProgramClass holder = method.getHolder();
     if (holder.getSuperType() == null) {
       assert holder.getType() == appView.dexItemFactory().objectType;
-      return false;
+      return null;
     }
     MethodResolutionResult superTypeResolution =
         appView.appInfo().resolveMethodOn(holder.getSuperType(), method.getReference(), false);
     if (superTypeResolution.isMultiMethodResolutionResult()) {
-      return false;
+      return null;
     }
     // Check if there is a definition in the super type hieararchy that is also abstract and has the
     // same visibility.
     if (superTypeResolution.isSingleResolution()) {
-      DexClassAndMethod resolutionPair =
+      DexClassAndMethod resolvedMethod =
           superTypeResolution.asSingleResolution().getResolutionPair();
-      return resolutionPair.getDefinition().isAbstract()
-          && resolutionPair
+      if (resolvedMethod.getDefinition().isAbstract()
+          && resolvedMethod
               .getDefinition()
               .isAtLeastAsVisibleAsOtherInSameHierarchy(method.getDefinition(), appView)
-          && (!resolutionPair.getHolder().isInterface() || holder.getInterfaces().isEmpty());
+          && (!resolvedMethod.getHolder().isInterface() || holder.getInterfaces().isEmpty())) {
+        return resolvedMethod;
+      }
+      return null;
     }
     // Only check for interfaces if resolving the method on super type causes NoSuchMethodError.
     FailedResolutionResult failedResolutionResult = superTypeResolution.asFailedResolution();
     if (failedResolutionResult == null
         || !failedResolutionResult.isNoSuchMethodErrorResult(holder, appView, appView.appInfo())
         || holder.getInterfaces().isEmpty()) {
-      return false;
+      return null;
     }
+    DexClassAndMethod representativeInterfaceMethod = null;
     for (DexType iface : holder.getInterfaces()) {
       SingleResolutionResult<?> singleIfaceResult =
           appView
@@ -228,10 +244,14 @@
           || !singleIfaceResult
               .getResolvedMethod()
               .isAtLeastAsVisibleAsOtherInSameHierarchy(method.getDefinition(), appView)) {
-        return false;
+        return null;
+      }
+      if (representativeInterfaceMethod == null) {
+        representativeInterfaceMethod = singleIfaceResult.getResolutionPair();
       }
     }
-    return true;
+    assert representativeInterfaceMethod != null;
+    return representativeInterfaceMethod;
   }
 
   private void pruneApp(
@@ -266,21 +286,23 @@
                 || !keepInfo.isOptimizationAllowed(appView.options())) {
               return;
             }
-            if (isRedundantAbstractBridge(method)) {
-              // Record that the redundant bridge should be removed.
-              bridgesToRemoveForClass.add(method);
-              return;
-            }
-            DexClassAndMethod target = getTargetForRedundantBridge(method);
-            if (target != null) {
-              // Record that the redundant bridge should be removed.
-              bridgesToRemoveForClass.add(method);
-
-              // Rewrite invokes to the bridge to the target if it is accessible.
-              if (canRetargetInvokesToTargetMethod(method, target)) {
-                lensBuilder.map(method, target);
+            DexClassAndMethod target = getTargetForRedundantAbstractBridge(method);
+            if (target == null) {
+              target = getTargetForRedundantNonAbstractBridge(method);
+              if (target == null) {
+                return;
               }
             }
+
+            // Rewrite invokes to the bridge to the target if it is accessible.
+            if (canRetargetInvokesToTargetMethod(method, target)) {
+              lensBuilder.map(method, target);
+            } else if (mustRetargetInvokesToTargetMethod) {
+              return;
+            }
+
+            // Record that the redundant bridge should be removed.
+            bridgesToRemoveForClass.add(method);
           });
       if (!bridgesToRemoveForClass.isEmpty()) {
         clazz.getMethodCollection().removeMethods(bridgesToRemoveForClass.toDefinitionSet());
@@ -295,6 +317,14 @@
           && !redundantBridgeRemovalOptions.isRetargetingOfConstructorBridgeCallsEnabled()) {
         return false;
       }
+      // Check if the current method is an interface method targeted by invoke-super.
+      if (method.getHolder().isInterface()
+          && appView
+              .appInfo()
+              .getMethodAccessInfoCollection()
+              .hasSuperInvoke(method.getReference())) {
+        return false;
+      }
       // Check if all possible contexts that have access to the holder of the redundant bridge
       // method also have access to the holder of the target method.
       DexProgramClass methodHolder = method.getHolder();
diff --git a/src/main/java/com/android/tools/r8/profile/startup/instrumentation/StartupInstrumentation.java b/src/main/java/com/android/tools/r8/profile/startup/instrumentation/StartupInstrumentation.java
index a64d1c7..8919b83 100644
--- a/src/main/java/com/android/tools/r8/profile/startup/instrumentation/StartupInstrumentation.java
+++ b/src/main/java/com/android/tools/r8/profile/startup/instrumentation/StartupInstrumentation.java
@@ -33,6 +33,7 @@
 import com.android.tools.r8.ir.code.Value;
 import com.android.tools.r8.ir.conversion.IRConverter;
 import com.android.tools.r8.ir.conversion.IRToDexFinalizer;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions;
 import com.android.tools.r8.ir.conversion.MethodConversionOptions.MutableMethodConversionOptions;
 import com.android.tools.r8.ir.conversion.MethodProcessorEventConsumer;
 import com.android.tools.r8.startup.generated.InstrumentationServerFactory;
@@ -99,7 +100,11 @@
 
     List<DexProgramClass> extraProgramClasses = createStartupRuntimeLibraryClasses();
     MethodProcessorEventConsumer eventConsumer = MethodProcessorEventConsumer.empty();
-    converter.processClassesConcurrently(extraProgramClasses, eventConsumer, executorService);
+    converter.processClassesConcurrently(
+        extraProgramClasses,
+        eventConsumer,
+        MethodConversionOptions.forD8(appView),
+        executorService);
 
     DexApplication newApplication =
         appView.app().builder().addProgramClasses(extraProgramClasses).build();
@@ -167,7 +172,7 @@
     // Disable StringSwitch conversion to avoid having to run the StringSwitchRemover before
     // finalizing the code.
     MutableMethodConversionOptions conversionOptions =
-        new MutableMethodConversionOptions(options).disableStringSwitchConversion();
+        MethodConversionOptions.forD8(appView).disableStringSwitchConversion();
     IRCode code = method.buildIR(appView, conversionOptions);
     InstructionListIterator instructionIterator = code.entryBlock().listIterator(code);
     instructionIterator.positionBeforeNextInstructionThatMatches(not(Instruction::isArgument));
diff --git a/src/main/java/com/android/tools/r8/shaking/AnnotationRemover.java b/src/main/java/com/android/tools/r8/shaking/AnnotationRemover.java
index ab4015d..1666178 100644
--- a/src/main/java/com/android/tools/r8/shaking/AnnotationRemover.java
+++ b/src/main/java/com/android/tools/r8/shaking/AnnotationRemover.java
@@ -360,6 +360,9 @@
     if (clazz.getClassSignature().isValid() && keepInfo.isSignatureRemovalAllowed(options)) {
       clazz.clearClassSignature();
     }
+    if (keepInfo.isPermittedSubclassesRemovalAllowed(options)) {
+      clazz.clearPermittedSubclasses();
+    }
   }
 
   private boolean canRemoveInnerClassAttribute(
diff --git a/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java b/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
index d3ed9d1..5b459c3 100644
--- a/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
+++ b/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
@@ -504,7 +504,13 @@
 
   public void notifyMemberRebindingFinished(AppView<AppInfoWithLiveness> appView) {
     getFieldAccessInfoCollection().restrictToProgram(appView);
-    getMethodAccessInfoCollection().destroyNonDirectInvokes();
+    getMethodAccessInfoCollection().destroyNonDirectNonSuperInvokes();
+  }
+
+  public void notifyRedundantBridgeRemoverFinished(boolean initial) {
+    if (initial) {
+      getMethodAccessInfoCollection().destroySuperInvokes();
+    }
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
index 471c6b0..1ea86b5 100644
--- a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
+++ b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
@@ -23,7 +23,6 @@
 import com.android.tools.r8.contexts.CompilationContext.ProcessorContext;
 import com.android.tools.r8.dex.IndexedItemCollection;
 import com.android.tools.r8.dex.code.CfOrDexInstruction;
-import com.android.tools.r8.errors.CompilationError;
 import com.android.tools.r8.errors.InterfaceDesugarMissingTypeDiagnostic;
 import com.android.tools.r8.errors.Unreachable;
 import com.android.tools.r8.experimental.graphinfo.GraphConsumer;
@@ -108,6 +107,7 @@
 import com.android.tools.r8.ir.code.InvokeVirtual;
 import com.android.tools.r8.ir.code.NewArrayEmpty;
 import com.android.tools.r8.ir.code.Value;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions;
 import com.android.tools.r8.ir.desugar.CfInstructionDesugaringCollection;
 import com.android.tools.r8.ir.desugar.CfInstructionDesugaringEventConsumer;
 import com.android.tools.r8.ir.desugar.CfPostProcessingDesugaringCollection;
@@ -2051,11 +2051,6 @@
     assert !appView.unboxedEnums().isUnboxedEnum(clazz)
         : "Enum " + clazz.toSourceString() + " has been unboxed but is still in the program.";
 
-    if (options.isGeneratingClassFiles() && clazz.hasPermittedSubclassAttributes()) {
-      throw new CompilationError(
-          "Sealed classes are not supported as program classes when generating class files",
-          clazz.getOrigin());
-    }
     // Mark types in inner-class attributes referenced.
     {
       BiConsumer<DexType, ProgramDerivedContext> missingClassConsumer =
@@ -3495,7 +3490,11 @@
         DexProgramClass clazz = asProgramClassOrNull(definitionFor(referencedType, context));
         if (clazz != null) {
           applyMinimumKeepInfoWhenLive(
-              clazz, KeepClassInfo.newEmptyJoiner().disallowMinification().disallowOptimization());
+              clazz,
+              KeepClassInfo.newEmptyJoiner()
+                  .disallowMinification()
+                  .disallowOptimization()
+                  .disallowRepackaging());
         }
       }
     }
@@ -4913,7 +4912,7 @@
   }
 
   private void handleReflectiveBehavior(ProgramMethod method) {
-    IRCode code = method.buildIR(appView);
+    IRCode code = method.buildIR(appView, MethodConversionOptions.nonConverting());
     InstructionIterator iterator = code.instructionIterator();
     while (iterator.hasNext()) {
       Instruction instruction = iterator.next();
diff --git a/src/main/java/com/android/tools/r8/shaking/EnqueuerDeferredTracingImpl.java b/src/main/java/com/android/tools/r8/shaking/EnqueuerDeferredTracingImpl.java
index 8f08d77..adbf8d0 100644
--- a/src/main/java/com/android/tools/r8/shaking/EnqueuerDeferredTracingImpl.java
+++ b/src/main/java/com/android/tools/r8/shaking/EnqueuerDeferredTracingImpl.java
@@ -24,6 +24,7 @@
 import com.android.tools.r8.ir.conversion.IRFinalizer;
 import com.android.tools.r8.ir.conversion.IRToCfFinalizer;
 import com.android.tools.r8.ir.conversion.IRToDexFinalizer;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions;
 import com.android.tools.r8.ir.conversion.MethodConversionOptions.MutableMethodConversionOptions;
 import com.android.tools.r8.ir.conversion.passes.ThrowCatchOptimizer;
 import com.android.tools.r8.ir.optimize.membervaluepropagation.assume.AssumeInfo;
@@ -264,8 +265,8 @@
     // Build IR.
     MutableMethodConversionOptions conversionOptions =
         mode.isInitialTreeShaking()
-            ? new MutableMethodConversionOptions(options).setIsGeneratingClassFiles(true)
-            : new MutableMethodConversionOptions(options);
+            ? MethodConversionOptions.forPreLirPhase(appView)
+            : MethodConversionOptions.forPostLirPhase(appView);
     conversionOptions.disableStringSwitchConversion();
 
     IRCode ir = method.buildIR(appView, conversionOptions);
@@ -274,7 +275,7 @@
     rewriter.rewriteCode(ir, initializedClassesWithContexts, prunedFields);
 
     // Run dead code elimination.
-    new ThrowCatchOptimizer(appView).optimizeAlwaysThrowingInstructions(ir);
+    new ThrowCatchOptimizer(appView).run(ir, Timing.empty());
     rewriter.getDeadCodeRemover().run(ir, Timing.empty());
 
     // Finalize to class files or dex.
diff --git a/src/main/java/com/android/tools/r8/shaking/GlobalKeepInfoConfiguration.java b/src/main/java/com/android/tools/r8/shaking/GlobalKeepInfoConfiguration.java
index 7ff0803..9fec619 100644
--- a/src/main/java/com/android/tools/r8/shaking/GlobalKeepInfoConfiguration.java
+++ b/src/main/java/com/android/tools/r8/shaking/GlobalKeepInfoConfiguration.java
@@ -39,4 +39,6 @@
   boolean isKeepRuntimeVisibleTypeAnnotationsEnabled();
 
   boolean isKeepRuntimeInvisibleTypeAnnotationsEnabled();
+
+  boolean isKeepPermittedSubclassesEnabled();
 }
diff --git a/src/main/java/com/android/tools/r8/shaking/KeepClassInfo.java b/src/main/java/com/android/tools/r8/shaking/KeepClassInfo.java
index f504792..9898d34 100644
--- a/src/main/java/com/android/tools/r8/shaking/KeepClassInfo.java
+++ b/src/main/java/com/android/tools/r8/shaking/KeepClassInfo.java
@@ -14,10 +14,12 @@
 public final class KeepClassInfo extends KeepInfo<KeepClassInfo.Builder, KeepClassInfo> {
 
   // Requires all aspects of a class to be kept.
-  private static final KeepClassInfo TOP = new Builder().makeTop().disallowRepackaging().build();
+  private static final KeepClassInfo TOP =
+      new Builder().makeTop().disallowRepackaging().disallowPermittedSubclassesRemoval().build();
 
   // Requires no aspects of a class to be kept.
-  private static final KeepClassInfo BOTTOM = new Builder().makeBottom().allowRepackaging().build();
+  private static final KeepClassInfo BOTTOM =
+      new Builder().makeBottom().allowRepackaging().allowPermittedSubclassesRemoval().build();
 
   public static KeepClassInfo top() {
     return TOP;
@@ -33,11 +35,13 @@
 
   private final boolean allowRepackaging;
   private final boolean checkEnumUnboxed;
+  private final boolean allowPermittedSubclassesRemoval;
 
   private KeepClassInfo(Builder builder) {
     super(builder);
     this.allowRepackaging = builder.isRepackagingAllowed();
     this.checkEnumUnboxed = builder.isCheckEnumUnboxedEnabled();
+    this.allowPermittedSubclassesRemoval = builder.isPermittedSubclassesRemovalAllowed();
   }
 
   @Override
@@ -58,6 +62,11 @@
     return new Joiner(this);
   }
 
+  public boolean isPermittedSubclassesRemovalAllowed(GlobalKeepInfoConfiguration configuration) {
+    return !configuration.isKeepPermittedSubclassesEnabled()
+        && internalIsPermittedSubclassesRemovalAllowed();
+  }
+
   /**
    * True if an item may be repackaged.
    *
@@ -92,6 +101,10 @@
         || !getClassInfo.apply(kotlinMetadataClass.asProgramClass()).isShrinkingAllowed(options);
   }
 
+  boolean internalIsPermittedSubclassesRemovalAllowed() {
+    return allowPermittedSubclassesRemoval;
+  }
+
   @Override
   public boolean isTop() {
     return this.equals(top());
@@ -106,6 +119,7 @@
 
     private boolean allowRepackaging;
     private boolean checkEnumUnboxed;
+    private boolean allowPermittedSubclassesRemoval;
 
     private Builder() {
       super();
@@ -115,6 +129,7 @@
       super(original);
       allowRepackaging = original.internalIsRepackagingAllowed();
       checkEnumUnboxed = original.internalIsCheckEnumUnboxedEnabled();
+      allowPermittedSubclassesRemoval = original.internalIsPermittedSubclassesRemovalAllowed();
     }
 
     // Check enum unboxed.
@@ -153,6 +168,23 @@
       return setCheckEnumUnboxed(false);
     }
 
+    public Builder allowPermittedSubclassesRemoval() {
+      return setAllowPermittedSubclassesRemoval(true);
+    }
+
+    public boolean isPermittedSubclassesRemovalAllowed() {
+      return allowPermittedSubclassesRemoval;
+    }
+
+    private Builder setAllowPermittedSubclassesRemoval(boolean allowPermittedSubclassesRemoval) {
+      this.allowPermittedSubclassesRemoval = allowPermittedSubclassesRemoval;
+      return self();
+    }
+
+    public Builder disallowPermittedSubclassesRemoval() {
+      return setAllowPermittedSubclassesRemoval(false);
+    }
+
     @Override
     public KeepClassInfo getTopInfo() {
       return TOP;
@@ -177,7 +209,9 @@
     boolean internalIsEqualTo(KeepClassInfo other) {
       return super.internalIsEqualTo(other)
           && isRepackagingAllowed() == other.internalIsRepackagingAllowed()
-          && isCheckEnumUnboxedEnabled() == other.internalIsCheckEnumUnboxedEnabled();
+          && isCheckEnumUnboxedEnabled() == other.internalIsCheckEnumUnboxedEnabled()
+          && isPermittedSubclassesRemovalAllowed()
+              == other.internalIsPermittedSubclassesRemovalAllowed();
     }
 
     @Override
@@ -187,12 +221,18 @@
 
     @Override
     public Builder makeTop() {
-      return super.makeTop().unsetCheckEnumUnboxed().disallowRepackaging();
+      return super.makeTop()
+          .unsetCheckEnumUnboxed()
+          .disallowRepackaging()
+          .disallowPermittedSubclassesRemoval();
     }
 
     @Override
     public Builder makeBottom() {
-      return super.makeBottom().unsetCheckEnumUnboxed().allowRepackaging();
+      return super.makeBottom()
+          .unsetCheckEnumUnboxed()
+          .allowRepackaging()
+          .allowPermittedSubclassesRemoval();
     }
   }
 
@@ -212,6 +252,11 @@
       return self();
     }
 
+    public Joiner disallowPermittedSubclassesRemoval() {
+      builder.disallowPermittedSubclassesRemoval();
+      return self();
+    }
+
     @Override
     public Joiner asClassJoiner() {
       return this;
@@ -222,7 +267,10 @@
       // Should be extended to merge the fields of this class in case any are added.
       return super.merge(joiner)
           .applyIf(joiner.builder.isCheckEnumUnboxedEnabled(), Joiner::setCheckEnumUnboxed)
-          .applyIf(!joiner.builder.isRepackagingAllowed(), Joiner::disallowRepackaging);
+          .applyIf(!joiner.builder.isRepackagingAllowed(), Joiner::disallowRepackaging)
+          .applyIf(
+              !joiner.builder.isPermittedSubclassesRemovalAllowed(),
+              Joiner::disallowPermittedSubclassesRemoval);
     }
 
     @Override
diff --git a/src/main/java/com/android/tools/r8/shaking/KeepInfo.java b/src/main/java/com/android/tools/r8/shaking/KeepInfo.java
index 092f4ea..fc0ec2d 100644
--- a/src/main/java/com/android/tools/r8/shaking/KeepInfo.java
+++ b/src/main/java/com/android/tools/r8/shaking/KeepInfo.java
@@ -18,6 +18,7 @@
 public abstract class KeepInfo<B extends Builder<B, K>, K extends KeepInfo<B, K>> {
 
   private final boolean allowAccessModification;
+  private final boolean allowAccessModificationForTesting;
   private final boolean allowAnnotationRemoval;
   private final boolean allowMinification;
   private final boolean allowOptimization;
@@ -27,6 +28,7 @@
 
   private KeepInfo(
       boolean allowAccessModification,
+      boolean allowAccessModificationForTesting,
       boolean allowAnnotationRemoval,
       boolean allowMinification,
       boolean allowOptimization,
@@ -34,6 +36,7 @@
       boolean allowSignatureRemoval,
       boolean checkDiscarded) {
     this.allowAccessModification = allowAccessModification;
+    this.allowAccessModificationForTesting = allowAccessModificationForTesting;
     this.allowAnnotationRemoval = allowAnnotationRemoval;
     this.allowMinification = allowMinification;
     this.allowOptimization = allowOptimization;
@@ -45,6 +48,7 @@
   KeepInfo(B builder) {
     this(
         builder.isAccessModificationAllowed(),
+        builder.isAccessModificationAllowedForTesting(),
         builder.isAnnotationRemovalAllowed(),
         builder.isMinificationAllowed(),
         builder.isOptimizationAllowed(),
@@ -171,6 +175,15 @@
     return allowAccessModification;
   }
 
+  public boolean isAccessModificationAllowedForTesting(GlobalKeepInfoConfiguration configuration) {
+    return internalIsAccessModificationAllowedForTesting();
+  }
+
+  // Internal accessor for the items access-modification bit.
+  boolean internalIsAccessModificationAllowedForTesting() {
+    return allowAccessModificationForTesting;
+  }
+
   public boolean isEnclosingMethodAttributeRemovalAllowed(
       GlobalKeepInfoConfiguration configuration,
       EnclosingMethodAttribute enclosingMethodAttribute,
@@ -213,6 +226,8 @@
     // An item is less, aka, lower in the lattice, if each of its attributes is at least as
     // permissive of that on other.
     return (allowAccessModification || !other.internalIsAccessModificationAllowed())
+        && (allowAccessModificationForTesting
+            || !other.internalIsAccessModificationAllowedForTesting())
         && (allowAnnotationRemoval || !other.internalIsAnnotationRemovalAllowed())
         && (allowMinification || !other.internalIsMinificationAllowed())
         && (allowOptimization || !other.internalIsOptimizationAllowed())
@@ -236,6 +251,7 @@
 
     protected K original;
     private boolean allowAccessModification;
+    private boolean allowAccessModificationForTesting;
     private boolean allowAnnotationRemoval;
     private boolean allowMinification;
     private boolean allowOptimization;
@@ -250,6 +266,7 @@
     Builder(K original) {
       this.original = original;
       allowAccessModification = original.internalIsAccessModificationAllowed();
+      allowAccessModificationForTesting = original.internalIsAccessModificationAllowedForTesting();
       allowAnnotationRemoval = original.internalIsAnnotationRemovalAllowed();
       allowMinification = original.internalIsMinificationAllowed();
       allowOptimization = original.internalIsOptimizationAllowed();
@@ -260,6 +277,7 @@
 
     B makeTop() {
       disallowAccessModification();
+      disallowAccessModificationForTesting();
       disallowAnnotationRemoval();
       disallowMinification();
       disallowOptimization();
@@ -271,6 +289,7 @@
 
     B makeBottom() {
       allowAccessModification();
+      allowAccessModificationForTesting();
       allowAnnotationRemoval();
       allowMinification();
       allowOptimization();
@@ -297,6 +316,8 @@
 
     boolean internalIsEqualTo(K other) {
       return isAccessModificationAllowed() == other.internalIsAccessModificationAllowed()
+          && isAccessModificationAllowedForTesting()
+              == other.internalIsAccessModificationAllowedForTesting()
           && isAnnotationRemovalAllowed() == other.internalIsAnnotationRemovalAllowed()
           && isMinificationAllowed() == other.internalIsMinificationAllowed()
           && isOptimizationAllowed() == other.internalIsOptimizationAllowed()
@@ -309,6 +330,10 @@
       return allowAccessModification;
     }
 
+    public boolean isAccessModificationAllowedForTesting() {
+      return allowAccessModificationForTesting;
+    }
+
     public boolean isAnnotationRemovalAllowed() {
       return allowAnnotationRemoval;
     }
@@ -398,6 +423,19 @@
       return setAllowAccessModification(false);
     }
 
+    public B setAllowAccessModificationForTesting(boolean allowAccessModificationForTesting) {
+      this.allowAccessModificationForTesting = allowAccessModificationForTesting;
+      return self();
+    }
+
+    public B allowAccessModificationForTesting() {
+      return setAllowAccessModificationForTesting(true);
+    }
+
+    public B disallowAccessModificationForTesting() {
+      return setAllowAccessModificationForTesting(false);
+    }
+
     public B setAllowAnnotationRemoval(boolean allowAnnotationRemoval) {
       this.allowAnnotationRemoval = allowAnnotationRemoval;
       return self();
@@ -524,6 +562,11 @@
       return self();
     }
 
+    public J disallowAccessModificationForTesting() {
+      builder.disallowAccessModificationForTesting();
+      return self();
+    }
+
     public J disallowAnnotationRemoval() {
       builder.disallowAnnotationRemoval();
       return self();
@@ -557,6 +600,9 @@
     public J merge(J joiner) {
       Builder<B, K> builder = joiner.builder;
       applyIf(!builder.isAccessModificationAllowed(), Joiner::disallowAccessModification);
+      applyIf(
+          !builder.isAccessModificationAllowedForTesting(),
+          Joiner::disallowAccessModificationForTesting);
       applyIf(!builder.isAnnotationRemovalAllowed(), Joiner::disallowAnnotationRemoval);
       applyIf(!builder.isMinificationAllowed(), Joiner::disallowMinification);
       applyIf(!builder.isOptimizationAllowed(), Joiner::disallowOptimization);
diff --git a/src/main/java/com/android/tools/r8/shaking/ProguardKeepAttributes.java b/src/main/java/com/android/tools/r8/shaking/ProguardKeepAttributes.java
index e47ff67..19a6946 100644
--- a/src/main/java/com/android/tools/r8/shaking/ProguardKeepAttributes.java
+++ b/src/main/java/com/android/tools/r8/shaking/ProguardKeepAttributes.java
@@ -31,6 +31,7 @@
   public static final String RUNTIME_INVISIBLE_TYPE_ANNOTATIONS =
       "RuntimeInvisibleTypeAnnotations";
   public static final String ANNOTATION_DEFAULT = "AnnotationDefault";
+  public static final String PERMITTED_SUBCLASSES = "PermittedSubclasses";
   public static final String STACK_MAP_TABLE = "StackMapTable";
 
   public static final List<String> KEEP_ALL = ImmutableList.of("*");
@@ -54,6 +55,7 @@
   public boolean runtimeInvisibleTypeAnnotations = false;
   public boolean annotationDefault = false;
   public boolean stackMapTable = false;
+  public boolean permittedSubclasses = false;
 
   private ProguardKeepAttributes() {
   }
@@ -138,6 +140,7 @@
         RUNTIME_INVISIBLE_TYPE_ANNOTATIONS, patterns);
     annotationDefault = update(annotationDefault, ANNOTATION_DEFAULT, patterns);
     stackMapTable = update(stackMapTable, STACK_MAP_TABLE, patterns);
+    permittedSubclasses = update(permittedSubclasses, PERMITTED_SUBCLASSES, patterns);
   }
 
   public void ensureValid(boolean forceProguardCompatibility) {
@@ -189,7 +192,8 @@
         && this.runtimeVisibleTypeAnnotations == other.runtimeVisibleTypeAnnotations
         && this.runtimeInvisibleTypeAnnotations == other.runtimeInvisibleTypeAnnotations
         && this.annotationDefault == other.annotationDefault
-        && this.stackMapTable == other.stackMapTable;
+        && this.stackMapTable == other.stackMapTable
+        && this.permittedSubclasses == other.permittedSubclasses;
   }
 
   @Override
@@ -209,7 +213,8 @@
         + (this.runtimeInvisibleTypeAnnotations ? 1 << 12 : 0)
         + (this.annotationDefault ? 1 << 13 : 0)
         + (this.stackMapTable ? 1 << 14 : 0)
-        + (this.methodParameters ? 1 << 15 : 0);
+        + (this.methodParameters ? 1 << 15 : 0)
+        + (this.permittedSubclasses ? 1 << 16 : 0);
   }
 
   public boolean isEmpty() {
@@ -228,7 +233,8 @@
         && !runtimeVisibleTypeAnnotations
         && !runtimeInvisibleTypeAnnotations
         && !annotationDefault
-        && !stackMapTable;
+        && !stackMapTable
+        && !permittedSubclasses;
   }
 
   public StringBuilder append(StringBuilder builder) {
@@ -281,6 +287,9 @@
     if (stackMapTable) {
       attributes.add(STACK_MAP_TABLE);
     }
+    if (permittedSubclasses) {
+      attributes.add(PERMITTED_SUBCLASSES);
+    }
 
     if (attributes.size() > 0) {
       builder.append("-keepattributes ");
diff --git a/src/main/java/com/android/tools/r8/shaking/RootSetUtils.java b/src/main/java/com/android/tools/r8/shaking/RootSetUtils.java
index 367a2fc..8678717 100644
--- a/src/main/java/com/android/tools/r8/shaking/RootSetUtils.java
+++ b/src/main/java/com/android/tools/r8/shaking/RootSetUtils.java
@@ -385,6 +385,8 @@
       }
       appView.withGeneratedMessageLiteShrinker(
           shrinker -> shrinker.extendRootSet(dependentMinimumKeepInfo));
+      appView.withGeneratedMessageLiteBuilderShrinker(
+          shrinker -> shrinker.extendRootSet(dependentMinimumKeepInfo));
       if (appView.options().protoShrinking().enableGeneratedMessageLiteBuilderShrinking) {
         GeneratedMessageLiteBuilderShrinker.addInliningHeuristicsForBuilderInlining(
             appView,
@@ -1236,7 +1238,7 @@
         assert item.isProgramDefinition();
         dependentMinimumKeepInfo
             .getOrCreateUnconditionalMinimumKeepInfoFor(item.getReference())
-            .disallowAccessModification();
+            .disallowAccessModificationForTesting();
         context.markAsUsed();
       } else if (context instanceof NoFieldTypeStrengtheningRule) {
         assert item.isProgramField();
diff --git a/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java b/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
index a7106fc..4ad6ef2 100644
--- a/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
+++ b/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
@@ -393,11 +393,7 @@
   // before merging [clazz] into its subtype.
   private boolean isStillMergeCandidate(DexProgramClass sourceClass, DexProgramClass targetClass) {
     assert isMergeCandidate(sourceClass, targetClass, pinnedTypes);
-    if (mergedClasses.containsValue(sourceClass.getType())) {
-      // Do not allow merging the resulting class into its subclass.
-      // TODO(christofferqa): Get rid of this limitation.
-      return false;
-    }
+    assert !mergedClasses.containsValue(sourceClass.getType());
     // For interface types, this is more complicated, see:
     // https://docs.oracle.com/javase/specs/jvms/se9/html/jvms-5.html#jvms-5.5
     // We basically can't move the clinit, since it is not called when implementing classes have
@@ -447,13 +443,14 @@
   }
 
   private boolean mergeMayLeadToIllegalAccesses(DexProgramClass source, DexProgramClass target) {
-    if (source.type.isSamePackage(target.type)) {
+    if (source.isSamePackage(target)) {
       // When merging two classes from the same package, we only need to make sure that [source]
       // does not get less visible, since that could make a valid access to [source] from another
       // package illegal after [source] has been merged into [target].
-      int accessLevel = source.isPrivate() ? 0 : (source.isPublic() ? 2 : 1);
-      int otherAccessLevel = target.isPrivate() ? 0 : (target.isPublic() ? 2 : 1);
-      return accessLevel > otherAccessLevel;
+      assert source.getAccessFlags().isPackagePrivateOrPublic();
+      assert target.getAccessFlags().isPackagePrivateOrPublic();
+      // TODO(b/287891322): Allow merging if `source` is only accessed from inside its own package.
+      return source.getAccessFlags().isPublic() && target.getAccessFlags().isPackagePrivate();
     }
 
     // Check that all accesses to [source] and its members from inside the current package of
@@ -801,12 +798,12 @@
 
     DexType singleSubtype = subtypingInfo.getSingleDirectSubtype(clazz.type);
     DexProgramClass targetClass = appView.definitionFor(singleSubtype).asProgramClass();
-    assert isMergeCandidate(clazz, targetClass, pinnedTypes);
     assert !mergedClasses.containsKey(targetClass.type);
-
-    boolean clazzOrTargetClassHasBeenMerged =
-        mergedClasses.containsValue(clazz.type) || mergedClasses.containsValue(targetClass.type);
-    if (clazzOrTargetClassHasBeenMerged) {
+    if (mergedClasses.containsValue(clazz.type)) {
+      return;
+    }
+    assert isMergeCandidate(clazz, targetClass, pinnedTypes);
+    if (mergedClasses.containsValue(targetClass.type)) {
       if (!isStillMergeCandidate(clazz, targetClass)) {
         return;
       }
@@ -907,7 +904,11 @@
             DexEncodedMethod definition = directMethod.getDefinition();
             if (definition.isInstanceInitializer()) {
               DexEncodedMethod resultingConstructor =
-                  renameConstructor(definition, availableMethodSignatures);
+                  renameConstructor(
+                      definition,
+                      candidate ->
+                          availableMethodSignatures.test(candidate)
+                              && source.lookupVirtualMethod(candidate) == null);
               add(directMethods, resultingConstructor, MethodSignatureEquivalence.get());
               blockRedirectionOfSuperCalls(resultingConstructor.getReference());
             } else {
diff --git a/src/main/java/com/android/tools/r8/utils/DescriptorUtils.java b/src/main/java/com/android/tools/r8/utils/DescriptorUtils.java
index 19b4d38..df0ac25 100644
--- a/src/main/java/com/android/tools/r8/utils/DescriptorUtils.java
+++ b/src/main/java/com/android/tools/r8/utils/DescriptorUtils.java
@@ -740,7 +740,8 @@
    * @param innerDescriptor the inner descriptor, such as Lfoo/bar/Baz$Qux;
    * @return the inner name or null, i.e. Qux in the example above
    */
-  public static String getInnerClassName(String outerDescriptor, String innerDescriptor) {
+  public static String getInnerClassNameFromDescriptor(
+      String outerDescriptor, String innerDescriptor) {
     if (innerDescriptor.length() <= outerDescriptor.length()) {
       return null;
     }
@@ -752,6 +753,18 @@
     return null;
   }
 
+  public static String getInnerClassNameFromSimpleName(
+      String outerSimpleName, String innerSimpleName) {
+    if (innerSimpleName.length() <= outerSimpleName.length()) {
+      return null;
+    }
+    String prefix = outerSimpleName + INNER_CLASS_SEPARATOR;
+    if (innerSimpleName.startsWith(prefix)) {
+      return innerSimpleName.substring(prefix.length());
+    }
+    return null;
+  }
+
   public static class ModuleAndDescriptor {
     private final String module;
     private final String descriptor;
diff --git a/src/main/java/com/android/tools/r8/utils/InternalOptions.java b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
index 6ef1691..c284670 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -828,6 +828,12 @@
     return proguardConfiguration.getKeepAttributes().runtimeInvisibleTypeAnnotations;
   }
 
+  @Override
+  public boolean isKeepPermittedSubclassesEnabled() {
+    return proguardConfiguration == null
+        || proguardConfiguration.getKeepAttributes().permittedSubclasses;
+  }
+
   /**
    * If any non-static class merging is enabled, information about types referred to by instanceOf
    * and check cast instructions needs to be collected.
@@ -1693,9 +1699,11 @@
       if (simpleInliningInstructionLimit >= 0) {
         return simpleInliningInstructionLimit;
       }
-      // Allow 2 instructions when using LIR regardless of backend.
+      // Allow 4 instructions when using LIR regardless of backend.
       if (options.testing.useLir) {
-        return 2;
+        // TODO(b/288226522): We should reevaluate this for size and other inputs as it regresses
+        //  compared to DEX code with limit 5. This is set to 4 to avoid discard errors in chrome.
+        return 4;
       }
       // Allow 3 instructions when generating to class files.
       if (options.isGeneratingClassFiles()) {
@@ -2097,9 +2105,39 @@
     }
 
     public boolean canUseLir(AppView<?> appView) {
-      return useLir
-          && appView.enableWholeProgramOptimizations()
-          && !appView.options().protoShrinking().isProtoShrinkingEnabled();
+      return useLir && appView.enableWholeProgramOptimizations();
+    }
+
+    // As part of integrating LIR the compiler is split in three phases: pre, supported, and post.
+    // Any attempt at building IR must have conversion options consistent with the active phase.
+    private enum LirPhase {
+      PRE,
+      SUPPORTED,
+      POST
+    }
+
+    private LirPhase currentPhase = LirPhase.PRE;
+
+    public void enterLirSupportedPhase() {
+      assert isPreLirPhase();
+      currentPhase = LirPhase.SUPPORTED;
+    }
+
+    public void exitLirSupportedPhase() {
+      assert isSupportedLirPhase();
+      currentPhase = LirPhase.POST;
+    }
+
+    public boolean isPreLirPhase() {
+      return currentPhase == LirPhase.PRE;
+    }
+
+    public boolean isSupportedLirPhase() {
+      return currentPhase == LirPhase.SUPPORTED;
+    }
+
+    public boolean isPostLirPhase() {
+      return currentPhase == LirPhase.POST;
     }
 
     // If false, use the desugared library implementation when desugared library is enabled.
@@ -2218,7 +2256,6 @@
      */
     public boolean addCallEdgesForLibraryInvokes = false;
 
-    public boolean allowCheckDiscardedErrors = false;
     public boolean allowClassInliningOfSynthetics = true;
     public boolean allowInjectedAnnotationMethods = false;
     public boolean allowInliningOfSynthetics = true;
@@ -2256,7 +2293,8 @@
     public BiConsumer<IRCode, AppView<?>> irModifier = null;
     public Consumer<IRCode> inlineeIrModifier = null;
     public int basicBlockMuncherIterationLimit = NO_LIMIT;
-    public boolean dontReportFailingCheckDiscarded = false;
+    public boolean dontReportFailingCheckDiscarded =
+        System.getProperty("com.android.tools.r8.testing.dontReportFailingCheckDiscarded") != null;
     public boolean disableRecordApplicationReaderMap = false;
     public boolean trackDesugaredAPIConversions =
         System.getProperty("com.android.tools.r8.trackDesugaredAPIConversions") != null;
diff --git a/src/main/java/com/android/tools/r8/utils/positions/MappedPositionToClassNameMapperBuilder.java b/src/main/java/com/android/tools/r8/utils/positions/MappedPositionToClassNameMapperBuilder.java
index 54efc7d..7fe3d32 100644
--- a/src/main/java/com/android/tools/r8/utils/positions/MappedPositionToClassNameMapperBuilder.java
+++ b/src/main/java/com/android/tools/r8/utils/positions/MappedPositionToClassNameMapperBuilder.java
@@ -79,6 +79,7 @@
       PositionRangeAllocator.createCardinalPositionRangeAllocator();
   private final NonCardinalPositionRangeAllocator nonCardinalRangeCache =
       PositionRangeAllocator.createNonCardinalPositionRangeAllocator();
+  private final int maxGap = 1000;
 
   private MappedPositionToClassNameMapperBuilder(
       AppView<?> appView, OriginalSourceFiles originalSourceFiles) {
@@ -301,7 +302,7 @@
           MappedPosition currentMappedPosition = mappedPositions.get(j);
           mappedPositionRange =
               mappedPositionRange.canAddNextMappingToRange(
-                  lastMappedPosition, currentMappedPosition);
+                  lastMappedPosition, currentMappedPosition, maxGap);
           // Note that currentPosition.caller and lastPosition.class must be deep-compared since
           // multiple inlining passes lose the canonical property of the positions.
           Position currentPosition = currentMappedPosition.getPosition();
@@ -538,7 +539,7 @@
     }
 
     public MappedPositionRange canAddNextMappingToRange(
-        MappedPosition lastPosition, MappedPosition currentPosition) {
+        MappedPosition lastPosition, MappedPosition currentPosition, int maxGap) {
       if (isOutOfRange()) {
         return this;
       }
@@ -562,10 +563,12 @@
         // We cannot recover a delta encoding if we have had range to single encoding.
         return OUT_OF_RANGE;
       }
+      int gap = currentPosition.getObfuscatedLine() - lastPosition.getObfuscatedLine();
+      boolean gapLessThanMaxGap = gap >= 0 && gap <= maxGap;
       boolean sameDelta =
           currentOriginalLine - lastOriginalLine
               == currentPosition.getObfuscatedLine() - lastPosition.getObfuscatedLine();
-      return sameDelta ? SAME_DELTA : OUT_OF_RANGE;
+      return (gapLessThanMaxGap && sameDelta) ? SAME_DELTA : OUT_OF_RANGE;
     }
   }
 
diff --git a/src/test/examples/classmerging/ConflictInGeneratedNameTest.java b/src/test/examples/classmerging/ConflictInGeneratedNameTest.java
index 528f9bf..e76a8e3 100644
--- a/src/test/examples/classmerging/ConflictInGeneratedNameTest.java
+++ b/src/test/examples/classmerging/ConflictInGeneratedNameTest.java
@@ -51,6 +51,7 @@
     }
 
     // There is a private method in B with the same name as this one.
+    @NoAccessModification
     private String getName() {
       return name;
     }
@@ -101,10 +102,12 @@
       super.boo();
     }
 
+    @NoAccessModification
     private void boo$classmerging$ConflictInGeneratedNameTest$A() {
       print("In B.boo$classmerging$ConflictInGeneratedNameTest$A()");
     }
 
+    @NoAccessModification
     private String getName() {
       return name;
     }
diff --git a/src/test/examples/classmerging/NoAccessModification.java b/src/test/examples/classmerging/NoAccessModification.java
new file mode 100644
index 0000000..b78d447
--- /dev/null
+++ b/src/test/examples/classmerging/NoAccessModification.java
@@ -0,0 +1,10 @@
+// Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package classmerging;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Target;
+
+@Target({ElementType.METHOD, ElementType.TYPE})
+public @interface NoAccessModification {}
diff --git a/src/test/examples/classmerging/SimpleInterfaceAccessTest.java b/src/test/examples/classmerging/SimpleInterfaceAccessTest.java
index 804b4ed..56095b5 100644
--- a/src/test/examples/classmerging/SimpleInterfaceAccessTest.java
+++ b/src/test/examples/classmerging/SimpleInterfaceAccessTest.java
@@ -45,6 +45,7 @@
     void bar();
   }
 
+  @NoAccessModification
   private static class OtherSimpleInterfaceImpl implements OtherSimpleInterface {
 
     @Override
diff --git a/src/test/examples/classmerging/keep-rules.txt b/src/test/examples/classmerging/keep-rules.txt
index 8b87740..316bf73 100644
--- a/src/test/examples/classmerging/keep-rules.txt
+++ b/src/test/examples/classmerging/keep-rules.txt
@@ -73,5 +73,7 @@
   @classmerging.NeverInline <methods>;
 }
 -neverpropagatevalue class * { @classmerging.NeverPropagateValue *; }
+-noaccessmodification @classmerging.NoAccessModification class *
+-noaccessmodification class * { @classmerging.NoAccessModification *; }
 -nohorizontalclassmerging @classmerging.NoHorizontalClassMerging class *
 -noredundantfieldloadelimination class * { @classmerging.NoRedundantFieldLoadElimination *; }
diff --git a/src/test/examples/classmerging/pkg/SimpleInterfaceImplRetriever.java b/src/test/examples/classmerging/pkg/SimpleInterfaceImplRetriever.java
index 22391e9..63ae103 100644
--- a/src/test/examples/classmerging/pkg/SimpleInterfaceImplRetriever.java
+++ b/src/test/examples/classmerging/pkg/SimpleInterfaceImplRetriever.java
@@ -4,6 +4,7 @@
 
 package classmerging.pkg;
 
+import classmerging.NoAccessModification;
 import classmerging.SimpleInterfaceAccessTest.SimpleInterface;
 
 public class SimpleInterfaceImplRetriever {
@@ -15,6 +16,7 @@
   // This class is intentionally marked private. It is not possible to merge the interface
   // SimpleInterface into SimpleInterfaceImpl, since this would lead to an illegal class access
   // in SimpleInterfaceAccessTest.
+  @NoAccessModification
   private static class SimpleInterfaceImpl implements SimpleInterface {
 
     @Override
diff --git a/src/test/examples/inlining/InlineConstructor.java b/src/test/examples/inlining/InlineConstructor.java
index 09973fd..87d3a1d 100644
--- a/src/test/examples/inlining/InlineConstructor.java
+++ b/src/test/examples/inlining/InlineConstructor.java
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 package inlining;
 
+@NoHorizontalClassMerging
 class InlineConstructor {
 
   int a;
diff --git a/src/test/examples/inlining/keep-rules-discard.txt b/src/test/examples/inlining/keep-rules-discard.txt
index 1021e5d..6f93c15 100644
--- a/src/test/examples/inlining/keep-rules-discard.txt
+++ b/src/test/examples/inlining/keep-rules-discard.txt
@@ -20,3 +20,5 @@
 -neverinline class * {
   @inlining.NeverInline <methods>;
 }
+
+-nohorizontalclassmerging @inlining.NoHorizontalClassMerging class *
diff --git a/src/test/examples/memberrebinding2/NoAccessModification.java b/src/test/examples/memberrebinding2/NoAccessModification.java
new file mode 100644
index 0000000..0feebb6
--- /dev/null
+++ b/src/test/examples/memberrebinding2/NoAccessModification.java
@@ -0,0 +1,10 @@
+// Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package memberrebinding2;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Target;
+
+@Target({ElementType.TYPE})
+public @interface NoAccessModification {}
diff --git a/src/test/examples/memberrebinding2/keep-rules.txt b/src/test/examples/memberrebinding2/keep-rules.txt
index ae40c43..b405146 100644
--- a/src/test/examples/memberrebinding2/keep-rules.txt
+++ b/src/test/examples/memberrebinding2/keep-rules.txt
@@ -9,4 +9,6 @@
 }
 
 # Remove once b/62048823 is fixed.
--allowaccessmodification
\ No newline at end of file
+-allowaccessmodification
+
+-noaccessmodification @memberrebinding2.NoAccessModification class *
diff --git a/src/test/examples/memberrebinding2/subpackage/PackagePrivateClass.java b/src/test/examples/memberrebinding2/subpackage/PackagePrivateClass.java
index 733776c..a8ab2c6 100644
--- a/src/test/examples/memberrebinding2/subpackage/PackagePrivateClass.java
+++ b/src/test/examples/memberrebinding2/subpackage/PackagePrivateClass.java
@@ -3,6 +3,9 @@
 // BSD-style license that can be found in the LICENSE file.
 package memberrebinding2.subpackage;
 
+import memberrebinding2.NoAccessModification;
+
+@NoAccessModification
 abstract class PackagePrivateClass {
 
   public static int staticField;
diff --git a/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java b/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java
index 802e714..6aa0a30 100644
--- a/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java
+++ b/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java
@@ -463,37 +463,38 @@
       "1337-gc-coverage"
   );
 
-  private static List<String> expectedToFailRunWithArtNonDefault = ImmutableList.of(
-      // Fails due to missing symbol, jni tests, fails on non-R8/D8 run.
-      "004-JniTest",
-      "004-SignalTest",
-      "004-ThreadStress",
-      "004-UnsafeTest",
-      "044-proxy",
-      "051-thread",
-      "136-daemon-jni-shutdown",
-      "139-register-natives",
-      "148-multithread-gc-annotations",
-      "149-suspend-all-stress",
-      "154-gc-loop",
-      "155-java-set-resolved-type",
-      "157-void-class",
-      "158-app-image-class-table",
-      "466-get-live-vreg",
-      "497-inlining-and-class-loader",
-      "566-polymorphic-inlining",
-      "596-app-images",
-      "616-cha",
-      "616-cha-abstract",
-      "616-cha-regression-proxy-method",
-      "616-cha-native",
-      "626-set-resolved-string",
-      "629-vdex-speed",
-      "1337-gc-coverage",
+  private static List<String> expectedToFailRunWithArtNonDefault =
+      ImmutableList.of(
+          // Fails due to missing symbol, jni tests, fails on non-R8/D8 run.
+          "004-JniTest",
+          "004-SignalTest",
+          "004-ThreadStress",
+          "004-UnsafeTest",
+          "044-proxy",
+          "051-thread",
+          "136-daemon-jni-shutdown",
+          "139-register-natives",
+          "148-multithread-gc-annotations",
+          "149-suspend-all-stress",
+          "154-gc-loop",
+          "155-java-set-resolved-type",
+          "157-void-class",
+          "158-app-image-class-table",
+          "466-get-live-vreg",
+          "497-inlining-and-class-loader",
+          "566-polymorphic-inlining",
+          "537-checker-inline-and-unverified",
+          "596-app-images",
+          "616-cha",
+          "616-cha-abstract",
+          "616-cha-regression-proxy-method",
+          "616-cha-native",
+          "626-set-resolved-string",
+          "629-vdex-speed",
+          "1337-gc-coverage",
 
-      // Fails on non-R8/D8 run
-      "031-class-attributes"
-  );
+          // Fails on non-R8/D8 run
+          "031-class-attributes");
 
   private static Map<DexVm.Version, List<String>> expectedToFailRunWithArtVersion;
 
@@ -764,11 +765,12 @@
           // by the program at runtime.
           .put("005-annotations", TestCondition.match(TestCondition.D8_COMPILER))
           // On Art 4.4.4 we have fewer refs than expected (except for d8 when compiled with dx).
-          .put("072-precise-gc",
+          .put(
+              "072-precise-gc",
               TestCondition.match(
-                  TestCondition.R8_COMPILER,
-                  TestCondition.runtimesUpTo(DexVm.Version.V4_4_4)))
-          .put("072-precise-gc",
+                  TestCondition.R8_COMPILER, TestCondition.runtimesUpTo(DexVm.Version.V4_4_4)))
+          .put(
+              "072-precise-gc",
               TestCondition.match(
                   TestCondition.tools(DexTool.NONE),
                   TestCondition.D8_COMPILER,
@@ -779,16 +781,23 @@
           .put("099-vmdebug", TestCondition.any())
           // This test relies on output on stderr, which we currently do not collect.
           .put("143-string-value", TestCondition.any())
-          .put("800-smali",
+          .put(
+              "800-smali",
               TestCondition.match(
                   TestCondition.D8_COMPILER,
                   TestCondition.runtimes(DexVm.Version.V5_1_1, DexVm.Version.V6_0_1)))
           // Triggers regression test in 6.0.1 when using R8/D8 in debug mode.
-          .put("474-fp-sub-neg",
+          .put(
+              "474-fp-sub-neg",
               TestCondition.match(
                   TestCondition.tools(DexTool.NONE),
                   TestCondition.D8_NOT_AFTER_R8CF_COMPILER,
                   TestCondition.runtimes(DexVm.Version.V6_0_1)))
+          .put(
+              "536-checker-needs-access-check",
+              // DEX VMs incorrectly check access before checking null-value in instanceof.
+              // See IllegalAccessDeadInstanceOfTest and b/288376353.
+              TestCondition.anyDexVm())
           .build();
 
   private static final TestCondition beforeAndroidN =
@@ -1168,12 +1177,34 @@
           "958-methodhandle-stackframe",
           "1338-gc-no-los");
 
+  private static final String NO_CLASS_ACCESS_MODIFICATION_RULE =
+      "-keep,allowobfuscation,allowoptimization,allowshrinking class *";
+  private static final String NO_MEMBER_ACCESS_MODIFICATION_RULE =
+      "-keepclassmembers,allowobfuscation,allowoptimization,allowshrinking class * { *; }";
+
   private static Map<String, List<String>> keepRules =
       ImmutableMap.of(
+          "005-annotations",
+          ImmutableList.of(NO_MEMBER_ACCESS_MODIFICATION_RULE),
           "021-string2",
           ImmutableList.of("-dontwarn junit.framework.**"),
+          "042-new-instance",
+          ImmutableList.of(NO_MEMBER_ACCESS_MODIFICATION_RULE),
+          "046-reflect",
+          ImmutableList.of(NO_MEMBER_ACCESS_MODIFICATION_RULE),
+          "064-field-access",
+          ImmutableList.of(NO_MEMBER_ACCESS_MODIFICATION_RULE),
           "082-inline-execute",
           ImmutableList.of("-dontwarn junit.framework.**"),
+          "100-reflect2",
+          ImmutableList.of(NO_CLASS_ACCESS_MODIFICATION_RULE),
+          "301-abstract-protected",
+          ImmutableList.of(
+              "-keepclassmembers,allowobfuscation,allowoptimization,allowshrinking class Abstract {"
+                  + "  protected abstract java.lang.String m();"
+                  + "}"),
+          "435-new-instance",
+          ImmutableList.of(NO_CLASS_ACCESS_MODIFICATION_RULE),
           // Constructor MakeBoundType.<init>(int) is called using reflection.
           "476-checker-ctor-fence-redun-elim",
           ImmutableList.of(
@@ -1566,6 +1597,7 @@
       if (configuration != null) {
         configuration.accept(options);
       }
+      options.getAccessModifierOptions().setForceModifyPackagePrivateAndProtectedMethods(false);
     }
 
     @Override
diff --git a/src/test/java/com/android/tools/r8/TestBase.java b/src/test/java/com/android/tools/r8/TestBase.java
index 35eb6dd..ec3a345 100644
--- a/src/test/java/com/android/tools/r8/TestBase.java
+++ b/src/test/java/com/android/tools/r8/TestBase.java
@@ -1757,6 +1757,11 @@
         && parameters.getApiLevel().isGreaterThanOrEqualTo(AndroidApiLevel.N);
   }
 
+  // TODO(b/131130038): Do not allow accessmodification when kept.
+  public boolean isForceAccessModifyingPackagePrivateAndProtectedMethods() {
+    return true;
+  }
+
   public Path compileToZip(
       TestParameters parameters, Collection<Class<?>> classPath, Class<?>... compilationUnit)
       throws Exception {
diff --git a/src/test/java/com/android/tools/r8/TestParameters.java b/src/test/java/com/android/tools/r8/TestParameters.java
index c792710..76f237b 100644
--- a/src/test/java/com/android/tools/r8/TestParameters.java
+++ b/src/test/java/com/android/tools/r8/TestParameters.java
@@ -120,6 +120,14 @@
     return isDexRuntime() && getApiLevel().isGreaterThanOrEqualTo(AndroidApiLevel.U);
   }
 
+  public boolean isAccessModificationEnabled(boolean allowAccessModification) {
+    return allowAccessModification || isAccessModificationEnabledByDefault();
+  }
+
+  public boolean isAccessModificationEnabledByDefault() {
+    return true;
+  }
+
   public boolean runtimeWithClassValue() {
     assert isCfRuntime() || isDexRuntime();
     return isCfRuntime() || getDexRuntimeVersion().isNewerThanOrEqual(DexVm.Version.V14_0_0);
diff --git a/src/test/java/com/android/tools/r8/TestShrinkerBuilder.java b/src/test/java/com/android/tools/r8/TestShrinkerBuilder.java
index cfd2a95..f27b3b8 100644
--- a/src/test/java/com/android/tools/r8/TestShrinkerBuilder.java
+++ b/src/test/java/com/android/tools/r8/TestShrinkerBuilder.java
@@ -13,6 +13,7 @@
 import com.android.tools.r8.utils.FileUtils;
 import com.android.tools.r8.utils.OptionalBool;
 import com.android.tools.r8.utils.StringUtils;
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Sets;
 import java.io.IOException;
 import java.lang.annotation.Annotation;
@@ -243,6 +244,24 @@
     return self();
   }
 
+  private final List<String> keepModifiers =
+      ImmutableList.of(
+          // TODO: Add allowannotationremoval (currently requires options.isTestingOptionsEnabled())
+          // TODO: Add (optional) allowshrinking as well?
+          "allowobfuscation", "allowoptimization", "allowrepackage");
+
+  public T addKeepPermittedSubclasses(Class<?>... classes) {
+    return addKeepPermittedSubclasses(
+        Arrays.stream(classes).map(Class::getTypeName).toArray(String[]::new));
+  }
+
+  public T addKeepPermittedSubclasses(String... classes) {
+    for (String clazz : classes) {
+      addKeepRules("-keep," + String.join(",", keepModifiers) + " class " + clazz);
+    }
+    return self();
+  }
+
   public T addKeepClassAndMembersRules(Class<?>... classes) {
     return addKeepClassAndMembersRules(
         Arrays.stream(classes).map(Class::getTypeName).toArray(String[]::new));
@@ -446,6 +465,10 @@
     return addKeepAttributes(ProguardKeepAttributes.RUNTIME_INVISIBLE_TYPE_ANNOTATIONS);
   }
 
+  public T addKeepAttributePermittedSubclasses() {
+    return addKeepAttributes(ProguardKeepAttributes.PERMITTED_SUBCLASSES);
+  }
+
   public T addKeepAllAttributes() {
     return addKeepAttributes("*");
   }
diff --git a/src/test/java/com/android/tools/r8/ToolHelper.java b/src/test/java/com/android/tools/r8/ToolHelper.java
index 069acbf..42b728e 100644
--- a/src/test/java/com/android/tools/r8/ToolHelper.java
+++ b/src/test/java/com/android/tools/r8/ToolHelper.java
@@ -101,16 +101,19 @@
   }
 
   public static String getProjectRoot() {
-    String userDirProperty = System.getProperty("user.dir");
-    if (userDirProperty.endsWith("d8_r8/test")) {
-      return Paths.get(userDirProperty).getParent().getParent().toString() + "/";
+    String current = System.getProperty("user.dir");
+    if (!current.contains("test_modules")) {
+      return "";
     }
-    return "";
+    while (current.contains("test_modules")) {
+      current = Paths.get(current).getParent().toString();
+    }
+    return Paths.get(current).getParent().toString() + "/";
   }
 
   public static final String SOURCE_DIR = "src/main/java/";
   public static final String RESOURCES_DIR = "src/main/resources/";
-  public static final String BUILD_DIR = "build/";
+  public static final String BUILD_DIR = getProjectRoot() + "build/";
   public static final String TEST_MODULE_DIR = getProjectRoot() + "d8_r8/test_modules/";
   public static final String GENERATED_TEST_BUILD_DIR = BUILD_DIR + "generated/test/";
   public static final String LIBS_DIR = BUILD_DIR + "libs/";
@@ -135,8 +138,7 @@
   public static final String EXAMPLES_JAVA11_BUILD_DIR = BUILD_DIR + "classes/java/examplesJava11/";
   public static final String EXAMPLES_PROTO_BUILD_DIR = TESTS_BUILD_DIR + "examplesProto/";
   public static final String GENERATED_PROTO_BUILD_DIR = GENERATED_TEST_BUILD_DIR + "proto/";
-  public static final String SMALI_DIR = TESTS_DIR + "smali/";
-  public static final String SMALI_BUILD_DIR = TESTS_BUILD_DIR + "smali/";
+  public static final String SMALI_BUILD_DIR = THIRD_PARTY_DIR + "smali/";
   public static final String JAVA_CLASSES_DIR = BUILD_DIR + "classes/java/";
   public static final String JDK_11_TESTS_CLASSES_DIR = JAVA_CLASSES_DIR + "jdk11Tests/";
 
@@ -972,7 +974,7 @@
     }
     if (isLinux() || isMac()) {
       // The Linux version is used on Mac, where it is run in a Docker container.
-      return TOOLS_DIR + "/linux/" + dir;
+      return TOOLS_DIR + "linux/" + dir;
     }
     fail("Unsupported platform, we currently only support mac and linux: " + getPlatform());
     return ""; //never here
@@ -1305,7 +1307,7 @@
 
   public static Path getClassPathForTests() {
     if (isNewGradleSetup()) {
-      return Paths.get(TEST_MODULE_DIR, "tests_java_8", "build", "classes", "java", "main");
+      return Paths.get(TEST_MODULE_DIR, "tests_java_8", "build", "classes", "java", "test");
     } else {
       return Paths.get(BUILD_DIR, "classes", "java", "test");
     }
diff --git a/src/test/java/com/android/tools/r8/accessrelaxation/AccessRelaxationByDefaultTest.java b/src/test/java/com/android/tools/r8/accessrelaxation/AccessRelaxationByDefaultTest.java
new file mode 100644
index 0000000..cf4b361
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/accessrelaxation/AccessRelaxationByDefaultTest.java
@@ -0,0 +1,131 @@
+// Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+package com.android.tools.r8.accessrelaxation;
+
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPublic;
+import static com.android.tools.r8.utils.codeinspector.Matchers.onlyIf;
+import static org.hamcrest.CoreMatchers.not;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+import com.android.tools.r8.NeverClassInline;
+import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoHorizontalClassMerging;
+import com.android.tools.r8.NoVerticalClassMerging;
+import com.android.tools.r8.TestBase;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public class AccessRelaxationByDefaultTest extends TestBase {
+
+  @Parameter(0)
+  public TestParameters parameters;
+
+  @Parameters(name = "{0}")
+  public static TestParametersCollection data() {
+    return getTestParameters().withAllRuntimesAndApiLevels().build();
+  }
+
+  @Test
+  public void testR8() throws Exception {
+    runTest(false);
+  }
+
+  @Test
+  public void testR8Compat() throws Exception {
+    runTest(true);
+  }
+
+  private void runTest(boolean isCompat) throws Exception {
+    testForR8Compat(parameters.getBackend(), isCompat)
+        .addInnerClasses(getClass())
+        .addKeepMainRule(Main.class)
+        .addKeepClassRules(B.class)
+        .enableInliningAnnotations()
+        .enableNeverClassInliningAnnotations()
+        .enableNoHorizontalClassMergingAnnotations()
+        .enableNoVerticalClassMergingAnnotations()
+        .setMinApi(parameters)
+        .compile()
+        .inspect(
+            inspector -> {
+              ClassSubject aClassSubject = inspector.clazz(A.class);
+              assertThat(aClassSubject, isPresent());
+              assertThat(aClassSubject, onlyIf(!isCompat, isPublic())); // Always publicized.
+
+              MethodSubject fooMethodSubject = aClassSubject.uniqueMethodWithOriginalName("foo");
+              assertThat(fooMethodSubject, isPresent());
+              assertThat(
+                  fooMethodSubject, onlyIf(parameters.isDexRuntime() && !isCompat, isPublic()));
+
+              ClassSubject bClassSubject = inspector.clazz(B.class);
+              assertThat(bClassSubject, isPresent());
+              assertThat(bClassSubject, not(isPublic())); // Kept, so never publicized.
+
+              MethodSubject barMethodSubject = bClassSubject.uniqueMethodWithOriginalName("bar");
+              assertThat(barMethodSubject, isPresent());
+              assertThat(
+                  barMethodSubject, onlyIf(parameters.isDexRuntime() && !isCompat, isPublic()));
+
+              ClassSubject cClassSubject = inspector.clazz(C.class);
+              assertThat(cClassSubject, isPresent());
+              assertThat(cClassSubject, onlyIf(!isCompat, isPublic())); // Always publicized.
+
+              MethodSubject bazMethodSubject = cClassSubject.uniqueMethodWithOriginalName("baz");
+              assertThat(bazMethodSubject, isPresent());
+              assertThat(bazMethodSubject, onlyIf(!isCompat, isPublic())); // Always publicized.
+            })
+        .run(parameters.getRuntime(), Main.class)
+        .assertSuccessWithOutputLines("A.foo()", "B.bar()", "C.baz()");
+  }
+
+  static class Main {
+
+    public static void main(String[] args) {
+      new A().foo();
+      new B().bar();
+      new C().baz();
+    }
+  }
+
+  @NeverClassInline
+  @NoHorizontalClassMerging
+  @NoVerticalClassMerging
+  static class A {
+
+    @NeverInline
+    void foo() {
+      System.out.println("A.foo()");
+    }
+  }
+
+  // @Keep
+  @NeverClassInline
+  static class B extends A {
+
+    @NeverInline
+    void bar() {
+      System.out.println("B.bar()");
+    }
+  }
+
+  @NeverClassInline
+  @NoHorizontalClassMerging
+  static class C {
+
+    @NeverInline
+    void baz() {
+      System.out.println("C.baz()");
+    }
+  }
+}
diff --git a/src/test/java/com/android/tools/r8/accessrelaxation/EffectiveFinalFieldMarkedFinalTest.java b/src/test/java/com/android/tools/r8/accessrelaxation/EffectiveFinalFieldMarkedFinalTest.java
index d491189..364b35e 100644
--- a/src/test/java/com/android/tools/r8/accessrelaxation/EffectiveFinalFieldMarkedFinalTest.java
+++ b/src/test/java/com/android/tools/r8/accessrelaxation/EffectiveFinalFieldMarkedFinalTest.java
@@ -7,7 +7,6 @@
 import static com.android.tools.r8.utils.codeinspector.Matchers.isFinal;
 import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
 import static com.android.tools.r8.utils.codeinspector.Matchers.onlyIf;
-import static org.hamcrest.CoreMatchers.allOf;
 import static org.hamcrest.MatcherAssert.assertThat;
 
 import com.android.tools.r8.NoRedundantFieldLoadElimination;
@@ -51,11 +50,18 @@
               ClassSubject mainClassSubject = inspector.clazz(Main.class);
               assertThat(mainClassSubject, isPresent());
               assertThat(
+                  mainClassSubject.uniqueFieldWithOriginalName("instanceField"), isPresent());
+              assertThat(
                   mainClassSubject.uniqueFieldWithOriginalName("instanceField"),
-                  allOf(isPresent(), onlyIf(allowAccessModification, isFinal())));
+                  onlyIf(
+                      parameters.isAccessModificationEnabled(allowAccessModification)
+                          && !parameters.canInitNewInstanceUsingSuperclassConstructor(),
+                      isFinal()));
+              assertThat(mainClassSubject.uniqueFieldWithOriginalName("staticField"), isPresent());
               assertThat(
                   mainClassSubject.uniqueFieldWithOriginalName("staticField"),
-                  allOf(isPresent(), onlyIf(allowAccessModification, isFinal())));
+                  onlyIf(
+                      parameters.isAccessModificationEnabled(allowAccessModification), isFinal()));
             })
         .run(parameters.getRuntime(), Main.class)
         .assertSuccessWithOutputLines("Hello, world!");
diff --git a/src/test/java/com/android/tools/r8/accessrelaxation/PackagePrivateNonOverridePublicizerTest.java b/src/test/java/com/android/tools/r8/accessrelaxation/PackagePrivateNonOverridePublicizerTest.java
index f253c40..0d6d2ee 100644
--- a/src/test/java/com/android/tools/r8/accessrelaxation/PackagePrivateNonOverridePublicizerTest.java
+++ b/src/test/java/com/android/tools/r8/accessrelaxation/PackagePrivateNonOverridePublicizerTest.java
@@ -5,7 +5,7 @@
 package com.android.tools.r8.accessrelaxation;
 
 import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
-import static org.hamcrest.CoreMatchers.not;
+import static com.android.tools.r8.utils.codeinspector.Matchers.notIf;
 import static org.hamcrest.MatcherAssert.assertThat;
 
 import com.android.tools.r8.NeverClassInline;
@@ -65,14 +65,15 @@
         .assertSuccessWithOutputLines(EXPECTED)
         .inspect(
             inspector -> {
-              ClassSubject clazz = inspector.clazz(ViewModel.class);
               // ViewModel.clear() is package private. When we publicize the method, we can inline
               // the clearBridge() into Main and thereby remove the ViewModel class entirely.
-              if (allowAccessModification) {
-                assertThat(clazz, not(isPresent()));
-              } else {
-                assertThat(clazz, isPresent());
-              }
+              ClassSubject clazz = inspector.clazz(ViewModel.class);
+              assertThat(
+                  clazz,
+                  notIf(
+                      isPresent(),
+                      allowAccessModification
+                          || parameters.isAccessModificationEnabledByDefault()));
             });
   }
 
diff --git a/src/test/java/com/android/tools/r8/apimodel/ApiModelFieldAssignNewInstanceTest.java b/src/test/java/com/android/tools/r8/apimodel/ApiModelFieldAssignNewInstanceTest.java
index 4145d38..14f996d 100644
--- a/src/test/java/com/android/tools/r8/apimodel/ApiModelFieldAssignNewInstanceTest.java
+++ b/src/test/java/com/android/tools/r8/apimodel/ApiModelFieldAssignNewInstanceTest.java
@@ -13,6 +13,7 @@
 import static org.junit.Assume.assumeTrue;
 
 import com.android.tools.r8.CompilationMode;
+import com.android.tools.r8.NoAccessModification;
 import com.android.tools.r8.SingleTestRunResult;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestCompileResult;
@@ -29,7 +30,7 @@
 import org.junit.runners.Parameterized.Parameter;
 import org.junit.runners.Parameterized.Parameters;
 
-/** This i a regression test for b/269097876. */
+/** This is a regression test for b/269097876. */
 @RunWith(Parameterized.class)
 public class ApiModelFieldAssignNewInstanceTest extends TestBase {
 
@@ -134,6 +135,7 @@
     testForR8(parameters.getBackend())
         .apply(this::setupTestBuilder)
         .addKeepMainRule(Main.class)
+        .enableNoAccessModificationAnnotationsForMembers()
         .compile()
         .inspect(this::inspect)
         .apply(this::setupRuntime)
@@ -178,7 +180,7 @@
 
   public static class Helper {
 
-    private LibraryClass libraryClass;
+    @NoAccessModification private LibraryClass libraryClass;
 
     public void setLibraryClass() {
       if (AndroidBuildVersion.VERSION >= 30) {
diff --git a/src/test/java/com/android/tools/r8/apimodel/ApiModelNoInliningOfHigherApiLevelInterfaceTest.java b/src/test/java/com/android/tools/r8/apimodel/ApiModelNoInliningOfHigherApiLevelInterfaceTest.java
index 668bea6..8bd3d88 100644
--- a/src/test/java/com/android/tools/r8/apimodel/ApiModelNoInliningOfHigherApiLevelInterfaceTest.java
+++ b/src/test/java/com/android/tools/r8/apimodel/ApiModelNoInliningOfHigherApiLevelInterfaceTest.java
@@ -10,6 +10,7 @@
 
 import com.android.tools.r8.KeepConstantArguments;
 import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
 import com.android.tools.r8.NoHorizontalClassMerging;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
@@ -48,6 +49,7 @@
         .addKeepMainRule(Main.class)
         .enableConstantArgumentAnnotations()
         .enableInliningAnnotations()
+        .enableNoAccessModificationAnnotationsForClasses()
         .enableNoHorizontalClassMergingAnnotations()
         .apply(setMockApiLevelForClass(Api.class, AndroidApiLevel.L_MR1))
         .apply(setMockApiLevelForMethod(apiMethod, AndroidApiLevel.L_MR1))
@@ -92,15 +94,14 @@
   public static class Main {
 
     public static void main(String[] args) {
-      A.noApiCall(
-          args.length > 0
-              ? new Api() {
-                @Override
-                public void apiLevel22() {
-                  throw new RuntimeException("Foo");
-                }
-              }
-              : null);
+      @NoAccessModification
+      class ApiImpl implements Api {
+        @Override
+        public void apiLevel22() {
+          throw new RuntimeException("Foo");
+        }
+      }
+      A.noApiCall(args.length > 0 ? new ApiImpl() : null);
     }
   }
 }
diff --git a/src/test/java/com/android/tools/r8/bridgeremoval/BridgeWithInvokeSuperTest.java b/src/test/java/com/android/tools/r8/bridgeremoval/BridgeWithInvokeSuperTest.java
index 93795cf..3ff48dc 100644
--- a/src/test/java/com/android/tools/r8/bridgeremoval/BridgeWithInvokeSuperTest.java
+++ b/src/test/java/com/android/tools/r8/bridgeremoval/BridgeWithInvokeSuperTest.java
@@ -4,10 +4,10 @@
 
 package com.android.tools.r8.bridgeremoval;
 
-import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
-import static org.hamcrest.CoreMatchers.not;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresentIf;
 import static org.hamcrest.MatcherAssert.assertThat;
 
+import com.android.tools.r8.NeverClassInline;
 import com.android.tools.r8.NeverInline;
 import com.android.tools.r8.NoVerticalClassMerging;
 import com.android.tools.r8.TestBase;
@@ -51,18 +51,20 @@
         .addProgramClassFileData(getAWithBridgeAccessFlag())
         .setMinApi(parameters)
         .addKeepMainRule(Main.class)
-        .enableNoVerticalClassMergingAnnotations()
         .enableInliningAnnotations()
+        .enableNeverClassInliningAnnotations()
+        .enableNoVerticalClassMergingAnnotations()
         .compile()
         .inspect(
             inspector -> {
+              boolean canUseDefaultAndStaticInterfaceMethods =
+                  parameters.canUseDefaultAndStaticInterfaceMethods();
               // Check that we are removing the bridge if we support default methods.
-              if (parameters.canUseDefaultAndStaticInterfaceMethods()) {
-                ClassSubject A = inspector.clazz(A.class);
-                assertThat(A, isPresent());
-                MethodSubject fooMethod = A.uniqueMethodWithOriginalName("foo");
-                assertThat(fooMethod, not(isPresent()));
-              }
+              ClassSubject A = inspector.clazz(A.class);
+              assertThat(A, isPresentIf(!canUseDefaultAndStaticInterfaceMethods));
+
+              MethodSubject fooMethod = A.uniqueMethodWithOriginalName("foo");
+              assertThat(fooMethod, isPresentIf(!canUseDefaultAndStaticInterfaceMethods));
             })
         .run(parameters.getRuntime(), Main.class)
         .assertSuccessWithOutputLines(EXPECTED);
@@ -83,6 +85,7 @@
     }
   }
 
+  @NeverClassInline
   public static class A implements I {
 
     @Override
diff --git a/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/BridgeHoistingAccessibilityTest.java b/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/BridgeHoistingAccessibilityTest.java
index 2868cd8..2a2f7e9 100644
--- a/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/BridgeHoistingAccessibilityTest.java
+++ b/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/BridgeHoistingAccessibilityTest.java
@@ -9,6 +9,7 @@
 import com.android.tools.r8.KeepConstantArguments;
 import com.android.tools.r8.NeverClassInline;
 import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
 import com.android.tools.r8.NoMethodStaticizing;
 import com.android.tools.r8.NoVerticalClassMerging;
 import com.android.tools.r8.TestBase;
@@ -75,6 +76,7 @@
         .addKeepMainRule(TestClass.class)
         .enableConstantArgumentAnnotations()
         .enableInliningAnnotations()
+        .enableNoAccessModificationAnnotationsForMembers()
         .enableNoHorizontalClassMergingAnnotations()
         .enableNoMethodStaticizingAnnotations()
         .enableNoVerticalClassMergingAnnotations()
@@ -127,6 +129,7 @@
     // in TestClass.main().
     @KeepConstantArguments
     @NeverInline
+    @NoAccessModification
     @NoMethodStaticizing
     /*bridge*/ String bridgeB(Object o) {
       return (String) m((String) o);
@@ -154,6 +157,7 @@
     // in TestClass.main().
     @KeepConstantArguments
     @NeverInline
+    @NoAccessModification
     @NoMethodStaticizing
     /*bridge*/ String bridgeB(Object o, int a, int b, int c, int d, int e) {
       return (String) m((String) o, a, b, c, d, e);
diff --git a/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/NonReboundBridgeHoistingTest.java b/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/NonReboundBridgeHoistingTest.java
index 06f1e31..517edfe 100644
--- a/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/NonReboundBridgeHoistingTest.java
+++ b/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/NonReboundBridgeHoistingTest.java
@@ -43,6 +43,7 @@
             transformer(C.class).setBridge(C.class.getDeclaredMethod("bridge")).transform())
         .addKeepMainRule(TestClass.class)
         .enableInliningAnnotations()
+        .enableNoAccessModificationAnnotationsForClasses()
         .enableNoVerticalClassMergingAnnotations()
         .enableNeverClassInliningAnnotations()
         .setMinApi(parameters)
diff --git a/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/testclasses/NonReboundBridgeHoistingTestClasses.java b/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/testclasses/NonReboundBridgeHoistingTestClasses.java
index c419f7f..7a40b3f 100644
--- a/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/testclasses/NonReboundBridgeHoistingTestClasses.java
+++ b/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/testclasses/NonReboundBridgeHoistingTestClasses.java
@@ -5,6 +5,7 @@
 package com.android.tools.r8.bridgeremoval.hoisting.testclasses;
 
 import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
 import com.android.tools.r8.NoVerticalClassMerging;
 
 public class NonReboundBridgeHoistingTestClasses {
@@ -13,6 +14,7 @@
     return A.class;
   }
 
+  @NoAccessModification
   @NoVerticalClassMerging
   static class A {
 
diff --git a/src/test/java/com/android/tools/r8/classmerging/StatefulSingletonClassesMergingTest.java b/src/test/java/com/android/tools/r8/classmerging/StatefulSingletonClassesMergingTest.java
index 3604880..852fc89 100644
--- a/src/test/java/com/android/tools/r8/classmerging/StatefulSingletonClassesMergingTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/StatefulSingletonClassesMergingTest.java
@@ -8,6 +8,7 @@
 import com.android.tools.r8.NeverClassInline;
 import com.android.tools.r8.NeverInline;
 import com.android.tools.r8.NeverPropagateValue;
+import com.android.tools.r8.NoAccessModification;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestParametersCollection;
@@ -34,20 +35,14 @@
     testForR8(parameters.getBackend())
         .addInnerClasses(getClass())
         .addKeepMainRule(Main.class)
-        // TODO(b/280384153): A and B should always be merged in the final round of tree shaking
-        //  since their class initializers are postponeable, but we fail to conclude so with
-        //  constructor inlining enabled.
         .addHorizontallyMergedClassesInspector(
             inspector ->
-                inspector
-                    .applyIf(
-                        !parameters.canInitNewInstanceUsingSuperclassConstructor(),
-                        i -> i.assertIsCompleteMergeGroup(A.class, B.class))
-                    .assertNoOtherClassesMerged())
+                inspector.assertIsCompleteMergeGroup(A.class, B.class).assertNoOtherClassesMerged())
         .enableConstantArgumentAnnotations()
         .enableInliningAnnotations()
         .enableMemberValuePropagationAnnotations()
         .enableNeverClassInliningAnnotations()
+        .enableNoAccessModificationAnnotationsForMembers()
         .setMinApi(parameters)
         .run(parameters.getRuntime(), Main.class)
         .assertSuccessWithOutputLines("A", "B");
@@ -65,11 +60,12 @@
 
     static final A INSTANCE = new A("A");
 
-    @NeverPropagateValue private final String data;
+    @NeverPropagateValue @NoAccessModification private final String data;
 
     // TODO(b/198758663): With argument propagation the constructors end up not being equivalent,
     //  which prevents merging in the final round of horizontal class merging.
     @KeepConstantArguments
+    @NeverInline
     A(String data) {
       this.data = data;
     }
@@ -85,11 +81,12 @@
 
     static final B INSTANCE = new B("B");
 
-    @NeverPropagateValue private String data;
+    @NeverPropagateValue @NoAccessModification private String data;
 
     // TODO(b/198758663): With argument propagation the constructors end up not being equivalent,
     //  which prevents merging in the final round of horizontal class merging.
     @KeepConstantArguments
+    @NeverInline
     B(String data) {
       this.data = data;
     }
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/ClassesWithDifferentVisibilityFieldsTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/ClassesWithDifferentVisibilityFieldsTest.java
index ebbb020..7406b9b 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/ClassesWithDifferentVisibilityFieldsTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/ClassesWithDifferentVisibilityFieldsTest.java
@@ -11,6 +11,7 @@
 
 import com.android.tools.r8.NeverClassInline;
 import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.utils.codeinspector.ClassSubject;
 import com.android.tools.r8.utils.codeinspector.FieldSubject;
@@ -29,6 +30,7 @@
         .addKeepMainRule(Main.class)
         .enableInliningAnnotations()
         .enableNeverClassInliningAnnotations()
+        .enableNoAccessModificationAnnotationsForMembers()
         .setMinApi(parameters)
         .addHorizontallyMergedClassesInspector(
             inspector -> inspector.assertMergedInto(B.class, A.class))
@@ -66,7 +68,9 @@
 
   @NeverClassInline
   public static class A {
-    private int v1;
+
+    @NoAccessModification private int v1;
+
     public int v2;
 
     public A(int v) {
@@ -92,8 +96,10 @@
 
   @NeverClassInline
   public static class B {
+
     public int v1;
-    private int v2;
+
+    @NoAccessModification private int v2;
 
     public B(int v) {
       v1 = 3 * v;
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/ClassesWithOverlappingVisibilitiesTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/ClassesWithOverlappingVisibilitiesTest.java
index f3380dc..57e100b 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/ClassesWithOverlappingVisibilitiesTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/ClassesWithOverlappingVisibilitiesTest.java
@@ -12,6 +12,7 @@
 
 import com.android.tools.r8.NeverClassInline;
 import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.utils.codeinspector.ClassSubject;
 import com.android.tools.r8.utils.codeinspector.MethodSubject;
@@ -29,6 +30,7 @@
         .addKeepMainRule(Main.class)
         .enableInliningAnnotations()
         .enableNeverClassInliningAnnotations()
+        .enableNoAccessModificationAnnotationsForMembers()
         .setMinApi(parameters)
         .run(parameters.getRuntime(), Main.class)
         .assertSuccessWithOutputLines("foo A", "FOO B", "FOO C", "foo D", "FOO E")
@@ -59,6 +61,7 @@
   @NeverClassInline
   public static class A {
     @NeverInline
+    @NoAccessModification
     void foo() {
       System.out.println("foo A");
     }
@@ -72,6 +75,7 @@
 
     @Override
     @NeverInline
+    @NoAccessModification
     void foo() {
       System.out.println("FOO B");
     }
@@ -86,6 +90,7 @@
 
     @Override
     @NeverInline
+    @NoAccessModification
     void foo() {
       System.out.println("FOO C");
     }
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/ConstructorCantInlineTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/ConstructorCantInlineTest.java
index 3b62f5b..f2db164 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/ConstructorCantInlineTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/ConstructorCantInlineTest.java
@@ -10,6 +10,7 @@
 
 import com.android.tools.r8.NeverClassInline;
 import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
 import com.android.tools.r8.TestParameters;
 import org.junit.Test;
 
@@ -25,6 +26,7 @@
         .addKeepMainRule(Main.class)
         .enableInliningAnnotations()
         .enableNeverClassInliningAnnotations()
+        .enableNoAccessModificationAnnotationsForMembers()
         .setMinApi(parameters)
         .run(parameters.getRuntime(), Main.class)
         .assertSuccessWithOutputLines("c", "foo: foo")
@@ -48,16 +50,21 @@
 
   @NeverClassInline
   public static class C {
+
+    @NoAccessModification
     C() {
       System.out.println("c");
     }
   }
 
   public static class D {
+
+    @NoAccessModification
     D() {
       foo(new B());
     }
 
+    @NoAccessModification
     @NeverInline
     static void foo(A a) {
       System.out.println("foo: " + a.foo());
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/EquivalentConstructorsWithClassIdAndExtraNullsMergingTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/EquivalentConstructorsWithClassIdAndExtraNullsMergingTest.java
index c4aafe8..5e15d11 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/EquivalentConstructorsWithClassIdAndExtraNullsMergingTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/EquivalentConstructorsWithClassIdAndExtraNullsMergingTest.java
@@ -9,6 +9,7 @@
 import static org.junit.Assert.assertEquals;
 
 import com.android.tools.r8.NeverClassInline;
+import com.android.tools.r8.NoAccessModification;
 import com.android.tools.r8.NoHorizontalClassMerging;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
@@ -43,6 +44,7 @@
             inspector ->
                 inspector.assertIsCompleteMergeGroup(A.class, B.class).assertNoOtherClassesMerged())
         .enableNeverClassInliningAnnotations()
+        .enableNoAccessModificationAnnotationsForMembers()
         .enableNoHorizontalClassMergingAnnotations()
         .setMinApi(parameters)
         .compile()
@@ -74,7 +76,7 @@
   @NeverClassInline
   static class A {
 
-    private final Object c;
+    @NoAccessModification private final Object c;
 
     A(C c) {
       this.c = c;
@@ -94,7 +96,7 @@
   @NeverClassInline
   static class B {
 
-    private final D d;
+    @NoAccessModification private final D d;
 
     B(D d) {
       this.d = d;
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/InitClassToPackagePrivateFieldWithCrossPackageMergingTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/InitClassToPackagePrivateFieldWithCrossPackageMergingTest.java
index c48c0c1..e8b40c2 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/InitClassToPackagePrivateFieldWithCrossPackageMergingTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/InitClassToPackagePrivateFieldWithCrossPackageMergingTest.java
@@ -5,6 +5,7 @@
 package com.android.tools.r8.classmerging.horizontal;
 
 import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
 import com.android.tools.r8.NoHorizontalClassMerging;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
@@ -49,6 +50,7 @@
         .addHorizontallyMergedClassesInspector(
             HorizontallyMergedClassesInspector::assertNoClassesMerged)
         .enableInliningAnnotations()
+        .enableNoAccessModificationAnnotationsForMembers()
         .enableNoHorizontalClassMergingAnnotations()
         .setMinApi(parameters)
         .compile()
@@ -88,13 +90,14 @@
   public static class A2 {
 
     // Will remain due to the use in Main.main.
-    static int f = (int) System.currentTimeMillis();
+    @NoAccessModification static int f = (int) System.currentTimeMillis();
 
     static {
       System.out.print("Hello");
     }
 
     // Will be inlined.
+    @NoAccessModification
     static void sayHello() {}
   }
 
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/InterfacesVisibilityTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/InterfacesVisibilityTest.java
index aeccb3c..5430a70 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/InterfacesVisibilityTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/InterfacesVisibilityTest.java
@@ -33,6 +33,7 @@
         .addKeepMainRule(Main.class)
         .enableInliningAnnotations()
         .enableNeverClassInliningAnnotations()
+        .enableNoAccessModificationAnnotationsForClasses()
         .enableNoMethodStaticizingAnnotations()
         .enableNoParameterTypeStrengtheningAnnotations()
         .enableNoVerticalClassMergingAnnotations()
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/MergePackagePrivateWithPublicClassTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/MergePackagePrivateWithPublicClassTest.java
index d348bb4..bf3e27f 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/MergePackagePrivateWithPublicClassTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/MergePackagePrivateWithPublicClassTest.java
@@ -27,6 +27,7 @@
         .addKeepMainRule(Main.class)
         .enableInliningAnnotations()
         .enableNeverClassInliningAnnotations()
+        .enableNoAccessModificationAnnotationsForClasses()
         .setMinApi(parameters)
         .compile()
         .run(parameters.getRuntime(), Main.class)
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/MergingWithSafeCheckCastTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/MergingWithSafeCheckCastTest.java
index 0810864..2a36a79 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/MergingWithSafeCheckCastTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/MergingWithSafeCheckCastTest.java
@@ -12,6 +12,7 @@
 import com.android.tools.r8.NeverClassInline;
 import com.android.tools.r8.NeverInline;
 import com.android.tools.r8.NeverPropagateValue;
+import com.android.tools.r8.NoAccessModification;
 import com.android.tools.r8.NoHorizontalClassMerging;
 import com.android.tools.r8.NoUnusedInterfaceRemoval;
 import com.android.tools.r8.NoVerticalClassMerging;
@@ -35,6 +36,7 @@
         .enableInliningAnnotations()
         .enableMemberValuePropagationAnnotations()
         .enableNeverClassInliningAnnotations()
+        .enableNoAccessModificationAnnotationsForMembers()
         .enableNoHorizontalClassMergingAnnotations()
         .enableNoUnusedInterfaceRemovalAnnotations()
         .enableNoVerticalClassMergingAnnotations()
@@ -76,7 +78,7 @@
   @NeverClassInline
   public static class A {
 
-    @NeverPropagateValue I f;
+    @NeverPropagateValue @NoAccessModification I f;
 
     A(I f) {
       this.f = f;
@@ -86,7 +88,7 @@
   @NeverClassInline
   public static class B {
 
-    @NeverPropagateValue J f;
+    @NeverPropagateValue @NoAccessModification J f;
 
     B(J f) {
       this.f = f;
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/NoClassesOrMembersWithAnnotationsTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/NoClassesOrMembersWithAnnotationsTest.java
index ebe21cf..4efe443 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/NoClassesOrMembersWithAnnotationsTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/NoClassesOrMembersWithAnnotationsTest.java
@@ -12,6 +12,7 @@
 import com.android.tools.r8.KeepConstantArguments;
 import com.android.tools.r8.NeverClassInline;
 import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.shaking.ProguardKeepAttributes;
 import com.android.tools.r8.utils.BooleanUtils;
@@ -57,6 +58,7 @@
             })
         .enableConstantArgumentAnnotations()
         .enableNeverClassInliningAnnotations()
+        .enableNoAccessModificationAnnotationsForClasses()
         .enableInliningAnnotations()
         .setMinApi(parameters)
         .compile()
@@ -135,13 +137,14 @@
       C c = new C("c");
       c.foo();
       foo(null);
-      foo2(
-          new MethodAnnotation() {
-            @Override
-            public Class<? extends Annotation> annotationType() {
-              return null;
-            }
-          });
+      @NoAccessModification
+      class MethodAnnotationImpl implements MethodAnnotation {
+        @Override
+        public Class<? extends Annotation> annotationType() {
+          return null;
+        }
+      }
+      foo2(new MethodAnnotationImpl());
       if (b.getClass().getAnnotations().length > 0) {
         System.out.println(
             b.getClass().getAnnotations()[0].toString().replaceFirst(".*", "annotation 1"));
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/NonPublicOverrideOfPublicMethodAfterAbstractClassMergingTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/NonPublicOverrideOfPublicMethodAfterAbstractClassMergingTest.java
index 39b5438..e9af361 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/NonPublicOverrideOfPublicMethodAfterAbstractClassMergingTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/NonPublicOverrideOfPublicMethodAfterAbstractClassMergingTest.java
@@ -14,6 +14,7 @@
 
 import com.android.tools.r8.NeverClassInline;
 import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
 import com.android.tools.r8.NoHorizontalClassMerging;
 import com.android.tools.r8.NoMethodStaticizing;
 import com.android.tools.r8.NoVerticalClassMerging;
@@ -48,6 +49,7 @@
             HorizontallyMergedClassesInspector::assertNoClassesMerged)
         .enableInliningAnnotations()
         .enableNeverClassInliningAnnotations()
+        .enableNoAccessModificationAnnotationsForMembers()
         .enableNoHorizontalClassMergingAnnotations()
         .enableNoMethodStaticizingAnnotations()
         .enableNoVerticalClassMergingAnnotations()
@@ -88,6 +90,7 @@
   abstract static class A {
 
     @NeverInline
+    @NoAccessModification
     @NoMethodStaticizing
     void m() {
       System.out.println("A.m()");
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/NonPublicOverrideOfPublicMethodAfterClassMergingTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/NonPublicOverrideOfPublicMethodAfterClassMergingTest.java
index dbe5c95..1edbf47 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/NonPublicOverrideOfPublicMethodAfterClassMergingTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/NonPublicOverrideOfPublicMethodAfterClassMergingTest.java
@@ -13,6 +13,7 @@
 
 import com.android.tools.r8.NeverClassInline;
 import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
 import com.android.tools.r8.NoHorizontalClassMerging;
 import com.android.tools.r8.NoUnusedInterfaceRemoval;
 import com.android.tools.r8.NoVerticalClassMerging;
@@ -47,6 +48,7 @@
                 inspector.assertIsCompleteMergeGroup(I.class, J.class).assertNoOtherClassesMerged())
         .enableInliningAnnotations()
         .enableNeverClassInliningAnnotations()
+        .enableNoAccessModificationAnnotationsForMembers()
         .enableNoHorizontalClassMergingAnnotations()
         .enableNoUnusedInterfaceRemovalAnnotations()
         .enableNoVerticalClassMergingAnnotations()
@@ -94,6 +96,7 @@
   static class A extends I {
 
     @NeverInline
+    @NoAccessModification
     void m() {
       System.out.println("A.m()");
     }
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/UnresolvableMethodWithClassMergingTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/UnresolvableMethodWithClassMergingTest.java
index ba7e586..dc66746 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/UnresolvableMethodWithClassMergingTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/UnresolvableMethodWithClassMergingTest.java
@@ -21,7 +21,7 @@
         .addKeepMainRule(Main.class)
         .addDontWarn(Missing.class)
         .addHorizontallyMergedClassesInspector(
-            HorizontallyMergedClassesInspector::assertNoOtherClassesMerged)
+            HorizontallyMergedClassesInspector::assertNoClassesMerged)
         .setMinApi(parameters)
         .compile()
         .addRunClasspathFiles(buildOnDexRuntime(parameters, Missing.class))
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/dispatch/OverrideDefaultOnSuperMethodTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/dispatch/OverrideDefaultOnSuperMethodTest.java
index 93548c1..8f92bab 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/dispatch/OverrideDefaultOnSuperMethodTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/dispatch/OverrideDefaultOnSuperMethodTest.java
@@ -10,6 +10,7 @@
 
 import com.android.tools.r8.NeverClassInline;
 import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
 import com.android.tools.r8.NoUnusedInterfaceRemoval;
 import com.android.tools.r8.NoVerticalClassMerging;
 import com.android.tools.r8.TestParameters;
@@ -29,6 +30,7 @@
         .addKeepMainRule(Main.class)
         .enableInliningAnnotations()
         .enableNeverClassInliningAnnotations()
+        .enableNoAccessModificationAnnotationsForMembers()
         .enableNoUnusedInterfaceRemovalAnnotations()
         .enableNoVerticalClassMergingAnnotations()
         .setMinApi(parameters)
@@ -69,6 +71,7 @@
             });
   }
 
+  @NoAccessModification
   @NoVerticalClassMerging
   interface I {
     @NeverInline
@@ -92,6 +95,7 @@
   }
 
   @NeverClassInline
+  @NoAccessModification
   @NoUnusedInterfaceRemoval
   @NoVerticalClassMerging
   interface J extends I {
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/interfaces/IllegalOverrideAfterInterfaceMergingTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/interfaces/IllegalOverrideAfterInterfaceMergingTest.java
index b3a256c..f91ff1e 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/interfaces/IllegalOverrideAfterInterfaceMergingTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/interfaces/IllegalOverrideAfterInterfaceMergingTest.java
@@ -13,6 +13,7 @@
 
 import com.android.tools.r8.NeverClassInline;
 import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
 import com.android.tools.r8.NoHorizontalClassMerging;
 import com.android.tools.r8.NoMethodStaticizing;
 import com.android.tools.r8.NoUnusedInterfaceRemoval;
@@ -48,6 +49,7 @@
             HorizontallyMergedClassesInspector::assertNoClassesMerged)
         .enableInliningAnnotations()
         .enableNeverClassInliningAnnotations()
+        .enableNoAccessModificationAnnotationsForMembers()
         .enableNoHorizontalClassMergingAnnotations()
         .enableNoMethodStaticizingAnnotations()
         .enableNoUnusedInterfaceRemovalAnnotations()
@@ -99,6 +101,7 @@
     // Intentionally package private. If J is merged into I then this is an illegal override of
     // I.m().
     @NeverInline
+    @NoAccessModification
     @NoMethodStaticizing
     void m() {
       System.out.println("A.m()");
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/interfaces/IllegalSiblingAfterInterfaceMergingTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/interfaces/IllegalSiblingAfterInterfaceMergingTest.java
index e03a298..775d754 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/interfaces/IllegalSiblingAfterInterfaceMergingTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/interfaces/IllegalSiblingAfterInterfaceMergingTest.java
@@ -14,6 +14,7 @@
 
 import com.android.tools.r8.NeverClassInline;
 import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
 import com.android.tools.r8.NoHorizontalClassMerging;
 import com.android.tools.r8.NoMethodStaticizing;
 import com.android.tools.r8.NoUnusedInterfaceRemoval;
@@ -49,6 +50,7 @@
             HorizontallyMergedClassesInspector::assertNoClassesMerged)
         .enableInliningAnnotations()
         .enableNeverClassInliningAnnotations()
+        .enableNoAccessModificationAnnotationsForMembers()
         .enableNoHorizontalClassMergingAnnotations()
         .enableNoMethodStaticizingAnnotations()
         .enableNoUnusedInterfaceRemovalAnnotations()
@@ -104,6 +106,7 @@
     // Intentionally package private. If J is merged into I then this is an illegal override of
     // I.m().
     @NeverInline
+    @NoAccessModification
     @NoMethodStaticizing
     void m() {
       System.out.println("A.m()");
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/testclasses/InterfacesVisibilityTestClasses.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/testclasses/InterfacesVisibilityTestClasses.java
index c857046..47428cc 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/testclasses/InterfacesVisibilityTestClasses.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/testclasses/InterfacesVisibilityTestClasses.java
@@ -6,6 +6,7 @@
 
 import com.android.tools.r8.NeverClassInline;
 import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
 import com.android.tools.r8.NoHorizontalClassMerging;
 import com.android.tools.r8.NoParameterTypeStrengthening;
 import com.android.tools.r8.NoVerticalClassMerging;
@@ -27,6 +28,7 @@
     }
   }
 
+  @NoAccessModification
   @NoHorizontalClassMerging
   @NoVerticalClassMerging
   interface PackagePrivateInterface {
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/testclasses/PackagePrivateClass.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/testclasses/PackagePrivateClass.java
index 7deccb2..dfa6ba9 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/testclasses/PackagePrivateClass.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/testclasses/PackagePrivateClass.java
@@ -5,8 +5,10 @@
 package com.android.tools.r8.classmerging.horizontal.testclasses;
 
 import com.android.tools.r8.NeverClassInline;
+import com.android.tools.r8.NoAccessModification;
 
 @NeverClassInline
+@NoAccessModification
 class PackagePrivateClass {
   public PackagePrivateClass() {
     System.out.println("package private");
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontalstatic/StaticClassMergerVisibilityTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontalstatic/StaticClassMergerVisibilityTest.java
index aa373c6..8b5680a 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontalstatic/StaticClassMergerVisibilityTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontalstatic/StaticClassMergerVisibilityTest.java
@@ -10,6 +10,7 @@
 import static org.junit.Assert.assertEquals;
 
 import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestParametersCollection;
@@ -41,34 +42,35 @@
         .addHorizontallyMergedClassesInspector(
             inspector ->
                 inspector
-                    .assertMergedInto(A.class, D.class)
-                    .assertMergedInto(B.class, D.class)
-                    .assertMergedInto(C.class, D.class))
+                    .assertIsCompleteMergeGroup(A.class, B.class, C.class, D.class)
+                    .assertNoOtherClassesMerged())
         .enableInliningAnnotations()
+        .enableNoAccessModificationAnnotationsForMembers()
         .setMinApi(parameters)
-        .addDontObfuscate()
         .run(parameters.getRuntime(), Main.class)
         .assertSuccessWithOutputLines("A.print()", "B.print()", "C.print()", "D.print()")
         .inspect(
             inspector -> {
-              // All classes are merged into D.
-              ClassSubject clazzD = inspector.clazz(D.class);
-              assertThat(clazzD, isPresent());
-              assertThat(clazzD, isPublic());
-              // D now has 5 methods (there is a synthetic access bridge for the private A.print()).
-              assertEquals(5, clazzD.allMethods().size());
+              // All classes are merged into C.
+              ClassSubject classSubject = inspector.clazz(C.class);
+              assertThat(classSubject, isPresent());
+              assertThat(classSubject, isPublic());
+              // A now has 5 methods (there is a synthetic access bridge for the private A.print()).
+              assertEquals(5, classSubject.allMethods().size());
             });
   }
 
-  // Will be merged into D.
+  // Will be merged into C.
   private static class A {
+
     @NeverInline
+    @NoAccessModification
     private static void print() {
       System.out.println("A.print()");
     }
   }
 
-  // Will be merged into D.
+  // Will be merged into C.
   static class B {
     @NeverInline
     static void print() {
@@ -76,7 +78,6 @@
     }
   }
 
-  // Will be merged into D
   public static class C {
     @NeverInline
     public static void print() {
@@ -84,6 +85,7 @@
     }
   }
 
+  // Will be merged into C.
   protected static class D {
     @NeverInline
     protected static void print() {
diff --git a/src/test/java/com/android/tools/r8/classmerging/vertical/B141942381.java b/src/test/java/com/android/tools/r8/classmerging/vertical/B141942381.java
index 07d4778..3063698 100644
--- a/src/test/java/com/android/tools/r8/classmerging/vertical/B141942381.java
+++ b/src/test/java/com/android/tools/r8/classmerging/vertical/B141942381.java
@@ -9,12 +9,14 @@
 import static org.junit.Assert.assertEquals;
 
 import com.android.tools.r8.NeverClassInline;
+import com.android.tools.r8.NoAccessModification;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestParametersCollection;
 import com.android.tools.r8.utils.codeinspector.ClassSubject;
 import com.android.tools.r8.utils.codeinspector.CodeInspector;
 import com.android.tools.r8.utils.codeinspector.FieldSubject;
+import com.android.tools.r8.utils.codeinspector.HorizontallyMergedClassesInspector;
 import com.android.tools.r8.utils.codeinspector.MethodSubject;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -50,7 +52,10 @@
         .addKeepMainRule(TestClass.class)
         .setMinApi(parameters)
         .addKeepAttributes("Signatures")
+        .addHorizontallyMergedClassesInspector(
+            HorizontallyMergedClassesInspector::assertNoClassesMerged)
         .enableNeverClassInliningAnnotations()
+        .enableNoAccessModificationAnnotationsForMembers()
         .addDontObfuscate()
         .compile()
         .inspect(this::inspect)
@@ -90,6 +95,7 @@
   }
 
   static abstract class Box<T extends BoxValue> {
+    @NoAccessModification
     @SuppressWarnings("unchecked")
     private T[] _storage = (T[]) (new BoxValue[1]);
 
diff --git a/src/test/java/com/android/tools/r8/classmerging/vertical/NonReboundFieldAccessOnMergedClassTest.java b/src/test/java/com/android/tools/r8/classmerging/vertical/NonReboundFieldAccessOnMergedClassTest.java
index 913f012..d94fbf9 100644
--- a/src/test/java/com/android/tools/r8/classmerging/vertical/NonReboundFieldAccessOnMergedClassTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/vertical/NonReboundFieldAccessOnMergedClassTest.java
@@ -37,6 +37,7 @@
         .addVerticallyMergedClassesInspector(
             inspector -> inspector.assertMergedIntoSubtype(C.class))
         .enableNeverClassInliningAnnotations()
+        .enableNoAccessModificationAnnotationsForClasses()
         .enableNoVerticalClassMergingAnnotations()
         .setMinApi(parameters)
         .compile()
diff --git a/src/test/java/com/android/tools/r8/classmerging/vertical/VerticalClassMergerTest.java b/src/test/java/com/android/tools/r8/classmerging/vertical/VerticalClassMergerTest.java
index e01af0f..162f678 100644
--- a/src/test/java/com/android/tools/r8/classmerging/vertical/VerticalClassMergerTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/vertical/VerticalClassMergerTest.java
@@ -256,6 +256,7 @@
     Path[] programFiles =
         new Path[] {
           CF_DIR.resolve("NeverPropagateValue.class"),
+          CF_DIR.resolve("NoAccessModification.class"),
           CF_DIR.resolve("NoRedundantFieldLoadElimination.class"),
           CF_DIR.resolve("ConflictInGeneratedNameTest.class"),
           CF_DIR.resolve("ConflictInGeneratedNameTest$A.class"),
@@ -1081,6 +1082,7 @@
           CF_DIR.resolve("pkg/SimpleInterfaceImplRetriever$SimpleInterfaceImpl.class"),
           CF_DIR.resolve("pkg/SimpleInterfaceImplRetriever$1.class"),
           CF_DIR.resolve("NeverInline.class"),
+          CF_DIR.resolve("NoAccessModification.class"),
           CF_DIR.resolve("NoHorizontalClassMerging.class")
         };
     // SimpleInterface cannot be merged into SimpleInterfaceImpl because SimpleInterfaceImpl
diff --git a/src/test/java/com/android/tools/r8/classmerging/vertical/testclasses/NonReboundFieldAccessOnMergedClassTestClasses.java b/src/test/java/com/android/tools/r8/classmerging/vertical/testclasses/NonReboundFieldAccessOnMergedClassTestClasses.java
index 7653f54..f8caa00 100644
--- a/src/test/java/com/android/tools/r8/classmerging/vertical/testclasses/NonReboundFieldAccessOnMergedClassTestClasses.java
+++ b/src/test/java/com/android/tools/r8/classmerging/vertical/testclasses/NonReboundFieldAccessOnMergedClassTestClasses.java
@@ -4,10 +4,12 @@
 
 package com.android.tools.r8.classmerging.vertical.testclasses;
 
+import com.android.tools.r8.NoAccessModification;
 import com.android.tools.r8.NoVerticalClassMerging;
 
 public class NonReboundFieldAccessOnMergedClassTestClasses {
 
+  @NoAccessModification
   @NoVerticalClassMerging
   static class A {
 
diff --git a/src/test/java/com/android/tools/r8/dagger/DaggerBasicSingletonUsingBindsTest.java b/src/test/java/com/android/tools/r8/dagger/DaggerBasicSingletonUsingBindsTest.java
index 742b463..0fc4708 100644
--- a/src/test/java/com/android/tools/r8/dagger/DaggerBasicSingletonUsingBindsTest.java
+++ b/src/test/java/com/android/tools/r8/dagger/DaggerBasicSingletonUsingBindsTest.java
@@ -71,15 +71,23 @@
   }
 
   private void inspect(CodeInspector inspector) {
+    ImmutableSet.Builder<String> expectedClasses =
+        ImmutableSet.<String>builder()
+            .add(
+                "basic.I1Impl1",
+                "basic.I2Impl1",
+                "basic.I3Impl1",
+                "basic.MainUsingBinds",
+                "dagger.internal.DoubleCheck",
+                "javax.inject.Provider");
+    if (parameters.isCfRuntime()) {
+      expectedClasses.add("basic.DaggerMainComponentUsingBinds");
+    }
+    if (target.equals("1.8") || parameters.isDexRuntime()) {
+      expectedClasses.add("basic.DaggerMainComponentUsingBinds$Builder");
+    }
     assertEquals(
-        ImmutableSet.of(
-            "basic.I1Impl1",
-            "basic.I2Impl1",
-            "basic.I3Impl1",
-            "basic.MainUsingBinds",
-            "basic.DaggerMainComponentUsingBinds",
-            "dagger.internal.DoubleCheck",
-            "javax.inject.Provider"),
+        expectedClasses.build(),
         inspector.allClasses().stream()
             .map(FoundClassSubject::getOriginalName)
             .filter(name -> !name.contains("_Factory"))
@@ -93,24 +101,27 @@
         .setMinApi(parameters)
         .addKeepMainRule(MAIN_CLASS)
         .addHorizontallyMergedClassesInspector(
-            inspector -> {
-              inspector
-                  .applyIf(
-                      target.equals("1.8") || parameters.isDexRuntime(),
-                      i ->
-                          i.assertIsCompleteMergeGroup(
-                              "basic.I1Impl1_Factory",
-                              "basic.I2Impl1_Factory",
-                              "basic.I3Impl1_Factory"))
-                  .applyIf(
-                      target.equals("1.8") || parameters.isDexRuntime(),
-                      i ->
-                          i.assertIsCompleteMergeGroup(
-                              "basic.I1Impl1_Factory$InstanceHolder",
-                              "basic.I2Impl1_Factory$InstanceHolder",
-                              "basic.I3Impl1_Factory$InstanceHolder"))
-                  .assertNoOtherClassesMerged();
-            })
+            inspector ->
+                inspector
+                    .applyIf(
+                        target.equals("1.8") || parameters.isDexRuntime(),
+                        i ->
+                            i.assertIsCompleteMergeGroup(
+                                    "basic.DaggerMainComponentUsingBinds$Builder",
+                                    "basic.I1Impl1_Factory",
+                                    "basic.I2Impl1_Factory",
+                                    "basic.I3Impl1_Factory")
+                                .assertIsCompleteMergeGroup(
+                                    "a.I1Impl1_Factory$InstanceHolder",
+                                    "a.I2Impl1_Factory$InstanceHolder",
+                                    "a.I3Impl1_Factory$InstanceHolder"))
+                    .applyIf(
+                        target.equals("1.8"),
+                        i ->
+                            i.assertIsCompleteMergeGroup(
+                                "dagger.internal.Preconditions",
+                                "basic.DaggerMainComponentUsingBinds$1"))
+                    .assertNoOtherClassesMerged())
         .addVerticallyMergedClassesInspector(
             inspector -> inspector.assertMergedIntoSubtype("basic.I1", "basic.I2", "basic.I3"))
         .run(parameters.getRuntime(), MAIN_CLASS)
diff --git a/src/test/java/com/android/tools/r8/dagger/DaggerBasicSingletonUsingProvidesTest.java b/src/test/java/com/android/tools/r8/dagger/DaggerBasicSingletonUsingProvidesTest.java
index 4a3efd7..16117c6 100644
--- a/src/test/java/com/android/tools/r8/dagger/DaggerBasicSingletonUsingProvidesTest.java
+++ b/src/test/java/com/android/tools/r8/dagger/DaggerBasicSingletonUsingProvidesTest.java
@@ -51,15 +51,23 @@
       ImmutableList.of("true", "true", "true", "I1Impl2", "I2Impl2", "I3Impl2");
 
   private void inspect(CodeInspector inspector) {
+    ImmutableSet.Builder<String> expectedClasses =
+        ImmutableSet.<String>builder()
+            .add(
+                "basic.I1Impl2",
+                "basic.I2Impl2",
+                "basic.I3Impl2",
+                "basic.MainUsingProvides",
+                "dagger.internal.DoubleCheck",
+                "javax.inject.Provider");
+    if (parameters.isCfRuntime()) {
+      expectedClasses.add("basic.DaggerMainComponentUsingProvides");
+    }
+    if (target.equals("1.8") || parameters.isDexRuntime()) {
+      expectedClasses.add("basic.DaggerMainComponentUsingProvides$Builder");
+    }
     assertEquals(
-        ImmutableSet.of(
-            "basic.I1Impl2",
-            "basic.I2Impl2",
-            "basic.I3Impl2",
-            "basic.MainUsingProvides",
-            "basic.DaggerMainComponentUsingProvides",
-            "dagger.internal.DoubleCheck",
-            "javax.inject.Provider"),
+        expectedClasses.build(),
         inspector.allClasses().stream()
             .map(FoundClassSubject::getOriginalName)
             .filter(name -> !name.contains("Factory"))
@@ -100,6 +108,7 @@
                       target.equals("1.8") || parameters.isDexRuntime(),
                       i ->
                           i.assertIsCompleteMergeGroup(
+                              "basic.DaggerMainComponentUsingProvides$Builder",
                               "basic.ModuleUsingProvides_I1Factory",
                               "basic.ModuleUsingProvides_I2Factory",
                               "basic.ModuleUsingProvides_I3Factory"))
@@ -107,15 +116,19 @@
                       target.equals("1.8") || parameters.isDexRuntime(),
                       i ->
                           i.assertIsCompleteMergeGroup(
-                              "basic.ModuleUsingProvides_I1Factory$InstanceHolder",
-                              "basic.ModuleUsingProvides_I2Factory$InstanceHolder",
-                              "basic.ModuleUsingProvides_I3Factory$InstanceHolder"))
+                              "a.ModuleUsingProvides_I1Factory$InstanceHolder",
+                              "a.ModuleUsingProvides_I2Factory$InstanceHolder",
+                              "a.ModuleUsingProvides_I3Factory$InstanceHolder"))
                   .applyIf(
                       target.equals("1.8"),
                       i ->
                           i.assertIsCompleteMergeGroup(
                               "basic.ModuleUsingProvides",
-                              "basic.DaggerMainComponentUsingProvides$1"))
+                              "basic.DaggerMainComponentUsingProvides$1",
+                              "dagger.internal.Preconditions"),
+                      i ->
+                          i.assertIsCompleteMergeGroup(
+                              "basic.ModuleUsingProvides", "dagger.internal.Preconditions"))
                   .assertNoOtherClassesMerged();
             })
         .addVerticallyMergedClassesInspector(
diff --git a/src/test/java/com/android/tools/r8/desugar/DesugarInstanceLambdaWithReadsTest.java b/src/test/java/com/android/tools/r8/desugar/DesugarInstanceLambdaWithReadsTest.java
index 820789c..3d882a5 100644
--- a/src/test/java/com/android/tools/r8/desugar/DesugarInstanceLambdaWithReadsTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/DesugarInstanceLambdaWithReadsTest.java
@@ -66,8 +66,7 @@
         inspector
             .clazz(Main.class)
             .allMethods(m -> m.getOriginalName().startsWith(R8_LAMBDA_ACCESSOR_METHOD_PREFIX));
-    assertEquals(
-        BooleanUtils.intValue(parameters.isDexRuntime() && isR8), lambdaAccessorMethods.size());
+    assertEquals(0, lambdaAccessorMethods.size());
 
     // When generating DEX, R8 will inline the javac-generated lambda$ method into the synthesized
     // $r8$lambda$ accessor method.
diff --git a/src/test/java/com/android/tools/r8/desugar/constantdynamic/JacocoConstantDynamicGetDeclaredMethods.java b/src/test/java/com/android/tools/r8/desugar/constantdynamic/JacocoConstantDynamicGetDeclaredMethods.java
index b6669cd..78d4db5 100644
--- a/src/test/java/com/android/tools/r8/desugar/constantdynamic/JacocoConstantDynamicGetDeclaredMethods.java
+++ b/src/test/java/com/android/tools/r8/desugar/constantdynamic/JacocoConstantDynamicGetDeclaredMethods.java
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.desugar.constantdynamic;
 
-import static com.android.tools.r8.utils.codeinspector.Matchers.isAbsent;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
@@ -20,6 +20,7 @@
 import com.android.tools.r8.jacoco.JacocoClasses;
 import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.StringUtils;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
 import java.io.IOException;
 import java.lang.invoke.MethodHandles;
 import java.lang.reflect.Method;
@@ -56,6 +57,8 @@
           "java.lang.invoke.MethodHandles$Lookup",
           "java.lang.String",
           "java.lang.Class");
+  private static final String EXPECTED_OUTPUT_WITHOUT_PARAMETERS =
+      StringUtils.lines(jacocoBootstrapMethodName, "0");
   private static final String EXPECTED_OUTPUT_WITHOUT_METHOD_HANDLES =
       StringUtils.lines(
           jacocoBootstrapMethodName,
@@ -130,6 +133,10 @@
         .addProgramFiles(ToolHelper.JACOCO_AGENT)
         .setMinApi(parameters)
         .addKeepMainRules(TestRunner.class)
+        .addKeepRules(
+            "-keepclassmembers,allowoptimization,allowshrinking class " + MAIN_CLASS + " {",
+            "  boolean[] " + jacocoBootstrapMethodName + "(...);",
+            "}")
         .applyIf(
             parameters.getApiLevel().isLessThan(AndroidApiLevel.O),
             b -> b.addDontWarn(MethodHandles.Lookup.class))
@@ -138,13 +145,14 @@
         .runWithJaCoCo(agentOutput, parameters.getRuntime(), MAIN_CLASS)
         .inspect(
             inspector -> {
-              assertThat(
+              MethodSubject jacocoBootstrapMethodSubject =
                   inspector
                       .clazz(TestRunner.class)
-                      .uniqueMethodWithOriginalName(jacocoBootstrapMethodName),
-                  isAbsent());
+                      .uniqueMethodWithOriginalName(jacocoBootstrapMethodName);
+              assertThat(jacocoBootstrapMethodSubject, isPresent());
+              assertEquals(0, jacocoBootstrapMethodSubject.getParameters().size());
             })
-        .assertSuccessWithOutputLines("No " + jacocoBootstrapMethodName + " method");
+        .assertSuccessWithOutput(EXPECTED_OUTPUT_WITHOUT_PARAMETERS);
     checkJacocoReport(agentOutput);
   }
 
diff --git a/src/test/java/com/android/tools/r8/desugar/records/EmptyRecordTest.java b/src/test/java/com/android/tools/r8/desugar/records/EmptyRecordTest.java
index d345744..e60c81f 100644
--- a/src/test/java/com/android/tools/r8/desugar/records/EmptyRecordTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/records/EmptyRecordTest.java
@@ -5,6 +5,7 @@
 package com.android.tools.r8.desugar.records;
 
 import static org.junit.Assume.assumeFalse;
+import static org.junit.Assume.assumeTrue;
 
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
@@ -69,6 +70,8 @@
 
   @Test
   public void testR8() throws Exception {
+    // TODO(b/288360309): Correctly deal with non-identity lenses in R8 record rewriting.
+    assumeTrue(parameters.isDexRuntime());
     parameters.assumeR8TestParameters();
     testForR8(parameters.getBackend())
         .addProgramClassFileData(PROGRAM_DATA)
diff --git a/src/test/java/com/android/tools/r8/desugar/records/RecordShrinkFieldTest.java b/src/test/java/com/android/tools/r8/desugar/records/RecordShrinkFieldTest.java
index 0137c4f..0c007f2 100644
--- a/src/test/java/com/android/tools/r8/desugar/records/RecordShrinkFieldTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/records/RecordShrinkFieldTest.java
@@ -69,7 +69,7 @@
         .addKeepMainRule(MAIN_TYPE)
         .minification(minifying)
         .compile()
-        .inspect(this::assertSingleField)
+        .inspect(inspector -> inspect(inspector, false))
         .run(parameters.getRuntime(), MAIN_TYPE)
         .assertSuccessWithOutput(
             minifying ? EXPECTED_RESULT_R8 : EXPECTED_RESULT_R8_NO_MINIFICATION);
@@ -92,17 +92,21 @@
         .addKeepMainRule(MAIN_TYPE)
         .minification(minifying)
         .compile()
-        .inspect(this::assertSingleField)
+        .inspect(inspector -> inspect(inspector, true))
         .run(parameters.getRuntime(), MAIN_TYPE)
         .assertSuccessWithOutput(
             minifying ? EXPECTED_RESULT_R8 : EXPECTED_RESULT_R8_NO_MINIFICATION);
   }
 
-  private void assertSingleField(CodeInspector inspector) {
+  private void inspect(CodeInspector inspector, boolean isCfThenDex) {
     ClassSubject recordClass =
         inspector.clazz(minifying ? "records.a" : "records.RecordShrinkField$Person");
-    assertEquals(1, recordClass.allInstanceFields().size());
-    assertEquals(
-        "java.lang.String", recordClass.allInstanceFields().get(0).getField().type().toString());
+    if (isCfThenDex || !minifying) {
+      assertEquals(1, recordClass.allInstanceFields().size());
+      assertEquals(
+          "java.lang.String", recordClass.allInstanceFields().get(0).getField().type().toString());
+    } else {
+      assertEquals(0, recordClass.allInstanceFields().size());
+    }
   }
 }
diff --git a/src/test/java/com/android/tools/r8/desugar/records/RecordWithNonMaterializableConstClassTest.java b/src/test/java/com/android/tools/r8/desugar/records/RecordWithNonMaterializableConstClassTest.java
index 2f60f2a..0262140 100644
--- a/src/test/java/com/android/tools/r8/desugar/records/RecordWithNonMaterializableConstClassTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/records/RecordWithNonMaterializableConstClassTest.java
@@ -4,6 +4,8 @@
 
 package com.android.tools.r8.desugar.records;
 
+import static org.junit.Assume.assumeTrue;
+
 import com.android.tools.r8.R8FullTestBuilder;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
@@ -90,6 +92,8 @@
             .apply(this::configureR8)
             .compile()
             .writeToZip();
+    // TODO(b/288360309): Correctly deal with non-identity lenses in R8 record rewriting.
+    assumeTrue(parameters.isDexRuntime());
     testForR8(parameters.getBackend())
         .addProgramFiles(desugared)
         .apply(this::configureR8)
diff --git a/src/test/java/com/android/tools/r8/desugar/sealed/SealedClassesEnumJdk17CompiledTest.java b/src/test/java/com/android/tools/r8/desugar/sealed/SealedClassesEnumJdk17CompiledTest.java
index 16009e6..07d4ef7 100644
--- a/src/test/java/com/android/tools/r8/desugar/sealed/SealedClassesEnumJdk17CompiledTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/sealed/SealedClassesEnumJdk17CompiledTest.java
@@ -4,20 +4,22 @@
 
 package com.android.tools.r8.desugar.sealed;
 
-import static com.android.tools.r8.DiagnosticsMatcher.diagnosticMessage;
-import static org.hamcrest.CoreMatchers.containsString;
-import static org.junit.Assert.assertThrows;
+import static junit.framework.Assert.assertEquals;
+import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assume.assumeTrue;
 
-import com.android.tools.r8.CompilationFailedException;
 import com.android.tools.r8.DesugarTestConfiguration;
-import com.android.tools.r8.R8FullTestBuilder;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.TestParametersCollection;
 import com.android.tools.r8.TestRuntime.CfVm;
+import com.android.tools.r8.TestShrinkerBuilder;
 import com.android.tools.r8.examples.jdk17.EnumSealed;
+import com.android.tools.r8.utils.BooleanUtils;
 import com.android.tools.r8.utils.StringUtils;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.Matchers;
+import java.util.List;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -30,16 +32,22 @@
   @Parameter(0)
   public TestParameters parameters;
 
+  @Parameter(1)
+  public boolean keepPermittedSubclassesAttribute;
+
   static final String EXPECTED = StringUtils.lines("A", "a B");
 
-  @Parameters(name = "{0}")
-  public static TestParametersCollection data() {
-    return getTestParameters().withAllRuntimes().withAllApiLevelsAlsoForCf().build();
+  @Parameters(name = "{0}, keepPermittedSubclasses = {1}")
+  public static List<Object[]> data() {
+    return buildParameters(
+        getTestParameters().withAllRuntimes().withAllApiLevelsAlsoForCf().build(),
+        BooleanUtils.values());
   }
 
   @Test
   public void testJvm() throws Exception {
     parameters.assumeJvmTestParameters();
+    assumeTrue(keepPermittedSubclassesAttribute);
     assumeTrue(parameters.asCfRuntime().isNewerThanOrEqual(CfVm.JDK17));
     testForJvm(parameters)
         .addRunClasspathFiles(EnumSealed.jar())
@@ -49,6 +57,7 @@
 
   @Test
   public void testDesugaring() throws Exception {
+    assumeTrue(keepPermittedSubclassesAttribute);
     testForDesugaring(parameters)
         .addProgramFiles(EnumSealed.jar())
         .run(parameters.getRuntime(), EnumSealed.Main.typeName())
@@ -60,28 +69,33 @@
             r -> r.assertFailureWithErrorThatThrows(UnsupportedClassVersionError.class));
   }
 
+  private void inspect(CodeInspector inspector) {
+    ClassSubject clazz = inspector.clazz("enum_sealed.Enum");
+    assertThat(clazz, Matchers.isPresentAndRenamed());
+    if (!parameters.isCfRuntime()) {
+      return;
+    }
+    assertEquals(
+        keepPermittedSubclassesAttribute ? 1 : 0,
+        clazz.getFinalPermittedSubclassAttributes().size());
+  }
+
   @Test
   public void testR8() throws Exception {
     parameters.assumeR8TestParameters();
-    R8FullTestBuilder builder =
-        testForR8(parameters.getBackend())
-            .addProgramFiles(EnumSealed.jar())
-            .setMinApi(parameters)
-            .addKeepMainRule(EnumSealed.Main.typeName());
-    if (parameters.isCfRuntime()) {
-      assertThrows(
-          CompilationFailedException.class,
-          () ->
-              builder.compileWithExpectedDiagnostics(
-                  diagnostics ->
-                      diagnostics.assertErrorThatMatches(
-                          diagnosticMessage(
-                              containsString(
-                                  "Sealed classes are not supported as program classes")))));
-    } else {
-      builder
-          .run(parameters.getRuntime(), EnumSealed.Main.typeName())
-          .assertSuccessWithOutput(EXPECTED);
-    }
+    testForR8(parameters.getBackend())
+        .addProgramFiles(EnumSealed.jar())
+        .setMinApi(parameters)
+        .applyIf(
+            keepPermittedSubclassesAttribute,
+            TestShrinkerBuilder::addKeepAttributePermittedSubclasses)
+        .addKeepMainRule(EnumSealed.Main.typeName())
+        .compile()
+        .inspect(this::inspect)
+        .run(parameters.getRuntime(), EnumSealed.Main.typeName())
+        .applyIf(
+            parameters.isDexRuntime() || parameters.asCfRuntime().isNewerThanOrEqual(CfVm.JDK17),
+            r -> r.assertSuccessWithOutput(EXPECTED),
+            r -> r.assertFailureWithErrorThatThrows(UnsupportedClassVersionError.class));
   }
 }
diff --git a/src/test/java/com/android/tools/r8/desugar/sealed/SealedClassesIllegalSubclassTest.java b/src/test/java/com/android/tools/r8/desugar/sealed/SealedClassesIllegalSubclassTest.java
index 330da7e..03d9160 100644
--- a/src/test/java/com/android/tools/r8/desugar/sealed/SealedClassesIllegalSubclassTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/sealed/SealedClassesIllegalSubclassTest.java
@@ -4,20 +4,25 @@
 
 package com.android.tools.r8.desugar.sealed;
 
-import static com.android.tools.r8.DiagnosticsMatcher.diagnosticMessage;
+import static junit.framework.Assert.assertEquals;
 import static org.hamcrest.CoreMatchers.containsString;
-import static org.junit.Assert.assertThrows;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assume.assumeFalse;
 import static org.junit.Assume.assumeTrue;
 
-import com.android.tools.r8.CompilationFailedException;
 import com.android.tools.r8.DesugarTestConfiguration;
-import com.android.tools.r8.R8FullTestBuilder;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestBuilder;
 import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.TestParametersCollection;
 import com.android.tools.r8.TestRuntime.CfVm;
+import com.android.tools.r8.TestShrinkerBuilder;
+import com.android.tools.r8.utils.BooleanUtils;
 import com.android.tools.r8.utils.StringUtils;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.Matchers;
+import java.util.List;
+import org.hamcrest.Matcher;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -30,11 +35,18 @@
   @Parameter(0)
   public TestParameters parameters;
 
-  static final String EXPECTED = StringUtils.lines("Success!");
+  @Parameter(1)
+  public boolean keepPermittedSubclassesAttribute;
 
-  @Parameters(name = "{0}")
-  public static TestParametersCollection data() {
-    return getTestParameters().withAllRuntimes().withAllApiLevelsAlsoForCf().build();
+  static final Matcher<String> EXPECTED = containsString("cannot inherit from sealed class");
+  static final String EXPECTED_WITHOUT_PERMITTED_SUBCLASSES_ATTRIBUTE =
+      StringUtils.lines("Success!");
+
+  @Parameters(name = "{0}, keepPermittedSubclasses = {1}")
+  public static List<Object[]> data() {
+    return buildParameters(
+        getTestParameters().withAllRuntimes().withAllApiLevelsAlsoForCf().build(),
+        BooleanUtils.values());
   }
 
   private void addTestClasses(TestBuilder<?, ?> builder) throws Exception {
@@ -46,52 +58,67 @@
   @Test
   public void testJvm() throws Exception {
     parameters.assumeJvmTestParameters();
+    assumeTrue(keepPermittedSubclassesAttribute);
     assumeTrue(parameters.asCfRuntime().isNewerThanOrEqual(CfVm.JDK17));
     testForJvm(parameters)
         .apply(this::addTestClasses)
         .run(parameters.getRuntime(), TestClass.class)
-        .assertFailureWithErrorThatMatches(containsString("cannot inherit from sealed class"));
+        .assertFailureWithErrorThatMatches(EXPECTED);
   }
 
   @Test
   public void testDesugaring() throws Exception {
+    assumeTrue(keepPermittedSubclassesAttribute);
     testForDesugaring(parameters)
         .apply(this::addTestClasses)
         .run(parameters.getRuntime(), TestClass.class)
         .applyIf(
             DesugarTestConfiguration::isNotJavac,
-            r -> r.assertSuccessWithOutput(EXPECTED),
+            r -> r.assertSuccessWithOutput(EXPECTED_WITHOUT_PERMITTED_SUBCLASSES_ATTRIBUTE),
             c -> parameters.getRuntime().asCf().isNewerThanOrEqual(CfVm.JDK17),
-            r ->
-                r.assertFailureWithErrorThatMatches(
-                    containsString("cannot inherit from sealed class")),
+            r -> r.assertFailureWithErrorThatMatches(EXPECTED),
             r -> r.assertFailureWithErrorThatThrows(UnsupportedClassVersionError.class));
   }
 
+  private void inspect(CodeInspector inspector) {
+    ClassSubject clazz = inspector.clazz(C.class);
+    assertThat(clazz, Matchers.isPresentAndRenamed());
+    if (!parameters.isCfRuntime()) {
+      return;
+    }
+    assertEquals(
+        keepPermittedSubclassesAttribute ? 2 : 0,
+        clazz.getFinalPermittedSubclassAttributes().size());
+  }
+
   @Test
   public void testR8() throws Exception {
     parameters.assumeR8TestParameters();
-    R8FullTestBuilder builder =
-        testForR8(parameters.getBackend())
-            .apply(this::addTestClasses)
-            .setMinApi(parameters)
-            .addKeepMainRule(TestClass.class);
-    if (parameters.isCfRuntime()) {
-      // TODO(b/227160052): Support sealed classes for R8 class file output.
-      assertThrows(
-          CompilationFailedException.class,
-          () ->
-              builder.compileWithExpectedDiagnostics(
-                  diagnostics ->
-                      diagnostics.assertErrorThatMatches(
-                          diagnosticMessage(
-                              containsString(
-                                  "Sealed classes are not supported as program classes")))));
-    } else {
-      builder
-          .run(parameters.getRuntime(), TestClass.class)
-          .assertSuccessWithOutputLines("Success!");
-    }
+    assumeFalse(parameters.isDexRuntime() && keepPermittedSubclassesAttribute);
+    testForR8(parameters.getBackend())
+        .apply(this::addTestClasses)
+        .setMinApi(parameters)
+        .applyIf(
+            keepPermittedSubclassesAttribute,
+            TestShrinkerBuilder::addKeepAttributePermittedSubclasses)
+        // Keep the sealed class to ensure the PermittedSubclasses attribute stays live.
+        .addKeepPermittedSubclasses(C.class)
+        // Keep subclasses as the PermittedSubclasses attribute is not rewritten.
+        .addKeepRules("-keep class * extends " + C.class.getTypeName())
+        .addKeepMainRule(TestClass.class)
+        .compile()
+        .inspect(this::inspect)
+        .run(parameters.getRuntime(), TestClass.class)
+        .applyIf(
+            parameters.isDexRuntime()
+                || (!keepPermittedSubclassesAttribute
+                    && parameters.asCfRuntime().isNewerThanOrEqual(CfVm.JDK17)),
+            r -> r.assertSuccessWithOutput(EXPECTED_WITHOUT_PERMITTED_SUBCLASSES_ATTRIBUTE),
+            parameters.isCfRuntime()
+                && parameters.asCfRuntime().isNewerThanOrEqual(CfVm.JDK17)
+                && keepPermittedSubclassesAttribute,
+            r -> r.assertFailureWithErrorThatMatches(EXPECTED),
+            r -> r.assertFailureWithErrorThatThrows(UnsupportedClassVersionError.class));
   }
 
   public byte[] getTransformedClasses() throws Exception {
diff --git a/src/test/java/com/android/tools/r8/desugar/sealed/SealedClassesJdk17CompiledTest.java b/src/test/java/com/android/tools/r8/desugar/sealed/SealedClassesJdk17CompiledTest.java
index 2a6eee8..2b7d981 100644
--- a/src/test/java/com/android/tools/r8/desugar/sealed/SealedClassesJdk17CompiledTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/sealed/SealedClassesJdk17CompiledTest.java
@@ -4,20 +4,22 @@
 
 package com.android.tools.r8.desugar.sealed;
 
-import static com.android.tools.r8.DiagnosticsMatcher.diagnosticMessage;
-import static org.hamcrest.CoreMatchers.containsString;
-import static org.junit.Assert.assertThrows;
+import static junit.framework.Assert.assertEquals;
+import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assume.assumeTrue;
 
-import com.android.tools.r8.CompilationFailedException;
 import com.android.tools.r8.DesugarTestConfiguration;
-import com.android.tools.r8.R8FullTestBuilder;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.TestParametersCollection;
 import com.android.tools.r8.TestRuntime.CfVm;
+import com.android.tools.r8.TestShrinkerBuilder;
 import com.android.tools.r8.examples.jdk17.Sealed;
+import com.android.tools.r8.utils.BooleanUtils;
 import com.android.tools.r8.utils.StringUtils;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.Matchers;
+import java.util.List;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -30,16 +32,22 @@
   @Parameter(0)
   public TestParameters parameters;
 
+  @Parameter(1)
+  public boolean keepPermittedSubclassesAttribute;
+
   static final String EXPECTED = StringUtils.lines("R8 compiler", "D8 compiler");
 
-  @Parameters(name = "{0}")
-  public static TestParametersCollection data() {
-    return getTestParameters().withAllRuntimes().withAllApiLevelsAlsoForCf().build();
+  @Parameters(name = "{0}, keepPermittedSubclasses = {1}")
+  public static List<Object[]> data() {
+    return buildParameters(
+        getTestParameters().withAllRuntimes().withAllApiLevelsAlsoForCf().build(),
+        BooleanUtils.values());
   }
 
   @Test
   public void testJvm() throws Exception {
     parameters.assumeJvmTestParameters();
+    assumeTrue(keepPermittedSubclassesAttribute);
     assumeTrue(parameters.asCfRuntime().isNewerThanOrEqual(CfVm.JDK17));
     testForJvm(parameters)
         .addRunClasspathFiles(Sealed.jar())
@@ -49,6 +57,7 @@
 
   @Test
   public void testDesugaring() throws Exception {
+    assumeTrue(keepPermittedSubclassesAttribute);
     testForDesugaring(parameters)
         .addProgramFiles(Sealed.jar())
         .run(parameters.getRuntime(), Sealed.Main.typeName())
@@ -60,28 +69,35 @@
             r -> r.assertFailureWithErrorThatThrows(UnsupportedClassVersionError.class));
   }
 
+  private void inspect(CodeInspector inspector) {
+    ClassSubject clazz = inspector.clazz("sealed.Compiler");
+    assertThat(clazz, Matchers.isPresentAndRenamed());
+    if (!parameters.isCfRuntime()) {
+      return;
+    }
+    assertEquals(
+        keepPermittedSubclassesAttribute ? 2 : 0,
+        clazz.getFinalPermittedSubclassAttributes().size());
+  }
+
   @Test
   public void testR8() throws Exception {
     parameters.assumeR8TestParameters();
-    R8FullTestBuilder builder =
-        testForR8(parameters.getBackend())
-            .addProgramFiles(Sealed.jar())
-            .setMinApi(parameters)
-            .addKeepMainRule(Sealed.Main.typeName());
-    if (parameters.isCfRuntime()) {
-      assertThrows(
-          CompilationFailedException.class,
-          () ->
-              builder.compileWithExpectedDiagnostics(
-                  diagnostics ->
-                      diagnostics.assertErrorThatMatches(
-                          diagnosticMessage(
-                              containsString(
-                                  "Sealed classes are not supported as program classes")))));
-    } else {
-      builder
-          .run(parameters.getRuntime(), Sealed.Main.typeName())
-          .assertSuccessWithOutput(EXPECTED);
-    }
+    testForR8(parameters.getBackend())
+        .addProgramFiles(Sealed.jar())
+        .setMinApi(parameters)
+        .applyIf(
+            keepPermittedSubclassesAttribute,
+            TestShrinkerBuilder::addKeepAttributePermittedSubclasses)
+        // Keep the sealed class to ensure the PermittedSubclasses attribute stays live.
+        .addKeepPermittedSubclasses(Sealed.Compiler.typeName())
+        .addKeepMainRule(Sealed.Main.typeName())
+        .compile()
+        .inspect(this::inspect)
+        .run(parameters.getRuntime(), Sealed.Main.typeName())
+        .applyIf(
+            parameters.isDexRuntime() || parameters.asCfRuntime().isNewerThanOrEqual(CfVm.JDK17),
+            r -> r.assertSuccessWithOutput(EXPECTED),
+            r -> r.assertFailureWithErrorThatThrows(UnsupportedClassVersionError.class));
   }
 }
diff --git a/src/test/java/com/android/tools/r8/desugar/sealed/SealedClassesTest.java b/src/test/java/com/android/tools/r8/desugar/sealed/SealedClassesTest.java
index 420c077..3aa1a38 100644
--- a/src/test/java/com/android/tools/r8/desugar/sealed/SealedClassesTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/sealed/SealedClassesTest.java
@@ -4,20 +4,22 @@
 
 package com.android.tools.r8.desugar.sealed;
 
-import static com.android.tools.r8.DiagnosticsMatcher.diagnosticMessage;
-import static org.hamcrest.CoreMatchers.containsString;
-import static org.junit.Assert.assertThrows;
+import static junit.framework.Assert.assertEquals;
+import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assume.assumeTrue;
 
-import com.android.tools.r8.CompilationFailedException;
 import com.android.tools.r8.DesugarTestConfiguration;
-import com.android.tools.r8.R8FullTestBuilder;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestBuilder;
 import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.TestParametersCollection;
 import com.android.tools.r8.TestRuntime.CfVm;
+import com.android.tools.r8.TestShrinkerBuilder;
+import com.android.tools.r8.utils.BooleanUtils;
 import com.android.tools.r8.utils.StringUtils;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.Matchers;
+import java.util.List;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -30,11 +32,16 @@
   @Parameter(0)
   public TestParameters parameters;
 
+  @Parameter(1)
+  public boolean keepPermittedSubclassesAttribute;
+
   static final String EXPECTED = StringUtils.lines("Success!");
 
-  @Parameters(name = "{0}")
-  public static TestParametersCollection data() {
-    return getTestParameters().withAllRuntimes().withAllApiLevelsAlsoForCf().build();
+  @Parameters(name = "{0}, keepPermittedSubclasses = {1}")
+  public static List<Object[]> data() {
+    return buildParameters(
+        getTestParameters().withAllRuntimes().withAllApiLevelsAlsoForCf().build(),
+        BooleanUtils.values());
   }
 
   private void addTestClasses(TestBuilder<?, ?> builder) throws Exception {
@@ -46,6 +53,7 @@
   @Test
   public void testJvm() throws Exception {
     parameters.assumeJvmTestParameters();
+    assumeTrue(keepPermittedSubclassesAttribute);
     assumeTrue(parameters.asCfRuntime().isNewerThanOrEqual(CfVm.JDK17));
     testForJvm(parameters)
         .apply(this::addTestClasses)
@@ -55,6 +63,7 @@
 
   @Test
   public void testDesugaring() throws Exception {
+    assumeTrue(keepPermittedSubclassesAttribute);
     testForDesugaring(parameters)
         .apply(this::addTestClasses)
         .run(parameters.getRuntime(), TestClass.class)
@@ -66,28 +75,36 @@
             r -> r.assertFailureWithErrorThatThrows(UnsupportedClassVersionError.class));
   }
 
+  private void inspect(CodeInspector inspector) {
+    ClassSubject clazz = inspector.clazz(C.class);
+    assertThat(clazz, Matchers.isPresentAndRenamed());
+    if (!parameters.isCfRuntime()) {
+      return;
+    }
+    assertEquals(
+        keepPermittedSubclassesAttribute ? 2 : 0,
+        clazz.getFinalPermittedSubclassAttributes().size());
+  }
+
   @Test
   public void testR8() throws Exception {
     parameters.assumeR8TestParameters();
-    R8FullTestBuilder builder =
-        testForR8(parameters.getBackend())
-            .apply(this::addTestClasses)
-            .setMinApi(parameters)
-            .addKeepMainRule(TestClass.class);
-    if (parameters.isCfRuntime()) {
-      // TODO(b/227160052): Support sealed classes for R8 class file output.
-      assertThrows(
-          CompilationFailedException.class,
-          () ->
-              builder.compileWithExpectedDiagnostics(
-                  diagnostics ->
-                      diagnostics.assertErrorThatMatches(
-                          diagnosticMessage(
-                              containsString(
-                                  "Sealed classes are not supported as program classes")))));
-    } else {
-      builder.run(parameters.getRuntime(), TestClass.class).assertSuccessWithOutput(EXPECTED);
-    }
+    testForR8(parameters.getBackend())
+        .apply(this::addTestClasses)
+        .setMinApi(parameters)
+        .applyIf(
+            keepPermittedSubclassesAttribute,
+            TestShrinkerBuilder::addKeepAttributePermittedSubclasses)
+        // Keep the sealed class to ensure the PermittedSubclasses attribute stays live.
+        .addKeepPermittedSubclasses(C.class)
+        .addKeepMainRule(TestClass.class)
+        .compile()
+        .inspect(this::inspect)
+        .run(parameters.getRuntime(), TestClass.class)
+        .applyIf(
+            !parameters.isCfRuntime() || parameters.asCfRuntime().isNewerThanOrEqual(CfVm.JDK17),
+            r -> r.assertSuccessWithOutput(EXPECTED),
+            r -> r.assertFailureWithErrorThatThrows(UnsupportedClassVersionError.class));
   }
 
   public byte[] getTransformedClasses() throws Exception {
diff --git a/src/test/java/com/android/tools/r8/enumunboxing/EnumUnboxNullArgumentTest.java b/src/test/java/com/android/tools/r8/enumunboxing/EnumUnboxNullArgumentTest.java
index c55ecf6..1f0492d 100644
--- a/src/test/java/com/android/tools/r8/enumunboxing/EnumUnboxNullArgumentTest.java
+++ b/src/test/java/com/android/tools/r8/enumunboxing/EnumUnboxNullArgumentTest.java
@@ -4,10 +4,6 @@
 
 package com.android.tools.r8.enumunboxing;
 
-import static org.hamcrest.CoreMatchers.containsString;
-import static org.junit.Assert.assertThrows;
-
-import com.android.tools.r8.CompilationFailedException;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestParametersCollection;
@@ -29,24 +25,14 @@
   }
 
   @Test
-  public void testR8() {
-    // TODO(b/287193321): We should not fail compilation.
-    assertThrows(
-        CompilationFailedException.class,
-        () ->
-            testForR8(parameters.getBackend())
-                .addInnerClasses(getClass())
-                .setMinApi(parameters)
-                .addKeepMainRule(Main.class)
-                // TODO(b/287193321): Using LIR avoids the issue, is it fixed or just hidden?
-                .addOptionsModification(options -> options.testing.disableLir())
-                .compileWithExpectedDiagnostics(
-                    diagnostics -> {
-                      if (parameters.isDexRuntime()) {
-                        diagnostics.assertErrorMessageThatMatches(
-                            containsString("Cannot constrain type"));
-                      }
-                    }));
+  public void testR8() throws Exception {
+    testForR8(parameters.getBackend())
+        .addInnerClasses(getClass())
+        .setMinApi(parameters)
+        .addKeepMainRule(Main.class)
+        .addOptionsModification(options -> options.testing.disableLir())
+        .run(parameters.getRuntime(), Main.class)
+        .assertFailureWithErrorThatThrows(NullPointerException.class);
   }
 
   public enum MyEnum {
diff --git a/src/test/java/com/android/tools/r8/examples/jumbostring/JumboStringTestRunner.java b/src/test/java/com/android/tools/r8/examples/jumbostring/JumboStringTestRunner.java
index dd474a2..db99557 100644
--- a/src/test/java/com/android/tools/r8/examples/jumbostring/JumboStringTestRunner.java
+++ b/src/test/java/com/android/tools/r8/examples/jumbostring/JumboStringTestRunner.java
@@ -53,7 +53,8 @@
 
   @Test
   public void testR8() throws Exception {
-    runTestR8();
+    // Disable shrinking and obfuscation so that the fields and their names are retained.
+    runTestR8(b -> b.addDontShrink().addDontObfuscate());
   }
 
   @Test
diff --git a/src/test/java/com/android/tools/r8/graph/invokespecial/InvokeSpecialOnOtherInterfaceTest.java b/src/test/java/com/android/tools/r8/graph/invokespecial/InvokeSpecialOnOtherInterfaceTest.java
index c66a13d..870109f 100644
--- a/src/test/java/com/android/tools/r8/graph/invokespecial/InvokeSpecialOnOtherInterfaceTest.java
+++ b/src/test/java/com/android/tools/r8/graph/invokespecial/InvokeSpecialOnOtherInterfaceTest.java
@@ -8,11 +8,13 @@
 import static org.junit.Assert.assertEquals;
 import static org.objectweb.asm.Opcodes.INVOKESPECIAL;
 
+import com.android.tools.r8.NoHorizontalClassMerging;
 import com.android.tools.r8.NoMethodStaticizing;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestParametersCollection;
 import com.android.tools.r8.ToolHelper.DexVm.Version;
+import com.android.tools.r8.utils.codeinspector.HorizontallyMergedClassesInspector;
 import java.io.IOException;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -57,6 +59,9 @@
         .addProgramClasses(I.class)
         .addProgramClassFileData(getClassWithTransformedInvoked())
         .addKeepMainRule(Main.class)
+        .addHorizontallyMergedClassesInspector(
+            HorizontallyMergedClassesInspector::assertNoClassesMerged)
+        .enableNoHorizontalClassMergingAnnotations()
         .enableNoMethodStaticizingAnnotations()
         .setMinApi(parameters)
         .run(parameters.getRuntime(), Main.class)
@@ -92,6 +97,7 @@
     }
   }
 
+  @NoHorizontalClassMerging
   public static class A {
 
     public void bar(I i) {
diff --git a/src/test/java/com/android/tools/r8/internal/proto/ChromeProtoRewritingTest.java b/src/test/java/com/android/tools/r8/internal/proto/ChromeProtoRewritingTest.java
index a2adf72..f9822e9 100644
--- a/src/test/java/com/android/tools/r8/internal/proto/ChromeProtoRewritingTest.java
+++ b/src/test/java/com/android/tools/r8/internal/proto/ChromeProtoRewritingTest.java
@@ -51,7 +51,6 @@
         .addDontWarn("android.content.pm.IPackageManager")
         .addOptionsModification(
             options -> options.getOpenClosedInterfacesOptions().suppressAllOpenInterfaces())
-        .allowCheckDiscardedErrors()
         .allowUnusedDontWarnPatterns()
         .allowUnusedProguardConfigurationRules()
         .enableProtoShrinking(false)
diff --git a/src/test/java/com/android/tools/r8/ir/analysis/fieldaccess/FieldBitAccessInfoTest.java b/src/test/java/com/android/tools/r8/ir/analysis/fieldaccess/FieldBitAccessInfoTest.java
index 2cdeffd..e373513 100644
--- a/src/test/java/com/android/tools/r8/ir/analysis/fieldaccess/FieldBitAccessInfoTest.java
+++ b/src/test/java/com/android/tools/r8/ir/analysis/fieldaccess/FieldBitAccessInfoTest.java
@@ -27,6 +27,7 @@
 import com.android.tools.r8.graph.ProgramMethod;
 import com.android.tools.r8.graph.bytecodemetadata.BytecodeMetadataProvider;
 import com.android.tools.r8.ir.code.IRCode;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions;
 import com.android.tools.r8.ir.conversion.MethodProcessorEventConsumer;
 import com.android.tools.r8.ir.conversion.MethodProcessorWithWave;
 import com.android.tools.r8.ir.optimize.info.OptimizationFeedbackIgnore;
@@ -94,7 +95,7 @@
 
     clazz.forEachProgramMethod(
         method -> {
-          IRCode code = method.buildIR(appView);
+          IRCode code = method.buildIR(appView, MethodConversionOptions.nonConverting());
           fieldAccessAnalysis.recordFieldAccesses(
               code, BytecodeMetadataProvider.builder(), feedback, new PrimaryMethodProcessorMock());
         });
diff --git a/src/test/java/com/android/tools/r8/ir/analysis/sideeffect/SingletonClassInitializerWithInstancePutCanBePostponedTest.java b/src/test/java/com/android/tools/r8/ir/analysis/sideeffect/SingletonClassInitializerWithInstancePutCanBePostponedTest.java
index ce9bdd7..7527b96 100644
--- a/src/test/java/com/android/tools/r8/ir/analysis/sideeffect/SingletonClassInitializerWithInstancePutCanBePostponedTest.java
+++ b/src/test/java/com/android/tools/r8/ir/analysis/sideeffect/SingletonClassInitializerWithInstancePutCanBePostponedTest.java
@@ -12,6 +12,7 @@
 import com.android.tools.r8.NeverClassInline;
 import com.android.tools.r8.NeverInline;
 import com.android.tools.r8.NeverPropagateValue;
+import com.android.tools.r8.NoAccessModification;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestParametersCollection;
@@ -44,6 +45,7 @@
         .enableInliningAnnotations()
         .enableMemberValuePropagationAnnotations()
         .enableNeverClassInliningAnnotations()
+        .enableNoAccessModificationAnnotationsForMembers()
         .setMinApi(parameters)
         .compile()
         .inspect(this::inspect)
@@ -72,7 +74,7 @@
   @NeverClassInline
   static class A {
 
-    private static A INSTANCE;
+    @NoAccessModification private static A INSTANCE;
 
     static {
       A a = new A();
diff --git a/src/test/java/com/android/tools/r8/ir/analysis/sideeffect/SingletonClassInitializerWithInstancePutCannotBePostponedTest.java b/src/test/java/com/android/tools/r8/ir/analysis/sideeffect/SingletonClassInitializerWithInstancePutCannotBePostponedTest.java
index f9cf925..b2644a7 100644
--- a/src/test/java/com/android/tools/r8/ir/analysis/sideeffect/SingletonClassInitializerWithInstancePutCannotBePostponedTest.java
+++ b/src/test/java/com/android/tools/r8/ir/analysis/sideeffect/SingletonClassInitializerWithInstancePutCannotBePostponedTest.java
@@ -12,6 +12,7 @@
 import com.android.tools.r8.NeverClassInline;
 import com.android.tools.r8.NeverInline;
 import com.android.tools.r8.NeverPropagateValue;
+import com.android.tools.r8.NoAccessModification;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestParametersCollection;
@@ -44,6 +45,7 @@
         .enableInliningAnnotations()
         .enableMemberValuePropagationAnnotations()
         .enableNeverClassInliningAnnotations()
+        .enableNoAccessModificationAnnotationsForMembers()
         .setMinApi(parameters)
         .compile()
         .inspect(this::inspect)
@@ -77,7 +79,7 @@
   @NeverClassInline
   static class A {
 
-    private static A INSTANCE;
+    @NoAccessModification private static A INSTANCE;
 
     static {
       A a = new A();
diff --git a/src/test/java/com/android/tools/r8/ir/analysis/type/TypeAnalysisTest.java b/src/test/java/com/android/tools/r8/ir/analysis/type/TypeAnalysisTest.java
index 40c87b6..e370d88 100644
--- a/src/test/java/com/android/tools/r8/ir/analysis/type/TypeAnalysisTest.java
+++ b/src/test/java/com/android/tools/r8/ir/analysis/type/TypeAnalysisTest.java
@@ -30,14 +30,11 @@
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.smali.SmaliTestBase;
 import com.android.tools.r8.utils.AndroidApp;
-import com.android.tools.r8.utils.Smali;
 import com.android.tools.r8.utils.codeinspector.CodeInspector;
 import com.android.tools.r8.utils.codeinspector.MethodSubject;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
-import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
-import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -64,32 +61,34 @@
 
   public TypeAnalysisTest(String test, BiConsumer<AppView<?>, CodeInspector> inspection) {
     dirName = test.substring(0, test.lastIndexOf('/'));
-    smaliFileName = test.substring(test.lastIndexOf('/') + 1) + ".smali";
+    smaliFileName = test.substring(test.lastIndexOf('/') + 1) + ".dex";
     this.inspection = inspection;
   }
 
   @Parameters(name = "{0}")
   public static Collection<Object[]> data() {
-    List<String> tests = Arrays.asList(
-        "arithmetic/Arithmetic",
-        "fibonacci/Fibonacci",
-        "fill-array-data/FillArrayData",
-        "filled-new-array/FilledNewArray",
-        "infinite-loop/InfiniteLoop1",
-        "try-catch/TryCatch",
-        "type-confusion-regression/TestObject",
-        "type-confusion-regression5/TestObject"
-    );
+    List<String> tests =
+        Arrays.asList(
+            "arithmetic/arithmetic",
+            "fibonacci/fibonacci",
+            "fill-array-data/fill-array-data",
+            "filled-new-array/filled-new-array",
+            "infinite-loop/infinite-loop",
+            "try-catch/try-catch",
+            "type-confusion-regression/type-confusion-regression",
+            "type-confusion-regression5/type-confusion-regression5");
 
     Map<String, BiConsumer<AppView<?>, CodeInspector>> inspections = new HashMap<>();
-    inspections.put("arithmetic/Arithmetic", TypeAnalysisTest::arithmetic);
-    inspections.put("fibonacci/Fibonacci", TypeAnalysisTest::fibonacci);
-    inspections.put("fill-array-data/FillArrayData", TypeAnalysisTest::fillArrayData);
-    inspections.put("filled-new-array/FilledNewArray", TypeAnalysisTest::filledNewArray);
-    inspections.put("infinite-loop/InfiniteLoop1", TypeAnalysisTest::infiniteLoop);
-    inspections.put("try-catch/TryCatch", TypeAnalysisTest::tryCatch);
-    inspections.put("type-confusion-regression/TestObject", TypeAnalysisTest::typeConfusion);
-    inspections.put("type-confusion-regression5/TestObject", TypeAnalysisTest::typeConfusion5);
+    inspections.put("arithmetic/arithmetic", TypeAnalysisTest::arithmetic);
+    inspections.put("fibonacci/fibonacci", TypeAnalysisTest::fibonacci);
+    inspections.put("fill-array-data/fill-array-data", TypeAnalysisTest::fillArrayData);
+    inspections.put("filled-new-array/filled-new-array", TypeAnalysisTest::filledNewArray);
+    inspections.put("infinite-loop/infinite-loop", TypeAnalysisTest::infiniteLoop);
+    inspections.put("try-catch/try-catch", TypeAnalysisTest::tryCatch);
+    inspections.put(
+        "type-confusion-regression/type-confusion-regression", TypeAnalysisTest::typeConfusion);
+    inspections.put(
+        "type-confusion-regression5/type-confusion-regression5", TypeAnalysisTest::typeConfusion5);
 
     List<Object[]> testCases = new ArrayList<>();
     for (String test : tests) {
@@ -101,11 +100,8 @@
 
   @Test
   public void typeAnalysisTest() throws Exception {
-    Path smaliPath = Paths.get(ToolHelper.SMALI_DIR, dirName, smaliFileName);
-    StringBuilder smaliStringBuilder = new StringBuilder();
-    Files.lines(smaliPath, StandardCharsets.UTF_8)
-        .forEach(s -> smaliStringBuilder.append(s).append(System.lineSeparator()));
-    byte[] content = Smali.compile(smaliStringBuilder.toString());
+    byte[] content =
+        Files.readAllBytes(Paths.get(ToolHelper.SMALI_BUILD_DIR, dirName, smaliFileName));
     AndroidApp app = AndroidApp.builder().addDexProgramData(content, Origin.unknown()).build();
     AppView<AppInfo> appView = computeAppView(app);
     inspection.accept(appView, new CodeInspector(appView.appInfo().app()));
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/ConstantRemovalTest.java b/src/test/java/com/android/tools/r8/ir/optimize/ConstantRemovalTest.java
index 60cad4c..93ad7a7 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/ConstantRemovalTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/ConstantRemovalTest.java
@@ -5,6 +5,8 @@
 
 import static org.junit.Assert.assertEquals;
 
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
 import com.android.tools.r8.graph.AppInfo;
 import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexApplication;
@@ -22,7 +24,7 @@
 import com.android.tools.r8.ir.code.Position.SyntheticPosition;
 import com.android.tools.r8.ir.code.Return;
 import com.android.tools.r8.ir.code.Value;
-import com.android.tools.r8.ir.conversion.MethodConversionOptions.MutableMethodConversionOptions;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions;
 import com.android.tools.r8.ir.regalloc.LinearScanRegisterAllocator;
 import com.android.tools.r8.ir.regalloc.LiveIntervals;
 import com.android.tools.r8.origin.Origin;
@@ -30,9 +32,22 @@
 import com.android.tools.r8.utils.InternalOptions;
 import java.util.LinkedList;
 import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
 
+@RunWith(Parameterized.class)
 public class ConstantRemovalTest {
 
+  @Parameters(name = "{0}")
+  public static TestParametersCollection data() {
+    return TestParameters.builder().withNoneRuntime().build();
+  }
+
+  public ConstantRemovalTest(TestParameters parameters) {
+    parameters.assertNoneRuntime();
+  }
+
   private static class MockLinearScanRegisterAllocator extends LinearScanRegisterAllocator {
     MockLinearScanRegisterAllocator(AppView<?> appView, IRCode code) {
       super(appView, code);
@@ -152,7 +167,7 @@
             basicBlockNumberGenerator,
             IRMetadata.unknown(),
             Origin.unknown(),
-            new MutableMethodConversionOptions(options));
+            MethodConversionOptions.nonConverting());
     PeepholeOptimizer.optimize(appView, code, new MockLinearScanRegisterAllocator(appView, code));
 
     // Check that all four constant number instructions remain.
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/R8InliningTest.java b/src/test/java/com/android/tools/r8/ir/optimize/R8InliningTest.java
index 049bfdf..00e0441 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/R8InliningTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/R8InliningTest.java
@@ -317,29 +317,29 @@
 
     // These constants describe the expected number of invoke instructions calling a possibly
     // inlined method.
-    final int ALWAYS_INLINABLE = 0;
-    final int INLINABLE = allowAccessModification ? 0 : 1;
-    final int NEVER_INLINABLE = 1;
+    int ALWAYS_INLINABLE = 0;
+    int INLINABLE_WHEN_DISABLED = allowAccessModification ? 1 : 0;
+    int NEVER_INLINABLE = 1;
 
     ClassSubject clazz = inspector.clazz(nullabilityClass);
     MethodSubject m;
 
     m = clazz.method("int", "inlinable", ImmutableList.of("inlining.A"));
-    assertCounters(INLINABLE, INLINABLE, countInvokes(inspector, m));
+    assertCounters(ALWAYS_INLINABLE, ALWAYS_INLINABLE, countInvokes(inspector, m));
 
     m =
         clazz.method(
             allowAccessModification ? "void" : "int",
             "notInlinable",
             ImmutableList.of("inlining." + (allowAccessModification ? "B" : "A")));
-    assertCounters(INLINABLE, NEVER_INLINABLE, countInvokes(inspector, m));
+    assertCounters(ALWAYS_INLINABLE, INLINABLE_WHEN_DISABLED, countInvokes(inspector, m));
 
     m = clazz.method("int", "notInlinableDueToMissingNpe", ImmutableList.of("inlining.A"));
-    assertCounters(INLINABLE, ALWAYS_INLINABLE, countInvokes(inspector, m));
+    assertCounters(ALWAYS_INLINABLE, ALWAYS_INLINABLE, countInvokes(inspector, m));
 
     m = clazz.method("int", "notInlinableDueToSideEffect", ImmutableList.of("inlining.A"));
     assertCounters(
-        parameters.isCfRuntime() ? INLINABLE : NEVER_INLINABLE,
+        parameters.isCfRuntime() ? ALWAYS_INLINABLE : NEVER_INLINABLE,
         NEVER_INLINABLE,
         countInvokes(inspector, m));
 
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/TrivialGotoEliminationTest.java b/src/test/java/com/android/tools/r8/ir/optimize/TrivialGotoEliminationTest.java
index 9e02653..18c5121 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/TrivialGotoEliminationTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/TrivialGotoEliminationTest.java
@@ -28,7 +28,7 @@
 import com.android.tools.r8.ir.code.Return;
 import com.android.tools.r8.ir.code.Throw;
 import com.android.tools.r8.ir.code.Value;
-import com.android.tools.r8.ir.conversion.MethodConversionOptions.MutableMethodConversionOptions;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions;
 import com.android.tools.r8.ir.conversion.passes.TrivialGotosCollapser;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.utils.AndroidApp;
@@ -108,7 +108,7 @@
             basicBlockNumberGenerator,
             IRMetadata.unknown(),
             Origin.unknown(),
-            new MutableMethodConversionOptions(options));
+            MethodConversionOptions.forD8(appView));
     new TrivialGotosCollapser(appView).run(code, Timing.empty());
     assertTrue(code.entryBlock().isTrivialGoto());
     assertTrue(blocks.contains(block0));
@@ -197,7 +197,7 @@
             basicBlockNumberGenerator,
             IRMetadata.unknown(),
             Origin.unknown(),
-            new MutableMethodConversionOptions(options));
+            MethodConversionOptions.forD8(appView));
     new TrivialGotosCollapser(appView).run(code, Timing.empty());
     assertTrue(block0.getInstructions().get(1).isIf());
     assertEquals(block1, block0.getInstructions().get(1).asIf().fallthroughBlock());
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/checkcast/CheckCastChainRemoval2Test.java b/src/test/java/com/android/tools/r8/ir/optimize/checkcast/CheckCastChainRemoval2Test.java
new file mode 100644
index 0000000..b1f7de9
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/ir/optimize/checkcast/CheckCastChainRemoval2Test.java
@@ -0,0 +1,65 @@
+// Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+package com.android.tools.r8.ir.optimize.checkcast;
+
+import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.TestBase;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public class CheckCastChainRemoval2Test extends TestBase {
+
+  @Parameter(0)
+  public TestParameters parameters;
+
+  public CheckCastChainRemoval2Test() {}
+
+  @Parameters(name = "{0}")
+  public static TestParametersCollection data() {
+    return getTestParameters().withAllRuntimesAndApiLevels().build();
+  }
+
+  @Test
+  public void testCheckCast() throws Exception {
+    testForR8(parameters.getBackend())
+        .addProgramClasses(A.class, B.class, Main.class)
+        .addKeepAllClassesRule()
+        .addKeepMainRule(Main.class)
+        .addOptionsModification((opt) -> opt.testing.enableCheckCastAndInstanceOfRemoval = false)
+        .enableInliningAnnotations()
+        .setMinApi(this.parameters)
+        .run(this.parameters.getRuntime(), Main.class)
+        .assertSuccessWithOutputLines("false");
+  }
+
+  public static class Main {
+
+    public static void main(String[] args) {
+      System.out.println(check());
+    }
+
+    @NeverInline
+    private static boolean check() {
+      Object o = null;
+      A a = (A) o;
+      if (a instanceof B) {
+        B b = (B) a;
+        return true;
+      } else {
+        return false;
+      }
+    }
+  }
+
+  static class B extends A {}
+
+  static class A {}
+}
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/classinliner/ClassInlineInstanceInitializerWithInaccessibleStaticGetTest.java b/src/test/java/com/android/tools/r8/ir/optimize/classinliner/ClassInlineInstanceInitializerWithInaccessibleStaticGetTest.java
index 47f8ffa..62e08ce 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/classinliner/ClassInlineInstanceInitializerWithInaccessibleStaticGetTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/classinliner/ClassInlineInstanceInitializerWithInaccessibleStaticGetTest.java
@@ -41,6 +41,7 @@
             ClassInlineInstanceInitializerWithInaccessibleStaticGetTestClasses.class)
         .addKeepMainRule(TestClass.class)
         .enableInliningAnnotations()
+        .enableNoAccessModificationAnnotationsForMembers()
         .enableNoHorizontalClassMergingAnnotations()
         .setMinApi(parameters)
         .compile()
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/classinliner/testclasses/ClassInlineInstanceInitializerWithInaccessibleStaticGetTestClasses.java b/src/test/java/com/android/tools/r8/ir/optimize/classinliner/testclasses/ClassInlineInstanceInitializerWithInaccessibleStaticGetTestClasses.java
index 4943a47..b344030 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/classinliner/testclasses/ClassInlineInstanceInitializerWithInaccessibleStaticGetTestClasses.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/classinliner/testclasses/ClassInlineInstanceInitializerWithInaccessibleStaticGetTestClasses.java
@@ -4,6 +4,7 @@
 
 package com.android.tools.r8.ir.optimize.classinliner.testclasses;
 
+import com.android.tools.r8.NoAccessModification;
 import com.android.tools.r8.NoHorizontalClassMerging;
 
 public class ClassInlineInstanceInitializerWithInaccessibleStaticGetTestClasses {
@@ -24,7 +25,7 @@
 
   public static class Environment {
 
-    /*package-private*/ static boolean VALUE;
+    @NoAccessModification /*package-private*/ static boolean VALUE;
 
     public static void setValue(boolean value) {
       VALUE = value;
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/inliner/InlineFunctionalInterfaceMethodImplementedByLambdasTest.java b/src/test/java/com/android/tools/r8/ir/optimize/inliner/InlineFunctionalInterfaceMethodImplementedByLambdasTest.java
index 441f149..ccd59c6 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/inliner/InlineFunctionalInterfaceMethodImplementedByLambdasTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/inliner/InlineFunctionalInterfaceMethodImplementedByLambdasTest.java
@@ -5,7 +5,6 @@
 package com.android.tools.r8.ir.optimize.inliner;
 
 import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
-import static com.android.tools.r8.utils.codeinspector.Matchers.notIf;
 import static org.hamcrest.CoreMatchers.not;
 import static org.hamcrest.MatcherAssert.assertThat;
 
@@ -39,6 +38,7 @@
         .addKeepMainRule(TestClass.class)
         .enableNeverClassInliningAnnotations()
         .setMinApi(parameters)
+        .addOptionsModification(o -> o.testing.enableLir())
         .compile()
         .inspect(this::inspect)
         .run(parameters.getRuntime(), TestClass.class)
@@ -52,9 +52,8 @@
       // Used by the invoke-custom instruction.
       assertThat(inspector.clazz(I.class), isPresent());
     }
-
-    // When compiling to DEX, A.m() will be single caller inlined in the second optimization pass.
-    assertThat(inspector.clazz(A.class), notIf(isPresent(), parameters.isDexRuntime()));
+    // A.m() will be single caller inlined in the second optimization pass.
+    assertThat(inspector.clazz(A.class), not(isPresent()));
   }
 
   static class TestClass {
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/inliner/InlineNonReboundFieldTest.java b/src/test/java/com/android/tools/r8/ir/optimize/inliner/InlineNonReboundFieldTest.java
index e4ad5b8..0179d87 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/inliner/InlineNonReboundFieldTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/inliner/InlineNonReboundFieldTest.java
@@ -10,26 +10,44 @@
 
 import com.android.tools.r8.NeverClassInline;
 import com.android.tools.r8.TestBase;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
 import com.android.tools.r8.ir.optimize.inliner.testclasses.Greeting;
 import com.android.tools.r8.utils.StringUtils;
 import com.android.tools.r8.utils.codeinspector.ClassSubject;
 import com.android.tools.r8.utils.codeinspector.CodeInspector;
 import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
+import org.junit.runners.Parameterized.Parameters;
 
 /** Regression test for b/128604123. */
+@RunWith(Parameterized.class)
 public class InlineNonReboundFieldTest extends TestBase {
 
+  @Parameter(0)
+  public TestParameters parameters;
+
+  @Parameters(name = "{0}")
+  public static TestParametersCollection data() {
+    return getTestParameters().withAllRuntimesAndApiLevels().build();
+  }
+
   @Test
   public void test() throws Exception {
     String expectedOutput = StringUtils.lines("Greeter: Hello world!");
     CodeInspector inspector =
-        testForR8(Backend.DEX)
+        testForR8(parameters.getBackend())
             .addProgramClasses(
                 TestClass.class, Greeter.class, Greeting.class, Greeting.getGreetingBase())
             .addKeepMainRule(TestClass.class)
             .enableNeverClassInliningAnnotations()
+            .enableNoAccessModificationAnnotationsForClasses()
+            .enableNoAccessModificationAnnotationsForMembers()
             .enableNoVerticalClassMergingAnnotations()
-            .run(TestClass.class)
+            .setMinApi(parameters)
+            .run(parameters.getRuntime(), TestClass.class)
             .assertSuccessWithOutput(expectedOutput)
             .inspector();
 
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/inliner/InliningIntoVisibilityBridgeTest.java b/src/test/java/com/android/tools/r8/ir/optimize/inliner/InliningIntoVisibilityBridgeTest.java
index 4498fe9..ade059d 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/inliner/InliningIntoVisibilityBridgeTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/inliner/InliningIntoVisibilityBridgeTest.java
@@ -56,6 +56,7 @@
             .addKeepMainRule(TestClass.class)
             .addInliningAnnotations()
             .applyIf(neverInline, R8TestBuilder::enableInliningAnnotations)
+            .enableNoAccessModificationAnnotationsForClasses()
             .enableNoVerticalClassMergingAnnotations()
             .enableProguardTestOptions()
             .setMinApi(parameters)
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/inliner/SingleTargetAfterInliningTest.java b/src/test/java/com/android/tools/r8/ir/optimize/inliner/SingleTargetAfterInliningTest.java
index 706f8f0..95cf23e 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/inliner/SingleTargetAfterInliningTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/inliner/SingleTargetAfterInliningTest.java
@@ -4,6 +4,7 @@
 
 package com.android.tools.r8.ir.optimize.inliner;
 
+import static com.android.tools.r8.utils.codeinspector.Matchers.isAbsent;
 import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
 import static com.android.tools.r8.utils.codeinspector.Matchers.notIf;
 import static org.hamcrest.CoreMatchers.not;
@@ -83,7 +84,9 @@
     ClassSubject bClassSubject = inspector.clazz(B.class);
     assertThat(bClassSubject, isPresent());
     // TODO(b/286058449): We could inline this.
-    assertThat(bClassSubject.uniqueMethodWithOriginalName("foo"), isPresent());
+    assertThat(
+        bClassSubject.uniqueMethodWithOriginalName("foo"),
+        (parameters.isCfRuntime() && maxInliningDepth == 1) ? isAbsent() : isPresent());
 
     // B.bar() should always be inlined because it is marked as @AlwaysInline.
     assertThat(
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/inliner/testclasses/Greeting.java b/src/test/java/com/android/tools/r8/ir/optimize/inliner/testclasses/Greeting.java
index 717c09f..b4005aa 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/inliner/testclasses/Greeting.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/inliner/testclasses/Greeting.java
@@ -4,6 +4,7 @@
 
 package com.android.tools.r8.ir.optimize.inliner.testclasses;
 
+import com.android.tools.r8.NoAccessModification;
 import com.android.tools.r8.NoVerticalClassMerging;
 
 @NoVerticalClassMerging
@@ -14,8 +15,9 @@
   }
 }
 
+@NoAccessModification
 @NoVerticalClassMerging
 class GreetingBase {
 
-  protected String greeting;
+  @NoAccessModification protected String greeting;
 }
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/inliner/testclasses/InliningIntoVisibilityBridgeTestClasses.java b/src/test/java/com/android/tools/r8/ir/optimize/inliner/testclasses/InliningIntoVisibilityBridgeTestClasses.java
index e856133..6732d39 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/inliner/testclasses/InliningIntoVisibilityBridgeTestClasses.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/inliner/testclasses/InliningIntoVisibilityBridgeTestClasses.java
@@ -5,6 +5,7 @@
 package com.android.tools.r8.ir.optimize.inliner.testclasses;
 
 import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
 import com.android.tools.r8.NoVerticalClassMerging;
 
 public class InliningIntoVisibilityBridgeTestClasses {
@@ -13,6 +14,7 @@
     return InliningIntoVisibilityBridgeTestClassA.class;
   }
 
+  @NoAccessModification
   @NoVerticalClassMerging
   static class InliningIntoVisibilityBridgeTestClassA {
 
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/instanceofremoval/illegalaccess/IllegalAccessDeadInstanceOfTest.java b/src/test/java/com/android/tools/r8/ir/optimize/instanceofremoval/illegalaccess/IllegalAccessDeadInstanceOfTest.java
new file mode 100644
index 0000000..68b19e4
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/ir/optimize/instanceofremoval/illegalaccess/IllegalAccessDeadInstanceOfTest.java
@@ -0,0 +1,70 @@
+// Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+package com.android.tools.r8.ir.optimize.instanceofremoval.illegalaccess;
+
+import com.android.tools.r8.TestBase;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
+import com.android.tools.r8.ir.optimize.instanceofremoval.illegalaccess.pkg.A;
+import java.io.IOException;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public class IllegalAccessDeadInstanceOfTest extends TestBase {
+
+  @Parameter(0)
+  public TestParameters parameters;
+
+  public IllegalAccessDeadInstanceOfTest() {}
+
+  @Parameters(name = "{0}")
+  public static TestParametersCollection data() {
+    return getTestParameters().withAllRuntimesAndApiLevels().build();
+  }
+
+  @Test
+  public void testReference() throws Exception {
+    testForRuntime(parameters)
+        .addProgramClasses(Main.class)
+        .addProgramClassFileData(getTransformedA())
+        .run(this.parameters.getRuntime(), Main.class)
+        .assertSuccessWithOutputLines("false");
+  }
+
+  @Test
+  public void testR8() throws Exception {
+    testForR8(parameters.getBackend())
+        .addProgramClasses(Main.class)
+        .addProgramClassFileData(getTransformedA())
+        .addKeepMainRule(Main.class)
+        .setMinApi(this.parameters)
+        .run(this.parameters.getRuntime(), Main.class)
+        .assertSuccessWithOutputLines("false");
+  }
+
+  private static byte[] getTransformedA() throws IOException {
+    return transformer(A.class).setClassAccessFlags(0).transform();
+  }
+
+  public static class Main {
+
+    public static void main(String[] args) {
+      System.out.println(check());
+    }
+
+    private static boolean check() {
+      Object o = null;
+      // A is transformed to be a non-public class in a different package.
+      if (o instanceof A) {
+        return true;
+      }
+      return false;
+    }
+  }
+}
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/instanceofremoval/illegalaccess/pkg/A.java b/src/test/java/com/android/tools/r8/ir/optimize/instanceofremoval/illegalaccess/pkg/A.java
new file mode 100644
index 0000000..989006a
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/ir/optimize/instanceofremoval/illegalaccess/pkg/A.java
@@ -0,0 +1,7 @@
+// Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+package com.android.tools.r8.ir.optimize.instanceofremoval.illegalaccess.pkg;
+
+public /* will be private */ class A {}
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/outliner/b149971007/B149971007.java b/src/test/java/com/android/tools/r8/ir/optimize/outliner/b149971007/B149971007.java
index 7b02aea..156a17d 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/outliner/b149971007/B149971007.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/outliner/b149971007/B149971007.java
@@ -203,7 +203,11 @@
 
   public static class FeatureAPI {
     private static String featureClassName() {
-      return FeatureAPI.class.getPackage().getName() + ".B149971007$FeatureClass";
+      String packageName =
+          System.currentTimeMillis() > 0
+              ? "com.android.tools.r8.ir.optimize.outliner.b149971007"
+              : null;
+      return packageName + ".B149971007$FeatureClass";
     }
 
     public static boolean hasFeature() {
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/NestedInterfaceMethodTest.java b/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/NestedInterfaceMethodTest.java
index 085002e..9626829 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/NestedInterfaceMethodTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/NestedInterfaceMethodTest.java
@@ -60,8 +60,11 @@
             .enableNoVerticalClassMergingAnnotations()
             .addOptionsModification(
                 options -> {
+                  options.testing.enableLir();
                   options.enableDevirtualization = false;
                   options.inlinerOptions().enableInliningOfInvokesWithNullableReceivers = false;
+                  // The checks for I being present rely on not simple inlining.
+                  options.inlinerOptions().simpleInliningInstructionLimit = 3;
                 })
             .setMinApi(AndroidApiLevel.B)
             .run(parameters.getRuntime(), TestClass.class)
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/PrivateInstanceMethodCollisionTest.java b/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/PrivateInstanceMethodCollisionTest.java
index badd467..eff87f7 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/PrivateInstanceMethodCollisionTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/PrivateInstanceMethodCollisionTest.java
@@ -10,6 +10,7 @@
 
 import com.android.tools.r8.NeverClassInline;
 import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
 import com.android.tools.r8.NoHorizontalClassMerging;
 import com.android.tools.r8.NoMethodStaticizing;
 import com.android.tools.r8.TestBase;
@@ -68,6 +69,10 @@
         .enableNoMethodStaticizingAnnotations()
         .minification(minification)
         .allowAccessModification(allowAccessModification)
+        .applyIf(
+            allowAccessModification,
+            testBuilder -> testBuilder.addNoAccessModificationAnnotation(),
+            testBuilder -> testBuilder.enableNoAccessModificationAnnotationsForMembers())
         .setMinApi(parameters)
         .compile()
         .inspect(this::verifyUninstantiatedArgumentsRemovedAndNoCollisions)
@@ -115,6 +120,7 @@
   @NeverClassInline
   static class A {
     @NeverInline
+    @NoAccessModification
     @NoMethodStaticizing
     private void foo(B instantiated) {
       System.out.println("A#foo(" + instantiated + ")");
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/PrivateInstanceMethodCollisionTest.java b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/PrivateInstanceMethodCollisionTest.java
index 30c55f2..ccfb422 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/PrivateInstanceMethodCollisionTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/PrivateInstanceMethodCollisionTest.java
@@ -11,6 +11,7 @@
 import com.android.tools.r8.KeepConstantArguments;
 import com.android.tools.r8.NeverClassInline;
 import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
 import com.android.tools.r8.NoMethodStaticizing;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
@@ -68,6 +69,10 @@
         .enableNoMethodStaticizingAnnotations()
         .minification(minification)
         .allowAccessModification(allowAccessModification)
+        .applyIf(
+            allowAccessModification,
+            testBuilder -> testBuilder.addNoAccessModificationAnnotation(),
+            testBuilder -> testBuilder.enableNoAccessModificationAnnotationsForMembers())
         .setMinApi(parameters)
         .compile()
         .inspect(this::verifyUnusedArgumentsRemovedAndNoCollisions)
@@ -113,8 +118,10 @@
 
   @NeverClassInline
   static class A {
+
     @KeepConstantArguments
     @NeverInline
+    @NoAccessModification
     @NoMethodStaticizing
     private void foo(String used) {
       System.out.println("A#foo(" + used + ")");
@@ -122,6 +129,7 @@
 
     @KeepConstantArguments
     @NeverInline
+    @NoAccessModification
     @NoMethodStaticizing
     void foo(String used, Object unused) {
       System.out.println("A#foo(" + used + ", Object)");
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsObjectTest.java b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsObjectTest.java
index 718a3e0..433bb6c 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsObjectTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsObjectTest.java
@@ -8,6 +8,7 @@
 
 import com.android.tools.r8.NeverClassInline;
 import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
 import com.android.tools.r8.NoMethodStaticizing;
 import com.android.tools.r8.R8FullTestBuilder;
 import com.android.tools.r8.TestParameters;
@@ -59,18 +60,21 @@
     }
 
     @NeverInline
+    @NoAccessModification
     @NoMethodStaticizing
     private Object privateMethod(Object a) {
       return a;
     }
 
     @NeverInline
+    @NoAccessModification
     @NoMethodStaticizing
     private Object privateMethod(Object a, Object b) {
       return a;
     }
 
     @NeverInline
+    @NoAccessModification
     @NoMethodStaticizing
     private Object privateMethod(Object a, Object b, Object c) {
       return a;
@@ -116,6 +120,7 @@
     builder
         .enableNeverClassInliningAnnotations()
         .enableInliningAnnotations()
+        .enableNoAccessModificationAnnotationsForMembers()
         .enableNoMethodStaticizingAnnotations();
   }
 
diff --git a/src/test/java/com/android/tools/r8/ir/regalloc/IdenticalAfterRegisterAllocationTest.java b/src/test/java/com/android/tools/r8/ir/regalloc/IdenticalAfterRegisterAllocationTest.java
index 983dfdb..d2bf214 100644
--- a/src/test/java/com/android/tools/r8/ir/regalloc/IdenticalAfterRegisterAllocationTest.java
+++ b/src/test/java/com/android/tools/r8/ir/regalloc/IdenticalAfterRegisterAllocationTest.java
@@ -20,7 +20,7 @@
 import com.android.tools.r8.ir.code.NumericType;
 import com.android.tools.r8.ir.code.Position;
 import com.android.tools.r8.ir.code.Value;
-import com.android.tools.r8.ir.conversion.MethodConversionOptions.MutableMethodConversionOptions;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions;
 import com.android.tools.r8.utils.InternalOptions;
 import java.util.List;
 import org.junit.Test;
@@ -126,6 +126,34 @@
     // not equivalent.
     assertFalse(
         add0.identicalAfterRegisterAllocation(
-            add1, allocator, new MutableMethodConversionOptions(allocator.options())));
+            add1,
+            allocator,
+            new MethodConversionOptions() {
+
+              @Override
+              public boolean isGeneratingDex() {
+                return true;
+              }
+
+              @Override
+              public boolean isGeneratingLir() {
+                return false;
+              }
+
+              @Override
+              public boolean isGeneratingClassFiles() {
+                return false;
+              }
+
+              @Override
+              public boolean isPeepholeOptimizationsEnabled() {
+                return false;
+              }
+
+              @Override
+              public boolean isStringSwitchConversionEnabled() {
+                return false;
+              }
+            }));
   }
 }
diff --git a/src/test/java/com/android/tools/r8/keepanno/CheckOptimizedOutAnnotationTest.java b/src/test/java/com/android/tools/r8/keepanno/CheckOptimizedOutAnnotationTest.java
new file mode 100644
index 0000000..adc446c
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/keepanno/CheckOptimizedOutAnnotationTest.java
@@ -0,0 +1,129 @@
+// Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package com.android.tools.r8.keepanno;
+
+import static com.android.tools.r8.utils.codeinspector.Matchers.isAbsent;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertEquals;
+
+import com.android.tools.r8.DiagnosticsLevel;
+import com.android.tools.r8.DiagnosticsMatcher;
+import com.android.tools.r8.TestBase;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
+import com.android.tools.r8.errors.CheckDiscardDiagnostic;
+import com.android.tools.r8.keepanno.annotations.CheckOptimizedOut;
+import com.android.tools.r8.utils.AndroidApiLevel;
+import com.android.tools.r8.utils.StringUtils;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.google.common.collect.ImmutableList;
+import java.util.List;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+@RunWith(Parameterized.class)
+public class CheckOptimizedOutAnnotationTest extends TestBase {
+
+  static final String EXPECTED = StringUtils.lines("A", "B.baz");
+
+  private final TestParameters parameters;
+
+  @Parameterized.Parameters(name = "{0}")
+  public static TestParametersCollection data() {
+    return getTestParameters().withDefaultRuntimes().withApiLevel(AndroidApiLevel.B).build();
+  }
+
+  public CheckOptimizedOutAnnotationTest(TestParameters parameters) {
+    this.parameters = parameters;
+  }
+
+  @Test
+  public void testReference() throws Exception {
+    testForRuntime(parameters)
+        .addProgramClasses(getInputClasses())
+        .run(parameters.getRuntime(), TestClass.class)
+        .assertSuccessWithOutput(EXPECTED);
+  }
+
+  @Test
+  public void testWithRuleExtraction() throws Exception {
+    testForR8(parameters.getBackend())
+        .enableExperimentalKeepAnnotations()
+        .addProgramClasses(getInputClasses())
+        .addKeepMainRule(TestClass.class)
+        .setMinApi(parameters)
+        .allowDiagnosticWarningMessages()
+        .setDiagnosticsLevelModifier(
+            (level, diagnostic) ->
+                level == DiagnosticsLevel.ERROR ? DiagnosticsLevel.WARNING : level)
+        .compileWithExpectedDiagnostics(
+            diagnostics -> {
+              diagnostics
+                  .assertOnlyWarnings()
+                  .assertWarningsMatch(
+                      DiagnosticsMatcher.diagnosticType(CheckDiscardDiagnostic.class));
+              CheckDiscardDiagnostic discard =
+                  (CheckDiscardDiagnostic) diagnostics.getWarnings().get(0);
+              // The discard error should report one error for A.toString.
+              assertEquals(discard.getDiagnosticMessage(), 1, discard.getNumberOfFailures());
+            })
+        .run(parameters.getRuntime(), TestClass.class)
+        .assertSuccessWithOutput(EXPECTED)
+        .inspect(this::checkOutput);
+  }
+
+  public List<Class<?>> getInputClasses() {
+    return ImmutableList.of(TestClass.class, A.class, B.class);
+  }
+
+  private void checkOutput(CodeInspector inspector) {
+    // A is escaping in the call println(this) and remains in the residual.
+    assertThat(inspector.clazz(A.class), isPresent());
+    assertThat(inspector.clazz(A.class).uniqueMethodWithOriginalName("toString"), isPresent());
+
+    // Both foo and bar are respectively inlined and dead.
+    assertThat(inspector.clazz(A.class).uniqueMethodWithOriginalName("foo"), isAbsent());
+    assertThat(inspector.clazz(A.class).uniqueMethodWithOriginalName("bar"), isAbsent());
+
+    // B is fully inlined and not in the residual program.
+    assertThat(inspector.clazz(B.class), isAbsent());
+  }
+
+  static class A {
+
+    @CheckOptimizedOut
+    public void foo() {
+      System.out.println(this);
+    }
+
+    @CheckOptimizedOut
+    public void bar() {
+      System.out.println("A.bar");
+    }
+
+    @CheckOptimizedOut
+    @Override
+    public String toString() {
+      return "A";
+    }
+  }
+
+  @CheckOptimizedOut
+  static class B {
+
+    public void baz() {
+      System.out.println("B.baz");
+    }
+  }
+
+  static class TestClass {
+
+    public static void main(String[] args) throws Exception {
+      new A().foo();
+      new B().baz();
+    }
+  }
+}
diff --git a/src/test/java/com/android/tools/r8/keepanno/CheckRemovedAnnotationTest.java b/src/test/java/com/android/tools/r8/keepanno/CheckRemovedAnnotationTest.java
new file mode 100644
index 0000000..0ed35c1
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/keepanno/CheckRemovedAnnotationTest.java
@@ -0,0 +1,122 @@
+// Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package com.android.tools.r8.keepanno;
+
+import static com.android.tools.r8.utils.codeinspector.Matchers.isAbsent;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertEquals;
+
+import com.android.tools.r8.DiagnosticsLevel;
+import com.android.tools.r8.DiagnosticsMatcher;
+import com.android.tools.r8.TestBase;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
+import com.android.tools.r8.errors.CheckDiscardDiagnostic;
+import com.android.tools.r8.keepanno.annotations.CheckRemoved;
+import com.android.tools.r8.utils.AndroidApiLevel;
+import com.android.tools.r8.utils.StringUtils;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.google.common.collect.ImmutableList;
+import java.util.List;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+@RunWith(Parameterized.class)
+public class CheckRemovedAnnotationTest extends TestBase {
+
+  static final String EXPECTED = StringUtils.lines("A.foo", "B.baz");
+
+  private final TestParameters parameters;
+
+  @Parameterized.Parameters(name = "{0}")
+  public static TestParametersCollection data() {
+    return getTestParameters().withDefaultRuntimes().withApiLevel(AndroidApiLevel.B).build();
+  }
+
+  public CheckRemovedAnnotationTest(TestParameters parameters) {
+    this.parameters = parameters;
+  }
+
+  @Test
+  public void testReference() throws Exception {
+    testForRuntime(parameters)
+        .addProgramClasses(getInputClasses())
+        .run(parameters.getRuntime(), TestClass.class)
+        .assertSuccessWithOutput(EXPECTED);
+  }
+
+  @Test
+  public void testWithRuleExtraction() throws Exception {
+    testForR8(parameters.getBackend())
+        .enableExperimentalKeepAnnotations()
+        .addProgramClasses(getInputClasses())
+        .addKeepMainRule(TestClass.class)
+        .setMinApi(parameters)
+        .allowDiagnosticWarningMessages()
+        .setDiagnosticsLevelModifier(
+            (level, diagnostic) ->
+                level == DiagnosticsLevel.ERROR ? DiagnosticsLevel.WARNING : level)
+        .compileWithExpectedDiagnostics(
+            diagnostics -> {
+              diagnostics
+                  .assertOnlyWarnings()
+                  .assertWarningsMatch(
+                      DiagnosticsMatcher.diagnosticType(CheckDiscardDiagnostic.class));
+              CheckDiscardDiagnostic discard =
+                  (CheckDiscardDiagnostic) diagnostics.getWarnings().get(0);
+              // The discard error should report for both the method A.foo and the class B.
+              assertEquals(discard.getDiagnosticMessage(), 2, discard.getNumberOfFailures());
+            })
+        .run(parameters.getRuntime(), TestClass.class)
+        .assertSuccessWithOutput(EXPECTED)
+        .inspect(this::checkOutput);
+  }
+
+  public List<Class<?>> getInputClasses() {
+    return ImmutableList.of(TestClass.class, A.class, B.class);
+  }
+
+  private void checkOutput(CodeInspector inspector) {
+    // Because 'foo' is annotated with @CheckRemoved it is soft-pinned to ensure it is fully
+    // removed. However, 'foo' is live and thus its method (and class) will be retained in the
+    // output.
+    assertThat(inspector.clazz(A.class), isPresent());
+    assertThat(inspector.clazz(A.class).uniqueMethodWithOriginalName("foo"), isPresent());
+    // Bar is unused and must be removed regardless of the soft-pinning.
+    assertThat(inspector.clazz(A.class).uniqueMethodWithOriginalName("bar"), isAbsent());
+    // B is used and soft-pinned, so it should be present.
+    assertThat(inspector.clazz(B.class), isPresent());
+  }
+
+  static class A {
+
+    @CheckRemoved
+    public void foo() {
+      System.out.println("A.foo");
+    }
+
+    @CheckRemoved
+    public void bar() {
+      System.out.println("A.bar");
+    }
+  }
+
+  @CheckRemoved
+  static class B {
+
+    public void baz() {
+      System.out.println("B.baz");
+    }
+  }
+
+  static class TestClass {
+
+    public static void main(String[] args) throws Exception {
+      new A().foo();
+      new B().baz();
+    }
+  }
+}
diff --git a/src/test/java/com/android/tools/r8/keepanno/KeepAccessVisibilityFlagsTest.java b/src/test/java/com/android/tools/r8/keepanno/KeepAccessVisibilityFlagsTest.java
index ac6b939..4505562 100644
--- a/src/test/java/com/android/tools/r8/keepanno/KeepAccessVisibilityFlagsTest.java
+++ b/src/test/java/com/android/tools/r8/keepanno/KeepAccessVisibilityFlagsTest.java
@@ -77,6 +77,7 @@
         .enableExperimentalKeepAnnotations()
         .addProgramClasses(getInputClasses())
         .addKeepMainRule(TestClass.class)
+        .allowAccessModification()
         .setMinApi(parameters)
         .run(parameters.getRuntime(), TestClass.class)
         .assertSuccessWithOutput(EXPECTED)
@@ -235,6 +236,11 @@
           int mod = method.getModifiers();
           if (!Modifier.isPublic(mod) && !Modifier.isProtected(mod)) {
             privateOrPackagePrivateMethods.add(method.getName());
+          } else {
+            // TODO(b/131130038): The package-private method should not be publicized.
+            if (method.getName().equals("packagePrivateMethod")) {
+              privateOrPackagePrivateMethods.add(method.getName());
+            }
           }
         }
         printSorted(privateOrPackagePrivateMethods);
diff --git a/src/test/java/com/android/tools/r8/keepanno/KeepEdgeAnnotationsTest.java b/src/test/java/com/android/tools/r8/keepanno/KeepEdgeAnnotationsTest.java
index 1864fba..e8696b7 100644
--- a/src/test/java/com/android/tools/r8/keepanno/KeepEdgeAnnotationsTest.java
+++ b/src/test/java/com/android/tools/r8/keepanno/KeepEdgeAnnotationsTest.java
@@ -19,6 +19,7 @@
 import com.android.tools.r8.keepanno.asm.KeepEdgeWriter.AnnotationVisitorInterface;
 import com.android.tools.r8.keepanno.ast.AnnotationConstants;
 import com.android.tools.r8.keepanno.ast.AnnotationConstants.Edge;
+import com.android.tools.r8.keepanno.ast.KeepDeclaration;
 import com.android.tools.r8.keepanno.ast.KeepEdge;
 import com.android.tools.r8.keepanno.processor.KeepEdgeProcessor;
 import com.android.tools.r8.keepanno.testsource.KeepClassAndDefaultConstructorSource;
@@ -221,9 +222,9 @@
             .transform();
 
     // Read the edges from each version.
-    Set<KeepEdge> originalEdges = KeepEdgeReader.readKeepEdges(original);
-    Set<KeepEdge> strippedEdges = KeepEdgeReader.readKeepEdges(stripped);
-    Set<KeepEdge> readdedEdges = KeepEdgeReader.readKeepEdges(readded);
+    Set<KeepDeclaration> originalEdges = KeepEdgeReader.readKeepEdges(original);
+    Set<KeepDeclaration> strippedEdges = KeepEdgeReader.readKeepEdges(stripped);
+    Set<KeepDeclaration> readdedEdges = KeepEdgeReader.readKeepEdges(readded);
 
     // The edges are compared to the "expected" ast to ensure we don't hide failures in reading or
     // writing.
@@ -252,7 +253,7 @@
     assertThat(synthesizedEdgesClass.annotation(Edge.CLASS.getTypeName()), isPresent());
     String entry = ZipUtils.zipEntryNameForClass(synthesizedEdgesClass.getFinalReference());
     byte[] bytes = ZipUtils.readSingleEntry(data, entry);
-    Set<KeepEdge> keepEdges = KeepEdgeReader.readKeepEdges(bytes);
+    Set<KeepDeclaration> keepEdges = KeepEdgeReader.readKeepEdges(bytes);
     assertEquals(KeepSourceEdges.getExpectedEdges(source), keepEdges);
   }
 }
diff --git a/src/test/java/com/android/tools/r8/keepanno/KeepInvalidForApiTest.java b/src/test/java/com/android/tools/r8/keepanno/KeepInvalidForApiTest.java
index 14cb1d1..97fd716 100644
--- a/src/test/java/com/android/tools/r8/keepanno/KeepInvalidForApiTest.java
+++ b/src/test/java/com/android/tools/r8/keepanno/KeepInvalidForApiTest.java
@@ -15,7 +15,7 @@
 import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.keepanno.annotations.MemberAccessFlags;
 import com.android.tools.r8.keepanno.asm.KeepEdgeReader;
-import com.android.tools.r8.keepanno.ast.KeepEdge;
+import com.android.tools.r8.keepanno.ast.KeepDeclaration;
 import com.android.tools.r8.keepanno.ast.KeepEdgeException;
 import com.android.tools.r8.keepanno.keeprules.KeepRuleExtractor;
 import java.io.IOException;
@@ -41,7 +41,8 @@
   }
 
   private static List<String> extractRuleForClass(Class<?> clazz) throws IOException {
-    Set<KeepEdge> keepEdges = KeepEdgeReader.readKeepEdges(ToolHelper.getClassAsBytes(clazz));
+    Set<KeepDeclaration> keepEdges =
+        KeepEdgeReader.readKeepEdges(ToolHelper.getClassAsBytes(clazz));
     List<String> rules = new ArrayList<>();
     KeepRuleExtractor extractor = new KeepRuleExtractor(rules::add);
     keepEdges.forEach(extractor::extract);
diff --git a/src/test/java/com/android/tools/r8/keepanno/KeepInvalidTargetTest.java b/src/test/java/com/android/tools/r8/keepanno/KeepInvalidTargetTest.java
index f40ca56..943f9b7 100644
--- a/src/test/java/com/android/tools/r8/keepanno/KeepInvalidTargetTest.java
+++ b/src/test/java/com/android/tools/r8/keepanno/KeepInvalidTargetTest.java
@@ -16,7 +16,7 @@
 import com.android.tools.r8.keepanno.annotations.KeepTarget;
 import com.android.tools.r8.keepanno.annotations.UsesReflection;
 import com.android.tools.r8.keepanno.asm.KeepEdgeReader;
-import com.android.tools.r8.keepanno.ast.KeepEdge;
+import com.android.tools.r8.keepanno.ast.KeepDeclaration;
 import com.android.tools.r8.keepanno.ast.KeepEdgeException;
 import com.android.tools.r8.keepanno.keeprules.KeepRuleExtractor;
 import java.io.IOException;
@@ -42,7 +42,8 @@
   }
 
   private static List<String> extractRuleForClass(Class<?> clazz) throws IOException {
-    Set<KeepEdge> keepEdges = KeepEdgeReader.readKeepEdges(ToolHelper.getClassAsBytes(clazz));
+    Set<KeepDeclaration> keepEdges =
+        KeepEdgeReader.readKeepEdges(ToolHelper.getClassAsBytes(clazz));
     List<String> rules = new ArrayList<>();
     KeepRuleExtractor extractor = new KeepRuleExtractor(rules::add);
     keepEdges.forEach(extractor::extract);
diff --git a/src/test/java/com/android/tools/r8/keepanno/KeepMembersAccessFlagsTest.java b/src/test/java/com/android/tools/r8/keepanno/KeepMembersAccessFlagsTest.java
index d221ad9..a8cc34b 100644
--- a/src/test/java/com/android/tools/r8/keepanno/KeepMembersAccessFlagsTest.java
+++ b/src/test/java/com/android/tools/r8/keepanno/KeepMembersAccessFlagsTest.java
@@ -91,13 +91,17 @@
           memberAccess = {MemberAccessFlags.PUBLIC, MemberAccessFlags.NON_STATIC})
     })
     void foo() throws Exception {
-      for (Field field : getClass().getDeclaredFields()) {
+      String[] fieldNames = new String[] {"fieldA"};
+      for (String fieldName : fieldNames) {
+        Field field = getClass().getDeclaredField(fieldName);
         int modifiers = field.getModifiers();
         if (Modifier.isPublic(modifiers) && !Modifier.isStatic(modifiers)) {
           System.out.println(field.get(this));
         }
       }
-      for (Method method : getClass().getDeclaredMethods()) {
+      String[] methodNames = new String[] {"bar"};
+      for (String methodName : methodNames) {
+        Method method = getClass().getDeclaredMethod(methodName);
         int modifiers = method.getModifiers();
         if (Modifier.isPublic(modifiers) && !Modifier.isStatic(modifiers)) {
           System.out.println(method.getName());
diff --git a/src/test/java/com/android/tools/r8/keepanno/KeepMethodsEmptyAccessFlagsTest.java b/src/test/java/com/android/tools/r8/keepanno/KeepMethodsEmptyAccessFlagsTest.java
index b8c55aa..9d064d7 100644
--- a/src/test/java/com/android/tools/r8/keepanno/KeepMethodsEmptyAccessFlagsTest.java
+++ b/src/test/java/com/android/tools/r8/keepanno/KeepMethodsEmptyAccessFlagsTest.java
@@ -29,6 +29,7 @@
 public class KeepMethodsEmptyAccessFlagsTest extends TestBase {
 
   static final String EXPECTED = StringUtils.lines("hello", "world");
+  static final String EXPECTED_ACCESS_MODIFICATION = StringUtils.lines("hello", "old", "world");
 
   private final TestParameters parameters;
 
@@ -57,7 +58,11 @@
         .addKeepMainRule(TestClass.class)
         .setMinApi(parameters)
         .run(parameters.getRuntime(), TestClass.class)
-        .assertSuccessWithOutput(EXPECTED)
+        // TODO(b/131130038): Should not publicize kept method old().
+        .assertSuccessWithOutput(
+            parameters.isAccessModificationEnabledByDefault() && parameters.isDexRuntime()
+                ? EXPECTED_ACCESS_MODIFICATION
+                : EXPECTED)
         .inspect(this::checkOutput);
   }
 
@@ -111,7 +116,7 @@
 
   static class TestClass {
 
-    public static void main(String[] args) throws Exception {
+    public static void main(String[] args) {
       new A().foo();
     }
   }
diff --git a/src/test/java/com/android/tools/r8/kotlin/KotlinIntrinsicsInlineChainTest.java b/src/test/java/com/android/tools/r8/kotlin/KotlinIntrinsicsInlineChainTest.java
index fde9d75..9e7c52a 100644
--- a/src/test/java/com/android/tools/r8/kotlin/KotlinIntrinsicsInlineChainTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/KotlinIntrinsicsInlineChainTest.java
@@ -81,8 +81,7 @@
               long checkParameterIsNotNull = countCall(main, "checkParameterIsNotNull");
               long checkNotNullParameter = countCall(main, "checkNotNullParameter");
               if (kotlinc.getCompilerVersion().isGreaterThan(KotlinCompilerVersion.KOTLINC_1_6_0)) {
-                assertEquals(
-                    BooleanUtils.intValue(!allowAccessModification), checkNotNullParameter);
+                assertEquals(0, checkNotNullParameter);
                 assertEquals(0, checkParameterIsNotNull);
               } else if (parameters.isDexRuntime()
                   && parameters.getApiLevel().isGreaterThanOrEqualTo(AndroidApiLevel.I)) {
diff --git a/src/test/java/com/android/tools/r8/kotlin/R8KotlinAccessorTest.java b/src/test/java/com/android/tools/r8/kotlin/R8KotlinAccessorTest.java
index 483f18b..cff6a7c 100644
--- a/src/test/java/com/android/tools/r8/kotlin/R8KotlinAccessorTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/R8KotlinAccessorTest.java
@@ -4,11 +4,7 @@
 
 package com.android.tools.r8.kotlin;
 
-import static com.android.tools.r8.KotlinCompilerTool.KotlinCompilerVersion.KOTLINC_1_5_0;
-import static com.android.tools.r8.KotlinCompilerTool.KotlinCompilerVersion.KOTLINC_1_6_0;
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
 
 import com.android.tools.r8.KotlinTestParameters;
 import com.android.tools.r8.TestParameters;
@@ -16,14 +12,9 @@
 import com.android.tools.r8.ToolHelper.ProcessResult;
 import com.android.tools.r8.jasmin.JasminBuilder;
 import com.android.tools.r8.jasmin.JasminBuilder.ClassBuilder;
-import com.android.tools.r8.kotlin.TestKotlinClass.AccessorKind;
 import com.android.tools.r8.kotlin.TestKotlinClass.Visibility;
-import com.android.tools.r8.naming.MemberNaming;
-import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.AndroidApp;
 import com.android.tools.r8.utils.BooleanUtils;
-import com.android.tools.r8.utils.codeinspector.ClassSubject;
-import com.android.tools.r8.utils.codeinspector.FieldSubject;
 import java.nio.file.Path;
 import java.util.Collection;
 import java.util.Collections;
@@ -88,29 +79,7 @@
     String mainClass = addMainToClasspath("properties.CompanionPropertiesKt",
         "companionProperties_usePrimitiveProp");
     runTest(PROPERTIES_PACKAGE_NAME, mainClass)
-        .inspect(
-            inspector -> {
-              if (allowAccessModification) {
-                checkClassIsRemoved(inspector, testedClass.getOuterClassName());
-                return;
-              }
-
-              ClassSubject outerClass =
-                  checkClassIsKept(inspector, testedClass.getOuterClassName());
-              String propertyName = "primitiveProp";
-              FieldSubject fieldSubject = checkFieldIsKept(outerClass, "int", propertyName);
-              assertTrue(fieldSubject.getField().accessFlags.isStatic());
-
-              MemberNaming.MethodSignature getterAccessor =
-                  testedClass.getGetterAccessorForProperty(
-                      propertyName, AccessorKind.FROM_COMPANION);
-              MemberNaming.MethodSignature setterAccessor =
-                  testedClass.getSetterAccessorForProperty(
-                      propertyName, AccessorKind.FROM_COMPANION);
-              assertTrue(fieldSubject.getField().accessFlags.isPrivate());
-              checkMethodIsKept(outerClass, getterAccessor);
-              checkMethodIsRemoved(outerClass, setterAccessor);
-            });
+        .inspect(inspector -> checkClassIsRemoved(inspector, testedClass.getOuterClassName()));
   }
 
   @Test
@@ -119,31 +88,7 @@
     String mainClass = addMainToClasspath("properties.CompanionPropertiesKt",
         "companionProperties_usePrivateProp");
     runTest(PROPERTIES_PACKAGE_NAME, mainClass)
-        .inspect(
-            inspector -> {
-              if (allowAccessModification) {
-                checkClassIsRemoved(inspector, testedClass.getOuterClassName());
-                return;
-              }
-
-              ClassSubject outerClass =
-                  checkClassIsKept(inspector, testedClass.getOuterClassName());
-              String propertyName = "privateProp";
-              FieldSubject fieldSubject =
-                  checkFieldIsKept(outerClass, JAVA_LANG_STRING, propertyName);
-              assertTrue(fieldSubject.getField().accessFlags.isStatic());
-
-              MemberNaming.MethodSignature getterAccessor =
-                  testedClass.getGetterAccessorForProperty(
-                      propertyName, AccessorKind.FROM_COMPANION);
-              MemberNaming.MethodSignature setterAccessor =
-                  testedClass.getSetterAccessorForProperty(
-                      propertyName, AccessorKind.FROM_COMPANION);
-              assertTrue(fieldSubject.getField().accessFlags.isPrivate());
-
-              checkMethodIsKept(outerClass, getterAccessor);
-              checkMethodIsRemoved(outerClass, setterAccessor);
-            });
+        .inspect(inspector -> checkClassIsRemoved(inspector, testedClass.getOuterClassName()));
   }
 
   @Test
@@ -152,31 +97,7 @@
     String mainClass = addMainToClasspath("properties.CompanionPropertiesKt",
         "companionProperties_useInternalProp");
     runTest(PROPERTIES_PACKAGE_NAME, mainClass)
-        .inspect(
-            inspector -> {
-              if (allowAccessModification) {
-                checkClassIsRemoved(inspector, testedClass.getOuterClassName());
-                return;
-              }
-
-              ClassSubject outerClass =
-                  checkClassIsKept(inspector, testedClass.getOuterClassName());
-              String propertyName = "internalProp";
-              FieldSubject fieldSubject =
-                  checkFieldIsKept(outerClass, JAVA_LANG_STRING, propertyName);
-              assertTrue(fieldSubject.getField().accessFlags.isStatic());
-
-              MemberNaming.MethodSignature getterAccessor =
-                  testedClass.getGetterAccessorForProperty(
-                      propertyName, AccessorKind.FROM_COMPANION);
-              MemberNaming.MethodSignature setterAccessor =
-                  testedClass.getSetterAccessorForProperty(
-                      propertyName, AccessorKind.FROM_COMPANION);
-
-              assertTrue(fieldSubject.getField().accessFlags.isPrivate());
-              checkMethodIsKept(outerClass, getterAccessor);
-              checkMethodIsRemoved(outerClass, setterAccessor);
-            });
+        .inspect(inspector -> checkClassIsRemoved(inspector, testedClass.getOuterClassName()));
   }
 
   @Test
@@ -185,31 +106,7 @@
     String mainClass = addMainToClasspath("properties.CompanionPropertiesKt",
         "companionProperties_usePublicProp");
     runTest(PROPERTIES_PACKAGE_NAME, mainClass)
-        .inspect(
-            inspector -> {
-              if (allowAccessModification) {
-                checkClassIsRemoved(inspector, testedClass.getOuterClassName());
-                return;
-              }
-
-              ClassSubject outerClass =
-                  checkClassIsKept(inspector, testedClass.getOuterClassName());
-              String propertyName = "publicProp";
-              FieldSubject fieldSubject =
-                  checkFieldIsKept(outerClass, JAVA_LANG_STRING, propertyName);
-              assertTrue(fieldSubject.getField().accessFlags.isStatic());
-
-              MemberNaming.MethodSignature getterAccessor =
-                  testedClass.getGetterAccessorForProperty(
-                      propertyName, AccessorKind.FROM_COMPANION);
-              MemberNaming.MethodSignature setterAccessor =
-                  testedClass.getSetterAccessorForProperty(
-                      propertyName, AccessorKind.FROM_COMPANION);
-
-              assertTrue(fieldSubject.getField().accessFlags.isPrivate());
-              checkMethodIsKept(outerClass, getterAccessor);
-              checkMethodIsRemoved(outerClass, setterAccessor);
-            });
+        .inspect(inspector -> checkClassIsRemoved(inspector, testedClass.getOuterClassName()));
   }
 
   @Test
@@ -218,32 +115,7 @@
     String mainClass = addMainToClasspath("properties.CompanionLateInitPropertiesKt",
         "companionLateInitProperties_usePrivateLateInitProp");
     runTest(PROPERTIES_PACKAGE_NAME, mainClass)
-        .inspect(
-            inspector -> {
-              if (allowAccessModification
-                  || (testParameters.isDexRuntime()
-                      && testParameters.getApiLevel().isGreaterThan(AndroidApiLevel.B))) {
-                checkClassIsRemoved(inspector, testedClass.getOuterClassName());
-                return;
-              }
-
-              ClassSubject outerClass =
-                  checkClassIsKept(inspector, testedClass.getOuterClassName());
-              String propertyName = "privateLateInitProp";
-              FieldSubject fieldSubject =
-                  checkFieldIsKept(outerClass, JAVA_LANG_STRING, propertyName);
-              assertTrue(fieldSubject.getField().accessFlags.isStatic());
-
-              MemberNaming.MethodSignature getterAccessor =
-                  testedClass.getGetterAccessorForProperty(
-                      propertyName, AccessorKind.FROM_COMPANION);
-              MemberNaming.MethodSignature setterAccessor =
-                  testedClass.getSetterAccessorForProperty(
-                      propertyName, AccessorKind.FROM_COMPANION);
-              assertTrue(fieldSubject.getField().accessFlags.isPrivate());
-              checkMethodIsKept(outerClass, getterAccessor);
-              checkMethodIsRemoved(outerClass, setterAccessor);
-            });
+        .inspect(inspector -> checkClassIsRemoved(inspector, testedClass.getOuterClassName()));
   }
 
   @Test
@@ -314,28 +186,7 @@
     String mainClass = addMainToClasspath(testedClass.className + "Kt",
         "usePrivatePropertyAccessorFromInnerClass");
     runTest("accessors", mainClass)
-        .inspect(
-            inspector -> {
-              if (allowAccessModification) {
-                checkClassIsRemoved(inspector, testedClass.getClassName());
-                return;
-              }
-
-              ClassSubject classSubject = checkClassIsKept(inspector, testedClass.getClassName());
-
-              String propertyName = "privateProp";
-              FieldSubject fieldSubject =
-                  checkFieldIsKept(classSubject, JAVA_LANG_STRING, propertyName);
-              assertFalse(fieldSubject.getField().accessFlags.isStatic());
-
-              MemberNaming.MethodSignature getterAccessor =
-                  testedClass.getGetterAccessorForProperty(propertyName, AccessorKind.FROM_INNER);
-              MemberNaming.MethodSignature setterAccessor =
-                  testedClass.getSetterAccessorForProperty(propertyName, AccessorKind.FROM_INNER);
-                assertTrue(fieldSubject.getField().accessFlags.isPrivate());
-                checkMethodIsKept(classSubject, getterAccessor);
-                checkMethodIsRemoved(classSubject, setterAccessor);
-            });
+        .inspect(inspector -> checkClassIsRemoved(inspector, testedClass.getClassName()));
   }
 
   @Test
@@ -362,40 +213,7 @@
     String mainClass = addMainToClasspath(testedClass.className + "Kt",
         "usePropertyAccessorFromLambda");
     runTest("accessors", mainClass)
-        .inspect(
-            inspector -> {
-              if (allowAccessModification) {
-                checkClassIsRemoved(inspector, testedClass.getClassName());
-                return;
-              }
-
-              ClassSubject classSubject = checkClassIsKept(inspector, testedClass.getClassName());
-
-              // For kotlin 1.6 we completely remove the field and accessors. We are unable to
-              // remove the entire class because we are not reprocessing TestMain.main.
-              String propertyName = "property";
-              if (kotlinParameters.isNewerThanOrEqualTo(KOTLINC_1_6_0)) {
-                FieldSubject field = classSubject.field(JAVA_LANG_STRING, propertyName);
-                assertFalse(field.isPresent());
-                return;
-              }
-
-              FieldSubject fieldSubject =
-                  checkFieldIsKept(classSubject, JAVA_LANG_STRING, propertyName);
-              assertFalse(fieldSubject.getField().accessFlags.isStatic());
-              assertTrue(fieldSubject.getField().accessFlags.isPrivate());
-
-              AccessorKind accessorKind =
-                  kotlinc.getCompilerVersion().isGreaterThanOrEqualTo(KOTLINC_1_5_0)
-                      ? AccessorKind.FROM_INNER
-                      : AccessorKind.FROM_LAMBDA;
-              MemberNaming.MethodSignature getterAccessor =
-                  testedClass.getGetterAccessorForProperty(propertyName, accessorKind);
-              MemberNaming.MethodSignature setterAccessor =
-                  testedClass.getSetterAccessorForProperty(propertyName, accessorKind);
-              checkMethodIsKept(classSubject, getterAccessor);
-              checkMethodIsKept(classSubject, setterAccessor);
-            });
+        .inspect(inspector -> checkClassIsRemoved(inspector, testedClass.getClassName()));
   }
 
   @Test
diff --git a/src/test/java/com/android/tools/r8/kotlin/R8KotlinDataClassTest.java b/src/test/java/com/android/tools/r8/kotlin/R8KotlinDataClassTest.java
index 3584975..0ff1942 100644
--- a/src/test/java/com/android/tools/r8/kotlin/R8KotlinDataClassTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/R8KotlinDataClassTest.java
@@ -4,8 +4,6 @@
 
 package com.android.tools.r8.kotlin;
 
-import static com.android.tools.r8.KotlinCompilerTool.KotlinCompilerVersion.KOTLINC_1_5_0;
-import static com.android.tools.r8.KotlinCompilerTool.KotlinCompilerVersion.KOTLINC_1_6_0;
 
 import com.android.tools.r8.KotlinTestParameters;
 import com.android.tools.r8.TestParameters;
@@ -122,7 +120,6 @@
 
   @Test
   public void testDataclassCopyDefaultIsRemovedIfNotUsed() throws Exception {
-    boolean useLir = true;
     String mainClassName = "dataclass.MainCopyKt";
     MethodSignature testMethodSignature =
         new MethodSignature("testDataClassCopyWithDefault", "void", Collections.emptyList());
@@ -132,29 +129,8 @@
             testBuilder ->
                 testBuilder
                     .addKeepRules(keepClassMethod(mainClassName, testMethodSignature))
-                    .addOptionsModification(
-                        o -> {
-                          if (useLir) {
-                            o.testing.enableLir();
-                          } else {
-                            o.testing.disableLir();
-                          }
-                        })
+                    .addOptionsModification(o -> o.testing.enableLir())
                     .addOptionsModification(disableClassInliner))
-        .inspect(
-            inspector -> {
-              // TODO(b/210828502): Investigate why Person is not removed with kotlin 1.7 and 1.8.
-              //   It looks like this is related to size estimates as using LIR changes the result.
-              if (allowAccessModification
-                  && (kotlinc.isOneOf(KOTLINC_1_5_0, KOTLINC_1_6_0)
-                      || testParameters.isDexRuntime()
-                      || useLir)) {
-                checkClassIsRemoved(inspector, TEST_DATA_CLASS.getClassName());
-              } else {
-                ClassSubject dataClass =
-                    checkClassIsKept(inspector, TEST_DATA_CLASS.getClassName());
-                checkMethodIsRemoved(dataClass, COPY_DEFAULT_METHOD);
-              }
-            });
+        .inspect(inspector -> checkClassIsRemoved(inspector, TEST_DATA_CLASS.getClassName()));
   }
 }
diff --git a/src/test/java/com/android/tools/r8/kotlin/R8KotlinPropertiesTest.java b/src/test/java/com/android/tools/r8/kotlin/R8KotlinPropertiesTest.java
index 527e568..ba11cfa 100644
--- a/src/test/java/com/android/tools/r8/kotlin/R8KotlinPropertiesTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/R8KotlinPropertiesTest.java
@@ -131,7 +131,7 @@
             testBuilder -> testBuilder.addOptionsModification(disableAggressiveClassOptimizations))
         .inspect(
             inspector -> {
-              if (allowAccessModification) {
+              if (testParameters.isAccessModificationEnabled(allowAccessModification)) {
                 checkClassIsRemoved(inspector, MUTABLE_PROPERTY_CLASS.getClassName());
                 return;
               }
@@ -161,7 +161,7 @@
             testBuilder -> testBuilder.addOptionsModification(disableAggressiveClassOptimizations))
         .inspect(
             inspector -> {
-              if (allowAccessModification) {
+              if (testParameters.isAccessModificationEnabled(allowAccessModification)) {
                 checkClassIsRemoved(inspector, MUTABLE_PROPERTY_CLASS.getClassName());
                 return;
               }
@@ -189,7 +189,7 @@
             testBuilder -> testBuilder.addOptionsModification(disableAggressiveClassOptimizations))
         .inspect(
             inspector -> {
-              if (allowAccessModification) {
+              if (testParameters.isAccessModificationEnabled(allowAccessModification)) {
                 checkClassIsRemoved(inspector, MUTABLE_PROPERTY_CLASS.getClassName());
                 return;
               }
@@ -217,7 +217,7 @@
             testBuilder -> testBuilder.addOptionsModification(disableAggressiveClassOptimizations))
         .inspect(
             inspector -> {
-              if (allowAccessModification) {
+              if (testParameters.isAccessModificationEnabled(allowAccessModification)) {
                 checkClassIsRemoved(inspector, MUTABLE_PROPERTY_CLASS.getClassName());
                 return;
               }
@@ -245,7 +245,7 @@
             testBuilder -> testBuilder.addOptionsModification(disableAggressiveClassOptimizations))
         .inspect(
             inspector -> {
-              if (allowAccessModification) {
+              if (testParameters.isAccessModificationEnabled(allowAccessModification)) {
                 checkClassIsRemoved(inspector, MUTABLE_PROPERTY_CLASS.getClassName());
                 return;
               }
@@ -285,7 +285,7 @@
             testBuilder -> testBuilder.addOptionsModification(disableAggressiveClassOptimizations))
         .inspect(
             inspector -> {
-              if (allowAccessModification) {
+              if (testParameters.isAccessModificationEnabled(allowAccessModification)) {
                 checkClassIsRemoved(inspector, LATE_INIT_PROPERTY_CLASS.getClassName());
                 return;
               }
@@ -364,7 +364,7 @@
             testBuilder -> testBuilder.addOptionsModification(disableAggressiveClassOptimizations))
         .inspect(
             inspector -> {
-              if (allowAccessModification) {
+              if (testParameters.isAccessModificationEnabled(allowAccessModification)) {
                 checkClassIsRemoved(inspector, USER_DEFINED_PROPERTY_CLASS.getClassName());
                 return;
               }
@@ -397,7 +397,7 @@
             inspector -> {
               checkClassIsRemoved(inspector, COMPANION_PROPERTY_CLASS.getClassName());
 
-              if (allowAccessModification) {
+              if (testParameters.isAccessModificationEnabled(allowAccessModification)) {
                 checkClassIsRemoved(inspector, "properties.CompanionProperties");
                 return;
               }
@@ -423,7 +423,7 @@
             inspector -> {
               checkClassIsRemoved(inspector, COMPANION_PROPERTY_CLASS.getClassName());
 
-              if (allowAccessModification) {
+              if (testParameters.isAccessModificationEnabled(allowAccessModification)) {
                 checkClassIsRemoved(inspector, "properties.CompanionProperties");
                 return;
               }
@@ -454,7 +454,7 @@
             testBuilder -> testBuilder.addOptionsModification(disableAggressiveClassOptimizations))
         .inspect(
             inspector -> {
-              if (allowAccessModification) {
+              if (testParameters.isAccessModificationEnabled(allowAccessModification)) {
                 checkClassIsRemoved(inspector, "properties.CompanionProperties");
                 return;
               }
@@ -482,7 +482,7 @@
             inspector -> {
               checkClassIsRemoved(inspector, COMPANION_PROPERTY_CLASS.getClassName());
 
-              if (allowAccessModification) {
+              if (testParameters.isAccessModificationEnabled(allowAccessModification)) {
                 checkClassIsRemoved(inspector, "properties.CompanionProperties");
                 return;
               }
@@ -510,7 +510,7 @@
             inspector -> {
               checkClassIsRemoved(inspector, testedClass.getClassName());
 
-              if (allowAccessModification
+              if (testParameters.isAccessModificationEnabled(allowAccessModification)
                   || (testParameters.isDexRuntime()
                       && testParameters.getApiLevel().isGreaterThan(AndroidApiLevel.B))) {
                 checkClassIsRemoved(inspector, testedClass.getOuterClassName());
@@ -572,7 +572,7 @@
             testBuilder -> testBuilder.addOptionsModification(disableAggressiveClassOptimizations))
         .inspect(
             inspector -> {
-              if (allowAccessModification) {
+              if (testParameters.isAccessModificationEnabled(allowAccessModification)) {
                 checkClassIsRemoved(inspector, testedClass.getClassName());
                 return;
               }
@@ -601,7 +601,7 @@
             testBuilder -> testBuilder.addOptionsModification(disableAggressiveClassOptimizations))
         .inspect(
             inspector -> {
-              if (allowAccessModification) {
+              if (testParameters.isAccessModificationEnabled(allowAccessModification)) {
                 checkClassIsRemoved(inspector, testedClass.getClassName());
                 return;
               }
@@ -634,7 +634,7 @@
             testBuilder -> testBuilder.addOptionsModification(disableAggressiveClassOptimizations))
         .inspect(
             inspector -> {
-              if (allowAccessModification) {
+              if (testParameters.isAccessModificationEnabled(allowAccessModification)) {
                 checkClassIsRemoved(inspector, testedClass.getClassName());
                 return;
               }
@@ -666,7 +666,7 @@
             testBuilder -> testBuilder.addOptionsModification(disableAggressiveClassOptimizations))
         .inspect(
             inspector -> {
-              if (allowAccessModification) {
+              if (testParameters.isAccessModificationEnabled(allowAccessModification)) {
                 checkClassIsRemoved(inspector, testedClass.getClassName());
                 return;
               }
@@ -698,7 +698,7 @@
             testBuilder -> testBuilder.addOptionsModification(disableAggressiveClassOptimizations))
         .inspect(
             inspector -> {
-              if (allowAccessModification) {
+              if (testParameters.isAccessModificationEnabled(allowAccessModification)) {
                 checkClassIsRemoved(inspector, testedClass.getClassName());
                 return;
               }
@@ -755,7 +755,7 @@
             testBuilder -> testBuilder.addOptionsModification(disableAggressiveClassOptimizations))
         .inspect(
             inspector -> {
-              if (allowAccessModification) {
+              if (testParameters.isAccessModificationEnabled(allowAccessModification)) {
                 checkClassIsRemoved(inspector, testedClass.getClassName());
                 return;
               }
@@ -785,7 +785,7 @@
             testBuilder -> testBuilder.addOptionsModification(disableAggressiveClassOptimizations))
         .inspect(
             inspector -> {
-              if (allowAccessModification) {
+              if (testParameters.isAccessModificationEnabled(allowAccessModification)) {
                 checkClassIsRemoved(inspector, testedClass.getClassName());
                 return;
               }
@@ -817,7 +817,7 @@
             testBuilder -> testBuilder.addOptionsModification(disableAggressiveClassOptimizations))
         .inspect(
             inspector -> {
-              if (allowAccessModification) {
+              if (testParameters.isAccessModificationEnabled(allowAccessModification)) {
                 checkClassIsRemoved(inspector, testedClass.getClassName());
                 return;
               }
@@ -850,7 +850,7 @@
             testBuilder -> testBuilder.addOptionsModification(disableAggressiveClassOptimizations))
         .inspect(
             inspector -> {
-              if (allowAccessModification) {
+              if (testParameters.isAccessModificationEnabled(allowAccessModification)) {
                 checkClassIsRemoved(inspector, testedClass.getClassName());
                 return;
               }
@@ -882,7 +882,7 @@
             testBuilder -> testBuilder.addOptionsModification(disableAggressiveClassOptimizations))
         .inspect(
             inspector -> {
-              if (allowAccessModification) {
+              if (testParameters.isAccessModificationEnabled(allowAccessModification)) {
                 checkClassIsRemoved(inspector, testedClass.getClassName());
                 return;
               }
diff --git a/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingSingletonTest.java b/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingSingletonTest.java
index 695849f..2007fa0 100644
--- a/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingSingletonTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingSingletonTest.java
@@ -107,7 +107,7 @@
                 getTestName(), "MainKt$test2$$inlined$process$3"),
             lambdasInInput.getKStyleLambdaReferenceFromTypeName(
                 getTestName(), "MainKt$test2$$inlined$process$4"));
-    if (allowAccessModification) {
+    if (parameters.isAccessModificationEnabled(allowAccessModification)) {
       kStyleLambdaMergeGroup.add(
           lambdasInInput.getKStyleLambdaReferenceFromTypeName(
               getTestName(), "MainKt$test2$lambda$1"));
diff --git a/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingTrivialKotlinStyleTest.java b/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingTrivialKotlinStyleTest.java
index 2dc729e..580b42c 100644
--- a/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingTrivialKotlinStyleTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingTrivialKotlinStyleTest.java
@@ -93,7 +93,7 @@
     assertEquals(0, lambdasInInput.getNumberOfJStyleLambdas());
     assertEquals(28, lambdasInInput.getNumberOfKStyleLambdas());
 
-    if (!allowAccessModification) {
+    if (!parameters.isAccessModificationEnabled(allowAccessModification)) {
       // Only a subset of all K-style Kotlin lambdas are merged without -allowaccessmodification.
       Set<ClassReference> unmergedLambdas =
           ImmutableSet.of(
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataStripTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataStripTest.java
index c5b5ff4..90df133 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataStripTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataStripTest.java
@@ -71,9 +71,5 @@
     // Main class is kept, hence the presence of Metadata.
     AnnotationSubject annotationSubject = clazz.annotation(METADATA_TYPE);
     assertThat(annotationSubject, isPresent());
-    ClassSubject impl1 = inspector.clazz(implementer1ClassName);
-    assertThat(impl1, isPresentAndRenamed());
-    // All other classes can be renamed, hence the absence of Metadata;
-    assertThat(impl1.annotation(METADATA_TYPE), not(isPresent()));
   }
 }
diff --git a/src/test/java/com/android/tools/r8/mappingcompose/ComposeOutlineCallSiteInlinedTest.java b/src/test/java/com/android/tools/r8/mappingcompose/ComposeOutlineCallSiteInlinedTest.java
new file mode 100644
index 0000000..2e55faf
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/mappingcompose/ComposeOutlineCallSiteInlinedTest.java
@@ -0,0 +1,112 @@
+// Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+package com.android.tools.r8.mappingcompose;
+
+import static com.android.tools.r8.mappingcompose.ComposeTestHelpers.doubleToSingleQuote;
+import static org.junit.Assert.assertEquals;
+
+import com.android.tools.r8.TestBase;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
+import com.android.tools.r8.naming.ClassNameMapper;
+import com.android.tools.r8.naming.MappingComposer;
+import com.android.tools.r8.utils.StringUtils;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+/** This is a regression test for b/288117378. */
+@RunWith(Parameterized.class)
+public class ComposeOutlineCallSiteInlinedTest extends TestBase {
+
+  @Parameters(name = "{0}")
+  public static TestParametersCollection data() {
+    return getTestParameters().withNoneRuntime().build();
+  }
+
+  public ComposeOutlineCallSiteInlinedTest(TestParameters parameters) {
+    parameters.assertNoneRuntime();
+  }
+
+  private static final String mappingFoo =
+      StringUtils.unixLines(
+          "# {'id':'com.android.tools.r8.mapping','version':'2.2'}",
+          "com.android.tools.r8.D8Command -> com.android.tools.r8.D8Command:",
+          "# {'id':'sourceFile','fileName':'D8Command.java'}",
+          "    1:1:java.util.List getParseFlagsInformation():592:592 -> getParseFlagsInformation",
+          "    1:1:foo.MapConsumer lambda$bar$0(foo.StringConsumer):0:0 -> lambda$bar$0",
+          "      # {'id':'com.android.tools.r8.residualsignature',"
+              + "'signature':'(Lfoo/StringConsumer;)Lfoo/internal/MapConsumer;'}",
+          "      # {'id':'com.android.tools.r8.outlineCallsite',"
+              + "'positions':{'23':724,'24':725,'25':726},"
+              + "'outline':'Lfoo/SomeClass;outline(JJJ)V'}",
+          "    724:724:foo.MapConsumer lambda$bar$0(foo.StringConsumer):720:720 -> lambda$bar$0",
+          "    725:725:foo.PGMapConsumer foo.PGMapConsumer.builder():52:52 -> lambda$bar$0",
+          "    725:725:foo.MapConsumer lambda$bar$0(foo.StringConsumer):720 -> lambda$bar$0",
+          "    726:726:void foo.PGMapConsumer.<init>():55:55 -> lambda$bar$0",
+          "    726:726:foo.PGMapConsumer foo.PGMapConsumer.builder():52 -> lambda$bar$0",
+          "    726:726:foo.MapConsumer lambda$bar$0(foo.StringConsumer):720 -> lambda$bar$0");
+  private static final String mappingBar =
+      StringUtils.unixLines(
+          "# {'id':'com.android.tools.r8.mapping','version':'2.2'}",
+          "com.android.tools.r8.D8Command -> com.android.tools.r8.D8Command:",
+          "# {'id':'sourceFile','fileName':'SourceFile'}",
+          "    1:724:foo.internal.MapConsumer lambda$bar$0(foo.StringConsumer):0:723"
+              + " -> lambda$bar$0$com-android-tools-r8-D8Command",
+          "    1:724:foo.internal.MapConsumer"
+              + " lambda$bar$0$com-android-tools-r8-D8Command(foo.StringConsumer):0"
+              + " -> lambda$bar$0$com-android-tools-r8-D8Command",
+          "      # {'id':'com.android.tools.r8.synthesized'}");
+  private static final String mappingResult =
+      StringUtils.unixLines(
+          "# {'id':'com.android.tools.r8.mapping','version':'2.2'}",
+          "com.android.tools.r8.D8Command -> com.android.tools.r8.D8Command:",
+          "# {'id':'sourceFile','fileName':'D8Command.java'}",
+          // TODO(b/288117378): This 1:1 range corresponds to position 0 in the residual of R8. This
+          //  should probably not have the `getParseFlagsInformation` inline frame.
+          "    1:1:java.util.List getParseFlagsInformation():592:592 -> getParseFlagsInformation",
+          "    1:1:foo.internal.MapConsumer lambda$bar$0(foo.StringConsumer):0:0 ->"
+              + " lambda$bar$0$com-android-tools-r8-D8Command",
+          "    1:1:foo.internal.MapConsumer"
+              + " lambda$bar$0$com-android-tools-r8-D8Command(foo.StringConsumer):0:0 ->"
+              + " lambda$bar$0$com-android-tools-r8-D8Command",
+          "    # {'id':'com.android.tools.r8.synthesized'}",
+          "    2:2:foo.MapConsumer lambda$bar$0(foo.StringConsumer):0:0 ->"
+              + " lambda$bar$0$com-android-tools-r8-D8Command",
+          "    # {'id':'com.android.tools.r8.residualsignature',"
+              + "'signature':'(Lfoo/StringConsumer;)Lfoo/internal/MapConsumer;'}",
+          "    # {'id':'com.android.tools.r8.outlineCallsite',"
+              + "'positions':{'23':725,'24':726,'25':727},"
+              + "'outline':'Lfoo/SomeClass;outline(JJJ)V'}",
+          "    2:2:foo.internal.MapConsumer"
+              + " lambda$bar$0$com-android-tools-r8-D8Command(foo.StringConsumer):0:0 ->"
+              + " lambda$bar$0$com-android-tools-r8-D8Command",
+          "    3:724:foo.internal.MapConsumer lambda$bar$0(foo.StringConsumer) ->"
+              + " lambda$bar$0$com-android-tools-r8-D8Command",
+          "    3:724:foo.internal.MapConsumer"
+              + " lambda$bar$0$com-android-tools-r8-D8Command(foo.StringConsumer):0:0 ->"
+              + " lambda$bar$0$com-android-tools-r8-D8Command",
+          "    725:725:foo.internal.MapConsumer"
+              + " lambda$bar$0$com-android-tools-r8-D8Command(foo.StringConsumer):720:720 ->"
+              + " lambda$bar$0$com-android-tools-r8-D8Command",
+          "    726:726:foo.PGMapConsumer foo.PGMapConsumer.builder():52:52 -> lambda$bar$0",
+          "    726:726:foo.internal.MapConsumer"
+              + " lambda$bar$0$com-android-tools-r8-D8Command(foo.StringConsumer):720 ->"
+              + " lambda$bar$0$com-android-tools-r8-D8Command",
+          "    727:727:void foo.PGMapConsumer.<init>():55:55 -> lambda$bar$0",
+          "    727:727:foo.PGMapConsumer foo.PGMapConsumer.builder():52 -> lambda$bar$0",
+          "    727:727:foo.internal.MapConsumer"
+              + " lambda$bar$0$com-android-tools-r8-D8Command(foo.StringConsumer):720 ->"
+              + " lambda$bar$0$com-android-tools-r8-D8Command");
+
+  @Test
+  public void testCompose() throws Exception {
+    ClassNameMapper mappingForFoo = ClassNameMapper.mapperFromString(mappingFoo);
+    ClassNameMapper mappingForBar = ClassNameMapper.mapperFromString(mappingBar);
+    String composed = MappingComposer.compose(mappingForFoo, mappingForBar);
+    assertEquals(mappingResult, doubleToSingleQuote(composed));
+  }
+}
diff --git a/src/test/java/com/android/tools/r8/memberrebinding/IllegalFieldRebindingTest.java b/src/test/java/com/android/tools/r8/memberrebinding/IllegalFieldRebindingTest.java
index 1dbbec9..841cc0f 100644
--- a/src/test/java/com/android/tools/r8/memberrebinding/IllegalFieldRebindingTest.java
+++ b/src/test/java/com/android/tools/r8/memberrebinding/IllegalFieldRebindingTest.java
@@ -54,6 +54,7 @@
             .addInnerClasses(IllegalFieldRebindingTest.class)
             .addInnerClasses(IllegalFieldRebindingTestClasses.class)
             .addKeepMainRule(TestClass.class)
+            .enableNoAccessModificationAnnotationsForClasses()
             .enableNoVerticalClassMergingAnnotations()
             .setMinApi(parameters)
             .run(parameters.getRuntime(), TestClass.class)
@@ -87,6 +88,7 @@
             .addInnerClasses(IllegalFieldRebindingTest.class)
             .addInnerClasses(IllegalFieldRebindingTestClasses.class)
             .addKeepMainRule(OtherTestClass.class)
+            .enableNoAccessModificationAnnotationsForClasses()
             .enableNoVerticalClassMergingAnnotations()
             .setMinApi(parameters)
             .run(parameters.getRuntime(), OtherTestClass.class)
diff --git a/src/test/java/com/android/tools/r8/memberrebinding/MemberRebindingBridgeRemovalTest.java b/src/test/java/com/android/tools/r8/memberrebinding/MemberRebindingBridgeRemovalTest.java
index d8e0f19..54600ce 100644
--- a/src/test/java/com/android/tools/r8/memberrebinding/MemberRebindingBridgeRemovalTest.java
+++ b/src/test/java/com/android/tools/r8/memberrebinding/MemberRebindingBridgeRemovalTest.java
@@ -43,6 +43,7 @@
             MemberRebindingBridgeRemovalTest.class, MemberRebindingBridgeRemovalTestClasses.class)
         .addKeepMainRule(TestClass.class)
         .enableInliningAnnotations()
+        .enableNoAccessModificationAnnotationsForClasses()
         .enableNoVerticalClassMergingAnnotations()
         .setMinApi(parameters)
         .compile()
diff --git a/src/test/java/com/android/tools/r8/memberrebinding/MemberRebindingRemoveStaticBridgeTest.java b/src/test/java/com/android/tools/r8/memberrebinding/MemberRebindingRemoveStaticBridgeTest.java
index 1ef45c0..bbd1e88 100644
--- a/src/test/java/com/android/tools/r8/memberrebinding/MemberRebindingRemoveStaticBridgeTest.java
+++ b/src/test/java/com/android/tools/r8/memberrebinding/MemberRebindingRemoveStaticBridgeTest.java
@@ -9,6 +9,7 @@
 import static org.junit.Assert.assertTrue;
 
 import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
 import com.android.tools.r8.NoVerticalClassMerging;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
@@ -46,6 +47,7 @@
         .setMinApi(parameters)
         .addKeepMainRule(newMainTypeName)
         .enableInliningAnnotations()
+        .enableNoAccessModificationAnnotationsForClasses()
         .enableNoVerticalClassMergingAnnotations()
         .addHorizontallyMergedClassesInspector(
             HorizontallyMergedClassesInspector::assertNoClassesMerged)
@@ -59,6 +61,7 @@
             });
   }
 
+  @NoAccessModification
   @NoVerticalClassMerging
   static class A {
 
diff --git a/src/test/java/com/android/tools/r8/memberrebinding/MemberRebindingRemoveVirtualBridgeTest.java b/src/test/java/com/android/tools/r8/memberrebinding/MemberRebindingRemoveVirtualBridgeTest.java
index 0ca6131..4013b58 100644
--- a/src/test/java/com/android/tools/r8/memberrebinding/MemberRebindingRemoveVirtualBridgeTest.java
+++ b/src/test/java/com/android/tools/r8/memberrebinding/MemberRebindingRemoveVirtualBridgeTest.java
@@ -11,6 +11,7 @@
 
 import com.android.tools.r8.NeverClassInline;
 import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
 import com.android.tools.r8.NoInliningOfDefaultInitializer;
 import com.android.tools.r8.NoVerticalClassMerging;
 import com.android.tools.r8.TestBase;
@@ -49,6 +50,7 @@
         .setMinApi(parameters)
         .addKeepMainRule(newMainTypeName)
         .enableInliningAnnotations()
+        .enableNoAccessModificationAnnotationsForClasses()
         .enableNoInliningOfDefaultInitializerAnnotations()
         .enableNoVerticalClassMergingAnnotations()
         .enableNeverClassInliningAnnotations()
@@ -69,6 +71,7 @@
             });
   }
 
+  @NoAccessModification
   @NoVerticalClassMerging
   static class A {
 
diff --git a/src/test/java/com/android/tools/r8/memberrebinding/MemberRebindingTest.java b/src/test/java/com/android/tools/r8/memberrebinding/MemberRebindingTest.java
index 0bf9bc8..72be6ed 100644
--- a/src/test/java/com/android/tools/r8/memberrebinding/MemberRebindingTest.java
+++ b/src/test/java/com/android/tools/r8/memberrebinding/MemberRebindingTest.java
@@ -8,7 +8,6 @@
 
 import com.android.tools.r8.R8Command;
 import com.android.tools.r8.TestBase;
-import com.android.tools.r8.TestBase.Backend;
 import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.errors.Unreachable;
 import com.android.tools.r8.naming.MemberNaming.MethodSignature;
@@ -48,6 +47,7 @@
   private final String name;
 
   private final Backend backend;
+  private final String keepRuleFile;
   private final Path programFile;
   private final Consumer<CodeInspector> inspection;
   private final int minApiLevel;
@@ -58,6 +58,7 @@
   public MemberRebindingTest(TestConfiguration configuration) {
     this.name = configuration.name;
     this.backend = configuration.backend;
+    this.keepRuleFile = configuration.keepRuleFile;
     this.programFile = configuration.getJarPath();
     this.inspection = configuration.processedInspection;
     this.minApiLevel = configuration.getMinApiLevel();
@@ -78,6 +79,10 @@
     if (backend == Backend.DEX) {
       builder.setMinApiLevel(minApiLevel);
     }
+    if (keepRuleFile != null) {
+      builder.addProguardConfigurationFiles(Paths.get(ToolHelper.EXAMPLES_DIR, name, keepRuleFile));
+      ToolHelper.allowTestProguardOptions(builder);
+    }
     ToolHelper.getAppBuilder(builder).addProgramFiles(programFile);
     ToolHelper.runR8(
         builder.build(),
@@ -178,16 +183,19 @@
 
     final String name;
     final Backend backend;
+    final String keepRuleFile;
     final AndroidVersion version;
     final Consumer<CodeInspector> processedInspection;
 
     private TestConfiguration(
         String name,
         Backend backend,
+        String keepRuleFile,
         AndroidVersion version,
         Consumer<CodeInspector> processedInspection) {
       this.name = name;
       this.backend = backend;
+      this.keepRuleFile = keepRuleFile;
       this.version = version;
       this.processedInspection = processedInspection;
     }
@@ -196,9 +204,10 @@
         ImmutableList.Builder<TestConfiguration> builder,
         String name,
         Backend backend,
+        String keepRuleFile,
         AndroidVersion version,
         Consumer<CodeInspector> processedInspection) {
-      builder.add(new TestConfiguration(name, backend, version, processedInspection));
+      builder.add(new TestConfiguration(name, backend, keepRuleFile, version, processedInspection));
     }
 
     public Path getDexPath() {
@@ -244,24 +253,28 @@
           builder,
           "memberrebinding",
           backend,
+          null,
           TestConfiguration.AndroidVersion.PRE_N,
           MemberRebindingTest::inspectMain);
       TestConfiguration.add(
           builder,
           "memberrebinding2",
           backend,
+          "keep-rules.txt",
           TestConfiguration.AndroidVersion.PRE_N,
           MemberRebindingTest::inspectMain2);
       TestConfiguration.add(
           builder,
           "memberrebinding3",
           backend,
+          null,
           TestConfiguration.AndroidVersion.PRE_N,
           MemberRebindingTest::inspect3);
       TestConfiguration.add(
           builder,
           "memberrebinding4",
           backend,
+          null,
           TestConfiguration.AndroidVersion.N,
           MemberRebindingTest::inspect4);
     }
diff --git a/src/test/java/com/android/tools/r8/memberrebinding/testclasses/IllegalFieldRebindingTestClasses.java b/src/test/java/com/android/tools/r8/memberrebinding/testclasses/IllegalFieldRebindingTestClasses.java
index aaba050..930325d 100644
--- a/src/test/java/com/android/tools/r8/memberrebinding/testclasses/IllegalFieldRebindingTestClasses.java
+++ b/src/test/java/com/android/tools/r8/memberrebinding/testclasses/IllegalFieldRebindingTestClasses.java
@@ -4,10 +4,12 @@
 
 package com.android.tools.r8.memberrebinding.testclasses;
 
+import com.android.tools.r8.NoAccessModification;
 import com.android.tools.r8.NoVerticalClassMerging;
 
 public class IllegalFieldRebindingTestClasses {
 
+  @NoAccessModification
   @NoVerticalClassMerging
   static class A {
     public static int f;
diff --git a/src/test/java/com/android/tools/r8/memberrebinding/testclasses/MemberRebindingBridgeRemovalTestClasses.java b/src/test/java/com/android/tools/r8/memberrebinding/testclasses/MemberRebindingBridgeRemovalTestClasses.java
index 12ebac3..8324300 100644
--- a/src/test/java/com/android/tools/r8/memberrebinding/testclasses/MemberRebindingBridgeRemovalTestClasses.java
+++ b/src/test/java/com/android/tools/r8/memberrebinding/testclasses/MemberRebindingBridgeRemovalTestClasses.java
@@ -5,10 +5,12 @@
 package com.android.tools.r8.memberrebinding.testclasses;
 
 import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
 import com.android.tools.r8.NoVerticalClassMerging;
 
 public class MemberRebindingBridgeRemovalTestClasses {
 
+  @NoAccessModification
   @NoVerticalClassMerging
   static class A {
 
diff --git a/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingLambdaRepackageTest.java b/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingLambdaRepackageTest.java
index 58a6eff..d8a870f 100644
--- a/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingLambdaRepackageTest.java
+++ b/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingLambdaRepackageTest.java
@@ -8,6 +8,7 @@
 
 import com.android.tools.r8.NeverClassInline;
 import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
 import com.android.tools.r8.R8TestRunResult;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
@@ -38,6 +39,7 @@
             .addKeepRules("-repackageclasses foo")
             .enableInliningAnnotations()
             .enableNeverClassInliningAnnotations()
+            .enableNoAccessModificationAnnotationsForMembers()
             .run(parameters.getRuntime(), Main.class)
             .assertSuccessWithOutputLines("Hello World");
     R8TestRunResult secondRunResult =
@@ -47,6 +49,7 @@
             .addKeepMainRule(Main.class)
             .enableInliningAnnotations()
             .enableNeverClassInliningAnnotations()
+            .enableNoAccessModificationAnnotationsForMembers()
             .addApplyMapping(firstRunResult.proguardMap())
             .compile()
             .run(parameters.getRuntime(), Main.class);
@@ -58,6 +61,7 @@
   public static class PackagePrivate {
 
     @NeverInline
+    @NoAccessModification
     void print() {
       System.out.println("Hello World");
     }
diff --git a/src/test/java/com/android/tools/r8/naming/applymapping/sourcelibrary/MemberResolutionAsmTest.java b/src/test/java/com/android/tools/r8/naming/applymapping/sourcelibrary/MemberResolutionAsmTest.java
index d38f2c4..d4afe52 100644
--- a/src/test/java/com/android/tools/r8/naming/applymapping/sourcelibrary/MemberResolutionAsmTest.java
+++ b/src/test/java/com/android/tools/r8/naming/applymapping/sourcelibrary/MemberResolutionAsmTest.java
@@ -75,7 +75,7 @@
   private final String noMappingMain = "NoMappingMain";
   private final String noMappingExpected = StringUtils.lines("HasMapping#foo", "NoMapping#foo");
 
-  private List<byte[]> noMappingInputs() throws Exception {
+  private List<byte[]> noMappingInputs() {
     return ImmutableList.of(HasMappingDump.dump(), NoMappingDump.dump(), NoMappingMainDump.dump());
   }
 
@@ -103,7 +103,9 @@
             .addProgramClassFileData(noMappingInputs())
             .setMinApi(parameters)
             .addKeepMainRule(noMappingMain)
+            .addKeepRules("-noaccessmodification class NoMapping { private void foo(); }")
             .addApplyMapping(pgMap)
+            .enableNoAccessModificationAnnotationsForMembers()
             .addOptionsModification(
                 options -> {
                   options.inlinerOptions().enableInlining = false;
@@ -113,19 +115,24 @@
             .assertSuccessWithOutput(noMappingExpected)
             .inspector();
 
-    ClassSubject base = codeInspector.clazz("HasMapping");
-    assertThat(base, isPresentAndRenamed());
-    assertEquals("X", base.getFinalName());
-    MethodSubject x = base.method("void", "foo", ImmutableList.of());
-    assertThat(x, isPresentAndRenamed());
-    assertEquals("a", x.getFinalName());
+    ClassSubject hasMappingClassSubject = codeInspector.clazz("HasMapping");
+    assertThat(hasMappingClassSubject, isPresentAndRenamed());
+    assertEquals("X", hasMappingClassSubject.getFinalName());
+
+    MethodSubject virtualFooMethodSubject =
+        hasMappingClassSubject.uniqueMethodWithOriginalName("foo");
+    assertThat(virtualFooMethodSubject, isPresentAndRenamed());
+    assertEquals("a", virtualFooMethodSubject.getFinalName());
 
     // To ensure still getting illegal-access error we need to rename consistently.
-    ClassSubject sub = codeInspector.clazz("NoMapping");
-    assertThat(sub, isPresentAndRenamed());
-    assertEquals("Y", sub.getFinalName());
-    MethodSubject y = sub.method("void", "a", ImmutableList.of());
-    assertThat(y, isPresent());
+    ClassSubject noMappingClassSubject = codeInspector.clazz("NoMapping");
+    assertThat(noMappingClassSubject, isPresentAndRenamed());
+    assertEquals("Y", noMappingClassSubject.getFinalName());
+
+    MethodSubject privateFooMethodSubject =
+        noMappingClassSubject.uniqueMethodWithOriginalName("foo");
+    assertThat(privateFooMethodSubject, isPresent());
+    assertEquals("a", privateFooMethodSubject.getFinalName());
   }
 
   //  class A { // : X
diff --git a/src/test/java/com/android/tools/r8/naming/applymapping/sourcelibrary/MemberResolutionTest.java b/src/test/java/com/android/tools/r8/naming/applymapping/sourcelibrary/MemberResolutionTest.java
index e71747b..e7ef37a 100644
--- a/src/test/java/com/android/tools/r8/naming/applymapping/sourcelibrary/MemberResolutionTest.java
+++ b/src/test/java/com/android/tools/r8/naming/applymapping/sourcelibrary/MemberResolutionTest.java
@@ -10,6 +10,7 @@
 import static org.junit.Assert.assertEquals;
 
 import com.android.tools.r8.NeverPropagateValue;
+import com.android.tools.r8.NoAccessModification;
 import com.android.tools.r8.NoVerticalClassMerging;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
@@ -34,6 +35,7 @@
   @NeverPropagateValue private String tag = "PrivateInitialTag_AbstractChecker";
 
   // check() -> x
+  @NoAccessModification
   private void check() {
     System.out.println("AbstractChecker#check:" + tag);
   }
@@ -56,6 +58,7 @@
 
   // This should not be conflict with AbstractChecker#check due to the access control.
   // check() -> y
+  @NoAccessModification
   private void check() {
     System.out.println("ConcreteChecker#check:" + tag);
   }
@@ -124,6 +127,7 @@
             .addKeepMainRule(MemberResolutionTestMain.class)
             .addKeepRules("-applymapping " + mapPath)
             .enableMemberValuePropagationAnnotations()
+            .enableNoAccessModificationAnnotationsForMembers()
             .enableNoVerticalClassMergingAnnotations()
             .addOptionsModification(options -> options.inlinerOptions().enableInlining = false)
             .setMinApi(parameters)
diff --git a/src/test/java/com/android/tools/r8/naming/b72391662/B72391662.java b/src/test/java/com/android/tools/r8/naming/b72391662/B72391662.java
index ab72433..8db8492 100644
--- a/src/test/java/com/android/tools/r8/naming/b72391662/B72391662.java
+++ b/src/test/java/com/android/tools/r8/naming/b72391662/B72391662.java
@@ -6,6 +6,7 @@
 
 import static com.android.tools.r8.utils.codeinspector.Matchers.isPackagePrivate;
 import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPublic;
 import static org.hamcrest.CoreMatchers.not;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertEquals;
@@ -112,7 +113,7 @@
   @Test
   public void test_keepAll() throws Exception {
     Assume.assumeFalse(shrinker.generatesDex() && vmVersionIgnored());
-    Class mainClass = TestMain.class;
+    Class<?> mainClass = TestMain.class;
     String keep = !minify ? "-keep" : "-keep,allowobfuscation";
     List<String> config = ImmutableList.of(
         "-printmapping",
@@ -144,7 +145,11 @@
     // Test the totally unused method.
     MethodSubject staticMethod = testClass.uniqueMethodWithOriginalName("unused");
     assertThat(staticMethod, isPresent());
-    assertThat(staticMethod, isPackagePrivate());
+    assertThat(
+        staticMethod,
+        isForceAccessModifyingPackagePrivateAndProtectedMethods()
+            ? isPublic()
+            : isPackagePrivate());
     assertEquals(minify, staticMethod.isRenamed());
 
     // Test an indirectly referred method.
@@ -152,10 +157,23 @@
     assertThat(staticMethod, isPresent());
     assertEquals(minify, staticMethod.isRenamed());
     boolean publicizeCondition =
-        shrinker.isProguard() && minify && repackagePrefix != null && allowAccessModification;
+        isForceAccessModifyingPackagePrivateAndProtectedMethods()
+            || (shrinker.isProguard()
+                && minify
+                && repackagePrefix != null
+                && allowAccessModification);
     assertEquals(publicizeCondition, staticMethod.getMethod().isPublic());
   }
 
+  @Override
+  public boolean isForceAccessModifyingPackagePrivateAndProtectedMethods() {
+    if (!super.isForceAccessModifyingPackagePrivateAndProtectedMethods()) {
+      return false;
+    }
+    return (shrinker.isCompatR8() && allowAccessModification)
+        || (shrinker.isFullModeR8() && (shrinker.isR8Dex() || allowAccessModification || minify));
+  }
+
   @Test
   public void test_keepNonPublic() throws Exception {
     Assume.assumeFalse(shrinker.generatesDex() && vmVersionIgnored());
@@ -191,7 +209,11 @@
     // Test the totally unused method.
     MethodSubject staticMethod = testClass.uniqueMethodWithOriginalName("unused");
     assertThat(staticMethod, isPresent());
-    assertThat(staticMethod, isPackagePrivate());
+    assertThat(
+        staticMethod,
+        isForceAccessModifyingPackagePrivateAndProtectedMethods()
+            ? isPublic()
+            : isPackagePrivate());
     assertEquals(minify, staticMethod.isRenamed());
 
     // Test an indirectly referred method.
@@ -199,7 +221,11 @@
     assertThat(staticMethod, isPresent());
     assertEquals(minify, staticMethod.isRenamed());
     boolean publicizeCondition =
-        shrinker.isProguard() && minify && repackagePrefix != null && allowAccessModification;
+        isForceAccessModifyingPackagePrivateAndProtectedMethods()
+            || (shrinker.isProguard()
+                && minify
+                && repackagePrefix != null
+                && allowAccessModification);
     assertEquals(publicizeCondition, staticMethod.getMethod().isPublic());
   }
 
@@ -258,8 +284,14 @@
     staticMethod = testClass.uniqueMethodWithOriginalName("staticMethod");
     assertThat(staticMethod, isPresent());
     assertEquals(minify, staticMethod.isRenamed());
-    boolean publicizeCondition = shrinker.isR8() ? allowAccessModification
-        : minify && repackagePrefix != null && allowAccessModification;
+    boolean publicizeCondition =
+        (shrinker.isCompatR8() && allowAccessModification)
+            || (shrinker.isFullModeR8()
+                && (shrinker.isR8Dex() || allowAccessModification || minify))
+            || (shrinker.isProguard()
+                && minify
+                && repackagePrefix != null
+                && allowAccessModification);
     assertEquals(publicizeCondition, staticMethod.getMethod().accessFlags.isPublic());
   }
 }
diff --git a/src/test/java/com/android/tools/r8/naming/retraceproguard/InliningRetraceTest.java b/src/test/java/com/android/tools/r8/naming/retraceproguard/InliningRetraceTest.java
index 016d4ac..7f536a5 100644
--- a/src/test/java/com/android/tools/r8/naming/retraceproguard/InliningRetraceTest.java
+++ b/src/test/java/com/android/tools/r8/naming/retraceproguard/InliningRetraceTest.java
@@ -56,6 +56,7 @@
 
   @Test
   public void testSourceFileAndLineNumberTable() throws Exception {
+    assumeTrue("b/288405478", mode.isRelease());
     runTest(
         ImmutableList.of("-keepattributes SourceFile,LineNumberTable"),
         (StackTrace actualStackTrace, StackTrace retracedStackTrace) -> {
@@ -67,6 +68,7 @@
 
   @Test
   public void testLineNumberTableOnly() throws Exception {
+    assumeTrue("b/288405478", mode.isRelease());
     assumeTrue(compat);
     assumeTrue(parameters.isDexRuntime());
     runTest(
@@ -79,6 +81,7 @@
 
   @Test
   public void testNoLineNumberTable() throws Exception {
+    assumeTrue("b/288405478", mode.isRelease());
     assumeTrue(compat);
     assumeTrue(parameters.isDexRuntime());
     runTest(
diff --git a/src/test/java/com/android/tools/r8/profile/art/completeness/SyntheticLambdaClassProfileRewritingTest.java b/src/test/java/com/android/tools/r8/profile/art/completeness/SyntheticLambdaClassProfileRewritingTest.java
index ef6b3a3..53fb532 100644
--- a/src/test/java/com/android/tools/r8/profile/art/completeness/SyntheticLambdaClassProfileRewritingTest.java
+++ b/src/test/java/com/android/tools/r8/profile/art/completeness/SyntheticLambdaClassProfileRewritingTest.java
@@ -239,7 +239,7 @@
         inspector,
         parameters.canHaveNonReboundConstructorInvoke(),
         parameters.isCfRuntime(),
-        false);
+        parameters.isAccessModificationEnabledByDefault());
   }
 
   static class Main {
diff --git a/src/test/java/com/android/tools/r8/regress/b76025099/B76025099.java b/src/test/java/com/android/tools/r8/regress/b76025099/B76025099.java
index 5ef06ad..e0b1d4f 100644
--- a/src/test/java/com/android/tools/r8/regress/b76025099/B76025099.java
+++ b/src/test/java/com/android/tools/r8/regress/b76025099/B76025099.java
@@ -85,6 +85,8 @@
     testForR8(parameters.getBackend())
         .addProgramFiles(ToolHelper.getClassFilesForTestPackage(Main.class.getPackage()))
         .addKeepMainRule(Main.class)
+        .enableNoAccessModificationAnnotationsForClasses()
+        .enableNoAccessModificationAnnotationsForMembers()
         .enableNoVerticalClassMergingAnnotations()
         .addDontObfuscate()
         .setMinApi(parameters)
diff --git a/src/test/java/com/android/tools/r8/regress/b76025099/testclasses/helper/AbstractBase.java b/src/test/java/com/android/tools/r8/regress/b76025099/testclasses/helper/AbstractBase.java
index 9d5694c..bf454a9 100644
--- a/src/test/java/com/android/tools/r8/regress/b76025099/testclasses/helper/AbstractBase.java
+++ b/src/test/java/com/android/tools/r8/regress/b76025099/testclasses/helper/AbstractBase.java
@@ -3,12 +3,15 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.regress.b76025099.testclasses.helper;
 
+import com.android.tools.r8.NoAccessModification;
 import com.android.tools.r8.NoVerticalClassMerging;
 import com.android.tools.r8.regress.b76025099.testclasses.Logger;
 
+@NoAccessModification
 @NoVerticalClassMerging
 abstract class AbstractBase implements Logger {
-  protected String name;
+
+  @NoAccessModification protected String name;
 
   @Override
   public String getName() {
diff --git a/src/test/java/com/android/tools/r8/repackage/RepackageAllowRepackagingTest.java b/src/test/java/com/android/tools/r8/repackage/RepackageAllowRepackagingTest.java
index f1965fe..b1c34e2 100644
--- a/src/test/java/com/android/tools/r8/repackage/RepackageAllowRepackagingTest.java
+++ b/src/test/java/com/android/tools/r8/repackage/RepackageAllowRepackagingTest.java
@@ -6,6 +6,7 @@
 
 import static org.hamcrest.MatcherAssert.assertThat;
 
+import com.android.tools.r8.NoAccessModification;
 import com.android.tools.r8.TestParameters;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -30,6 +31,7 @@
             "-keep,allowrepackage class " + typeName(ShouldStayInPackage.class) + " { *; }")
         .addKeepRules(
             "-keep,allowrepackage class " + typeName(ShouldBeRepackaged.class) + " { *; }")
+        .enableNoAccessModificationAnnotationsForMembers()
         .compile()
         .inspect(
             inspector -> {
@@ -42,6 +44,7 @@
 
   public static class ShouldStayInPackage {
 
+    @NoAccessModification
     static void foo() {
       System.out.println("ShouldStayInPackage::foo");
     }
diff --git a/src/test/java/com/android/tools/r8/repackage/RepackageTest.java b/src/test/java/com/android/tools/r8/repackage/RepackageTest.java
index 5651252..a33ab6f 100644
--- a/src/test/java/com/android/tools/r8/repackage/RepackageTest.java
+++ b/src/test/java/com/android/tools/r8/repackage/RepackageTest.java
@@ -110,10 +110,13 @@
             "  <methods>;",
             "}")
         .allowAccessModification(allowAccessModification)
+        .applyIf(
+            allowAccessModification,
+            testBuilder -> testBuilder.addNoAccessModificationAnnotation(),
+            testBuilder -> testBuilder.enableNoAccessModificationAnnotationsForMembers())
         .apply(this::configureRepackaging)
         .enableInliningAnnotations()
         .enableNoHorizontalClassMergingAnnotations()
-        .enableNoHorizontalClassMergingAnnotations()
         .setMinApi(parameters)
         .compile()
         .inspect(this::inspect)
diff --git a/src/test/java/com/android/tools/r8/repackage/RepackageWithInitClassTest.java b/src/test/java/com/android/tools/r8/repackage/RepackageWithInitClassTest.java
index 55e260d..d6cce99 100644
--- a/src/test/java/com/android/tools/r8/repackage/RepackageWithInitClassTest.java
+++ b/src/test/java/com/android/tools/r8/repackage/RepackageWithInitClassTest.java
@@ -11,6 +11,7 @@
 import static org.hamcrest.MatcherAssert.assertThat;
 
 import com.android.tools.r8.NeverPropagateValue;
+import com.android.tools.r8.NoAccessModification;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.utils.BooleanUtils;
 import com.android.tools.r8.utils.codeinspector.ClassSubject;
@@ -52,6 +53,7 @@
         .addMemberValuePropagationAnnotations()
         .apply(this::configureRepackaging)
         .enableMemberValuePropagationAnnotations(enableMemberValuePropagationAnnotations)
+        .enableNoAccessModificationAnnotationsForMembers()
         .addOptionsModification(options -> options.enableRedundantFieldLoadElimination = false)
         .setMinApi(parameters)
         .compile()
@@ -98,7 +100,7 @@
 
   public static class StaticMemberValuePropagation {
 
-    @NeverPropagateValue static String HELLO = "Hello";
+    @NeverPropagateValue @NoAccessModification static String HELLO = "Hello";
 
     public static String WORLD = " world!";
 
diff --git a/src/test/java/com/android/tools/r8/repackage/RepackageWithOverridesOfPackagePrivateMethodsTest.java b/src/test/java/com/android/tools/r8/repackage/RepackageWithOverridesOfPackagePrivateMethodsTest.java
index 56436b4..2f7657a 100644
--- a/src/test/java/com/android/tools/r8/repackage/RepackageWithOverridesOfPackagePrivateMethodsTest.java
+++ b/src/test/java/com/android/tools/r8/repackage/RepackageWithOverridesOfPackagePrivateMethodsTest.java
@@ -8,6 +8,7 @@
 
 import com.android.tools.r8.NeverClassInline;
 import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
 import com.android.tools.r8.NoParameterTypeStrengthening;
 import com.android.tools.r8.NoVerticalClassMerging;
 import com.android.tools.r8.TestParameters;
@@ -32,6 +33,7 @@
         .apply(this::configureRepackaging)
         .enableInliningAnnotations()
         .enableNeverClassInliningAnnotations()
+        .enableNoAccessModificationAnnotationsForMembers()
         .enableNoParameterTypeStrengtheningAnnotations()
         .enableNoVerticalClassMergingAnnotations()
         .setMinApi(parameters)
@@ -69,6 +71,7 @@
   @NoVerticalClassMerging
   public abstract static class HelloGreeterBase {
 
+    @NoAccessModification
     abstract void greet();
   }
 
@@ -85,6 +88,7 @@
   @NoVerticalClassMerging
   public abstract static class WorldGreeterBase {
 
+    @NoAccessModification
     abstract void greet();
   }
 
diff --git a/src/test/java/com/android/tools/r8/repackage/RepackageWithStringIdentifier.java b/src/test/java/com/android/tools/r8/repackage/RepackageWithStringIdentifier.java
index 3f8e0bb..a4bc84c 100644
--- a/src/test/java/com/android/tools/r8/repackage/RepackageWithStringIdentifier.java
+++ b/src/test/java/com/android/tools/r8/repackage/RepackageWithStringIdentifier.java
@@ -8,6 +8,7 @@
 
 import com.android.tools.r8.NeverClassInline;
 import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
 import com.android.tools.r8.TestParameters;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -47,6 +48,8 @@
         .addKeepMainRule(Main.class)
         .enableInliningAnnotations()
         .enableNeverClassInliningAnnotations()
+        .enableNoAccessModificationAnnotationsForClasses()
+        .enableNoAccessModificationAnnotationsForMembers()
         .setMinApi(parameters)
         .compile()
         .inspect(inspector -> assertThat(A.class, isRepackaged(inspector)))
@@ -55,8 +58,12 @@
   }
 
   @NeverClassInline
+  @NoAccessModification
   static class A {
 
+    @NoAccessModification
+    A() {}
+
     @NeverInline
     public void foo() {
       System.out.println("Hello World!");
diff --git a/src/test/java/com/android/tools/r8/repackage/testclasses/repackagetest/AccessPackagePrivateMethodOnKeptClassIndirect.java b/src/test/java/com/android/tools/r8/repackage/testclasses/repackagetest/AccessPackagePrivateMethodOnKeptClassIndirect.java
index 355420d..ffb3588 100644
--- a/src/test/java/com/android/tools/r8/repackage/testclasses/repackagetest/AccessPackagePrivateMethodOnKeptClassIndirect.java
+++ b/src/test/java/com/android/tools/r8/repackage/testclasses/repackagetest/AccessPackagePrivateMethodOnKeptClassIndirect.java
@@ -5,6 +5,7 @@
 package com.android.tools.r8.repackage.testclasses.repackagetest;
 
 import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
 import com.android.tools.r8.NoHorizontalClassMerging;
 
 @NoHorizontalClassMerging
@@ -19,6 +20,7 @@
   public static class Helper {
 
     @NeverInline
+    @NoAccessModification
     static void test() {
       KeptClass.packagePrivateMethod();
     }
diff --git a/src/test/java/com/android/tools/r8/repackage/testclasses/repackagetest/KeptClass.java b/src/test/java/com/android/tools/r8/repackage/testclasses/repackagetest/KeptClass.java
index 5f2632f..8ab03ba 100644
--- a/src/test/java/com/android/tools/r8/repackage/testclasses/repackagetest/KeptClass.java
+++ b/src/test/java/com/android/tools/r8/repackage/testclasses/repackagetest/KeptClass.java
@@ -5,10 +5,12 @@
 package com.android.tools.r8.repackage.testclasses.repackagetest;
 
 import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
 
 public class KeptClass {
 
   @NeverInline
+  @NoAccessModification
   static void packagePrivateMethod() {
     System.out.println("KeptClass.packagePrivateMethod()");
   }
diff --git a/src/test/java/com/android/tools/r8/repackage/testclasses/repackagetest/KeptClassAllowRenaming.java b/src/test/java/com/android/tools/r8/repackage/testclasses/repackagetest/KeptClassAllowRenaming.java
index f6ca601..8ad73d9 100644
--- a/src/test/java/com/android/tools/r8/repackage/testclasses/repackagetest/KeptClassAllowRenaming.java
+++ b/src/test/java/com/android/tools/r8/repackage/testclasses/repackagetest/KeptClassAllowRenaming.java
@@ -5,10 +5,12 @@
 package com.android.tools.r8.repackage.testclasses.repackagetest;
 
 import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
 
 public class KeptClassAllowRenaming {
 
   @NeverInline
+  @NoAccessModification
   static void packagePrivateMethod() {
     System.out.println("KeptClassAllowRenaming.packagePrivateMethod()");
   }
diff --git a/src/test/java/com/android/tools/r8/repackage/testclasses/repackagetest/ReachableClassWithKeptMethod.java b/src/test/java/com/android/tools/r8/repackage/testclasses/repackagetest/ReachableClassWithKeptMethod.java
index e408270..47ab945 100644
--- a/src/test/java/com/android/tools/r8/repackage/testclasses/repackagetest/ReachableClassWithKeptMethod.java
+++ b/src/test/java/com/android/tools/r8/repackage/testclasses/repackagetest/ReachableClassWithKeptMethod.java
@@ -5,10 +5,12 @@
 package com.android.tools.r8.repackage.testclasses.repackagetest;
 
 import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
 
 public class ReachableClassWithKeptMethod {
 
   @NeverInline
+  @NoAccessModification
   static void packagePrivateMethod() {
     System.out.println("ReachableClassWithKeptMethod.packagePrivateMethod()");
   }
diff --git a/src/test/java/com/android/tools/r8/repackage/testclasses/repackagetest/ReachableClassWithKeptMethodAllowRenaming.java b/src/test/java/com/android/tools/r8/repackage/testclasses/repackagetest/ReachableClassWithKeptMethodAllowRenaming.java
index 7555b9b..568e526 100644
--- a/src/test/java/com/android/tools/r8/repackage/testclasses/repackagetest/ReachableClassWithKeptMethodAllowRenaming.java
+++ b/src/test/java/com/android/tools/r8/repackage/testclasses/repackagetest/ReachableClassWithKeptMethodAllowRenaming.java
@@ -5,10 +5,12 @@
 package com.android.tools.r8.repackage.testclasses.repackagetest;
 
 import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
 
 public class ReachableClassWithKeptMethodAllowRenaming {
 
   @NeverInline
+  @NoAccessModification
   static void packagePrivateMethod() {
     System.out.println("ReachableClassWithKeptMethodAllowRenaming.packagePrivateMethod()");
   }
diff --git a/src/test/java/com/android/tools/r8/resolution/b77944861/B77944861.java b/src/test/java/com/android/tools/r8/resolution/b77944861/B77944861.java
index 4e1ae5c..631aa50 100644
--- a/src/test/java/com/android/tools/r8/resolution/b77944861/B77944861.java
+++ b/src/test/java/com/android/tools/r8/resolution/b77944861/B77944861.java
@@ -65,6 +65,7 @@
         .addKeepMainRule(MAIN)
         .addDontObfuscate()
         .addDontShrink()
+        .enableNoAccessModificationAnnotationsForClasses()
         .setMinApi(parameters)
         .compile()
         .inspect(
diff --git a/src/test/java/com/android/tools/r8/resolution/b77944861/inner/TopLevelPolicy.java b/src/test/java/com/android/tools/r8/resolution/b77944861/inner/TopLevelPolicy.java
index 0c22769..848f76f 100644
--- a/src/test/java/com/android/tools/r8/resolution/b77944861/inner/TopLevelPolicy.java
+++ b/src/test/java/com/android/tools/r8/resolution/b77944861/inner/TopLevelPolicy.java
@@ -3,6 +3,8 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.resolution.b77944861.inner;
 
+import com.android.tools.r8.NoAccessModification;
+
 public class TopLevelPolicy {
 
   public static void set(MobileIconState state, String desc) {
@@ -11,6 +13,7 @@
     state.description = desc;
   }
 
+  @NoAccessModification
   private static abstract class IconState {
     public String description;
   }
diff --git a/src/test/java/com/android/tools/r8/retrace/RetraceStackTraceFunctionalCompositionTest.java b/src/test/java/com/android/tools/r8/retrace/RetraceStackTraceFunctionalCompositionTest.java
index 861e990..7193719 100644
--- a/src/test/java/com/android/tools/r8/retrace/RetraceStackTraceFunctionalCompositionTest.java
+++ b/src/test/java/com/android/tools/r8/retrace/RetraceStackTraceFunctionalCompositionTest.java
@@ -36,6 +36,7 @@
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.function.Supplier;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -43,6 +44,7 @@
 import org.junit.runners.Parameterized.Parameters;
 import org.objectweb.asm.MethodVisitor;
 
+@Ignore("b/288117378")
 @RunWith(Parameterized.class)
 public class RetraceStackTraceFunctionalCompositionTest extends TestBase {
 
diff --git a/src/test/java/com/android/tools/r8/retrace/RetraceTests.java b/src/test/java/com/android/tools/r8/retrace/RetraceTests.java
index 3644aa8..3c5aa5b 100644
--- a/src/test/java/com/android/tools/r8/retrace/RetraceTests.java
+++ b/src/test/java/com/android/tools/r8/retrace/RetraceTests.java
@@ -26,6 +26,7 @@
 import com.android.tools.r8.retrace.stacktraces.AmbiguousInlineFramesStackTrace;
 import com.android.tools.r8.retrace.stacktraces.AmbiguousMethodVerboseStackTrace;
 import com.android.tools.r8.retrace.stacktraces.AmbiguousMissingLineStackTrace;
+import com.android.tools.r8.retrace.stacktraces.AmbiguousMultipleInlineStackTrace;
 import com.android.tools.r8.retrace.stacktraces.AmbiguousStackTrace;
 import com.android.tools.r8.retrace.stacktraces.AmbiguousWithMultipleLineMappingsStackTrace;
 import com.android.tools.r8.retrace.stacktraces.AmbiguousWithSignatureStackTrace;
@@ -232,6 +233,11 @@
   }
 
   @Test
+  public void testAmbiguousMultipleInlineStackTrace() throws Exception {
+    runRetraceTest(new AmbiguousMultipleInlineStackTrace());
+  }
+
+  @Test
   public void testAmbiguousMultipleMappingsTest() throws Exception {
     runRetraceTest(new AmbiguousWithMultipleLineMappingsStackTrace());
   }
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/AmbiguousMultipleInlineStackTrace.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/AmbiguousMultipleInlineStackTrace.java
new file mode 100644
index 0000000..abf5ba6
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/AmbiguousMultipleInlineStackTrace.java
@@ -0,0 +1,55 @@
+// Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+package com.android.tools.r8.retrace.stacktraces;
+
+import com.android.tools.r8.utils.StringUtils;
+import java.util.Arrays;
+import java.util.List;
+
+public class AmbiguousMultipleInlineStackTrace implements StackTraceForTest {
+
+  @Override
+  public List<String> obfuscatedStackTrace() {
+    return Arrays.asList(
+        "java.lang.IndexOutOfBoundsException",
+        "\tat com.android.tools.r8.Internal.zza(SourceFile:10)");
+  }
+
+  @Override
+  public String mapping() {
+    return StringUtils.lines(
+        "com.android.tools.r8.Internal -> com.android.tools.r8.Internal:",
+        "  10:10:void some.inlinee1(int):10:10 -> zza",
+        "  10:10:void foo(int):10 -> zza",
+        "  11:12:void foo(int):11:12 -> zza",
+        "  10:10:void some.inlinee2(int, int):20:20 -> zza",
+        "  10:10:void foo(int, int):42 -> zza");
+  }
+
+  @Override
+  public List<String> retracedStackTrace() {
+    return Arrays.asList(
+        "java.lang.IndexOutOfBoundsException",
+        "\tat some.inlinee1(some.java:10)",
+        "\t<OR> at some.inlinee2(some.java:20)",
+        "\tat com.android.tools.r8.Internal.foo(Internal.java:10)",
+        "\t<OR> at com.android.tools.r8.Internal.foo(Internal.java:42)");
+  }
+
+  @Override
+  public List<String> retraceVerboseStackTrace() {
+    return Arrays.asList(
+        "java.lang.IndexOutOfBoundsException",
+        "\tat some.void inlinee1(int)(some.java:10)",
+        "\t<OR> at some.void inlinee2(int,int)(some.java:20)",
+        "\tat com.android.tools.r8.Internal.void foo(int)(Internal.java:10)",
+        "\t<OR> at com.android.tools.r8.Internal.void foo(int,int)(Internal.java:42)");
+  }
+
+  @Override
+  public int expectedWarnings() {
+    return 0;
+  }
+}
diff --git a/src/test/java/com/android/tools/r8/rewrite/enums/EnumOptimizationTest.java b/src/test/java/com/android/tools/r8/rewrite/enums/EnumOptimizationTest.java
index 35991a7..97045ca 100644
--- a/src/test/java/com/android/tools/r8/rewrite/enums/EnumOptimizationTest.java
+++ b/src/test/java/com/android/tools/r8/rewrite/enums/EnumOptimizationTest.java
@@ -159,6 +159,12 @@
         .enableMemberValuePropagationAnnotations()
         .enableSideEffectAnnotations()
         .addOptionsModification(this::configure)
+        .addOptionsModification(
+            o -> {
+              o.testing.enableLir();
+              // Not inlining toString depends on simple inlining limit.
+              o.inlinerOptions().simpleInliningInstructionLimit = 3;
+            })
         .setMinApi(parameters)
         .compile()
         .inspect(this::inspectToStrings)
diff --git a/src/test/java/com/android/tools/r8/shaking/KeepAnnotatedMemberTest.java b/src/test/java/com/android/tools/r8/shaking/KeepAnnotatedMemberTest.java
index a47a068..faba9a5 100644
--- a/src/test/java/com/android/tools/r8/shaking/KeepAnnotatedMemberTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/KeepAnnotatedMemberTest.java
@@ -233,7 +233,7 @@
             .apply(this::suppressZipFileAssignmentsToJavaLangAutoCloseable)
             .compile()
             .graphInspector();
-    assertRetainedClassesEqual(referenceInspector, ifThenKeepClassMembersInspector, true);
+    assertRetainedClassesEqual(referenceInspector, ifThenKeepClassMembersInspector, true, true);
 
     GraphInspector ifThenKeepClassesWithMembersInspector =
         testForR8(Backend.CF)
@@ -252,7 +252,8 @@
             .apply(this::suppressZipFileAssignmentsToJavaLangAutoCloseable)
             .compile()
             .graphInspector();
-    assertRetainedClassesEqual(referenceInspector, ifThenKeepClassesWithMembersInspector, true);
+    assertRetainedClassesEqual(
+        referenceInspector, ifThenKeepClassesWithMembersInspector, true, true);
 
     GraphInspector ifHasMemberThenKeepClassInspector =
         testForR8(Backend.CF)
@@ -273,7 +274,7 @@
             .apply(this::suppressZipFileAssignmentsToJavaLangAutoCloseable)
             .compile()
             .graphInspector();
-    assertRetainedClassesEqual(referenceInspector, ifHasMemberThenKeepClassInspector, true);
+    assertRetainedClassesEqual(referenceInspector, ifHasMemberThenKeepClassInspector, true, true);
   }
 
   private void configureHorizontalClassMerging(R8FullTestBuilder testBuilder) {
@@ -300,6 +301,15 @@
       GraphInspector referenceResult,
       GraphInspector conditionalResult,
       boolean expectConditionalIsLarger) {
+    assertRetainedClassesEqual(
+        referenceResult, conditionalResult, expectConditionalIsLarger, false);
+  }
+
+  private void assertRetainedClassesEqual(
+      GraphInspector referenceResult,
+      GraphInspector conditionalResult,
+      boolean expectConditionalIsLarger,
+      boolean expectNotConditionalIsLarger) {
     Set<String> referenceClasses =
         new TreeSet<>(
             referenceResult.codeInspector().allClasses().stream()
@@ -321,10 +331,15 @@
     }
     Set<String> notInConditional =
         new TreeSet<>(Sets.difference(referenceClasses, conditionalClasses));
-    assertEquals(
-        "Classes in -keepclassmembers rule that are not in -if rule",
-        Collections.emptySet(),
-        notInConditional);
+    if (expectNotConditionalIsLarger) {
+      assertFalse(
+          "Expected classes in -keepclassmembers rule to retain more", notInConditional.isEmpty());
+    } else {
+      assertEquals(
+          "Classes in -keepclassmembers rule that are not in -if rule",
+          Collections.emptySet(),
+          notInConditional);
+    }
   }
 
   private void suppressZipFileAssignmentsToJavaLangAutoCloseable(R8TestBuilder<?> testBuilder) {
diff --git a/src/test/java/com/android/tools/r8/shaking/LibraryMethodOverrideInLambdaMarkingTest.java b/src/test/java/com/android/tools/r8/shaking/LibraryMethodOverrideInLambdaMarkingTest.java
index 1ae00db..c91b930 100644
--- a/src/test/java/com/android/tools/r8/shaking/LibraryMethodOverrideInLambdaMarkingTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/LibraryMethodOverrideInLambdaMarkingTest.java
@@ -4,6 +4,7 @@
 
 package com.android.tools.r8.shaking;
 
+import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
 import com.android.tools.r8.NoVerticalClassMerging;
@@ -16,8 +17,6 @@
 import com.android.tools.r8.graph.DexType;
 import com.android.tools.r8.shaking.Enqueuer.Mode;
 import java.util.Iterator;
-import java.util.Spliterator;
-import java.util.function.Consumer;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -41,6 +40,8 @@
     testForR8(parameters.getBackend())
         .addInnerClasses(LibraryMethodOverrideInLambdaMarkingTest.class)
         .addKeepMainRule(TestClass.class)
+        // Keep J since redundant bridge removal will otherwise remove it.
+        .addKeepClassAndMembersRules(J.class)
         .addOptionsModification(
             options -> options.testing.enqueuerInspector = this::verifyLibraryOverrideInformation)
         .enableNoVerticalClassMergingAnnotations()
@@ -61,7 +62,8 @@
       AppInfoWithLiveness appInfo, DexType type) {
     DexProgramClass clazz = appInfo.definitionFor(type).asProgramClass();
     DexEncodedMethod method =
-        clazz.lookupVirtualMethod(m -> m.getReference().name.toString().equals("iterator"));
+        clazz.lookupVirtualMethod(m -> m.getName().toString().equals("iterator"));
+    assertNotNull(method);
     // TODO(b/149976493): Mark library overrides from lambda instances.
     if (parameters.isCfRuntime()) {
       assertTrue(method.isLibraryMethodOverride().isFalse());
@@ -98,15 +100,5 @@
 
     @Override
     Iterator<Object> iterator();
-
-    @Override
-    default void forEach(Consumer<? super Object> action) {
-      // Intentionally empty.
-    }
-
-    @Override
-    default Spliterator<Object> spliterator() {
-      return null;
-    }
   }
 }
diff --git a/src/test/java/com/android/tools/r8/shaking/assumenosideeffects/AssumenosideeffectsPropagationTest.java b/src/test/java/com/android/tools/r8/shaking/assumenosideeffects/AssumenosideeffectsPropagationTest.java
index 845e598..9d39bbc 100644
--- a/src/test/java/com/android/tools/r8/shaking/assumenosideeffects/AssumenosideeffectsPropagationTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/assumenosideeffects/AssumenosideeffectsPropagationTest.java
@@ -79,6 +79,7 @@
               : StringUtils.lines(
                   // Itf#info has side effects due to the missing Base2.
                   "[Sub1, info]: message00",
+                  "[Sub1, info]: message1",
                   "[Base2, info]: message08",
                   // Base2#info also has side effects.
                   "[Base2, info]: message4",
@@ -89,6 +90,7 @@
                   "[AnotherSub2, debug]: message08", "[AnotherSub2, debug]: message5", "The end")
               : StringUtils.lines(
                   "[Base1, debug]: message00",
+                  "[Base1, debug]: message2",
                   "[AnotherSub2, debug]: message08",
                   "[AnotherSub2, debug]: message5",
                   "The end");
diff --git a/src/test/java/com/android/tools/r8/shaking/constructor/ForwardingConstructorShakingOnDexWithClassMergingTest.java b/src/test/java/com/android/tools/r8/shaking/constructor/ForwardingConstructorShakingOnDexWithClassMergingTest.java
index fddfa66..786b46e 100644
--- a/src/test/java/com/android/tools/r8/shaking/constructor/ForwardingConstructorShakingOnDexWithClassMergingTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/constructor/ForwardingConstructorShakingOnDexWithClassMergingTest.java
@@ -8,6 +8,7 @@
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertEquals;
 
+import com.android.tools.r8.NeverClassInline;
 import com.android.tools.r8.NeverInline;
 import com.android.tools.r8.NoVerticalClassMerging;
 import com.android.tools.r8.TestBase;
@@ -49,6 +50,7 @@
         .addHorizontallyMergedClassesInspector(
             inspector -> inspector.assertMergedInto(A.class, B.class).assertNoOtherClassesMerged())
         .enableInliningAnnotations()
+        .enableNeverClassInliningAnnotations()
         .enableNoVerticalClassMergingAnnotations()
         .setMinApi(parameters)
         .compile()
@@ -111,6 +113,7 @@
     }
   }
 
+  @NeverClassInline
   public static class ASub extends A {
 
     // After horizontal class merging and unused argument removal, this is rewritten to target
diff --git a/src/test/java/com/android/tools/r8/shaking/forceproguardcompatibility/ProguardCompatibilityTestBase.java b/src/test/java/com/android/tools/r8/shaking/forceproguardcompatibility/ProguardCompatibilityTestBase.java
index d8afbb3..820cc29 100644
--- a/src/test/java/com/android/tools/r8/shaking/forceproguardcompatibility/ProguardCompatibilityTestBase.java
+++ b/src/test/java/com/android/tools/r8/shaking/forceproguardcompatibility/ProguardCompatibilityTestBase.java
@@ -50,6 +50,14 @@
           || this == R8_CF;
     }
 
+    public boolean isCompatR8() {
+      return this == R8_COMPAT || this == R8_COMPAT_CF;
+    }
+
+    public boolean isR8Dex() {
+      return this == R8_COMPAT || this == R8;
+    }
+
     public boolean isProguard() {
       return this == PROGUARD5 || this == PROGUARD6 || this == PROGUARD6_THEN_D8;
     }
diff --git a/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnAccessModifierTest.java b/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnAccessModifierTest.java
index 3f426a5..7af5d20 100644
--- a/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnAccessModifierTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnAccessModifierTest.java
@@ -5,9 +5,9 @@
 
 import static com.android.tools.r8.utils.codeinspector.Matchers.isPackagePrivate;
 import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPublic;
 import static org.hamcrest.CoreMatchers.not;
 import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assume.assumeFalse;
 
@@ -93,7 +93,7 @@
               assertThat(methodSubject, not(isPresent()));
               methodSubject = classSubject.uniqueMethodWithOriginalName("nonPublicMethod");
               assertThat(methodSubject, isPresent());
-              assertFalse(methodSubject.getMethod().accessFlags.isPublic());
+              assertThat(methodSubject, shrinker.isR8() ? isPublic() : isPackagePrivate());
               classSubject = inspector.clazz(ClassForSubsequent.class);
               assertThat(classSubject, not(isPresent()));
             });
@@ -176,7 +176,11 @@
               assertThat(methodSubject, not(isPresent()));
               methodSubject = classSubject.uniqueMethodWithOriginalName("nonPublicMethod");
               assertThat(methodSubject, isPresent());
-              assertThat(methodSubject, isPackagePrivate());
+              assertThat(
+                  methodSubject,
+                  shrinker.isR8() && isForceAccessModifyingPackagePrivateAndProtectedMethods()
+                      ? isPublic()
+                      : isPackagePrivate());
             });
   }
 
@@ -255,7 +259,11 @@
               assertThat(methodSubject, not(isPresent()));
               methodSubject = classSubject.uniqueMethodWithOriginalName("nonPublicMethod");
               assertThat(methodSubject, isPresent());
-              assertThat(methodSubject, isPackagePrivate());
+              assertThat(
+                  methodSubject,
+                  shrinker.isR8() && isForceAccessModifyingPackagePrivateAndProtectedMethods()
+                      ? isPublic()
+                      : isPackagePrivate());
             });
   }
 }
diff --git a/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnClassTest.java b/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnClassTest.java
index 74d2cfb..39ec9a9 100644
--- a/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnClassTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnClassTest.java
@@ -10,6 +10,7 @@
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertEquals;
 
+import com.android.tools.r8.NoAccessModification;
 import com.android.tools.r8.shaking.forceproguardcompatibility.ProguardCompatibilityTestBase;
 import com.android.tools.r8.utils.InternalOptions;
 import com.android.tools.r8.utils.codeinspector.ClassSubject;
@@ -33,7 +34,8 @@
           EmptyMainClassForIfOnClassTests.class,
           Precondition.class,
           DependentUser.class,
-          Dependent.class);
+          Dependent.class,
+          NoAccessModification.class);
 
   private final Shrinker shrinker;
   private final boolean keepPrecondition;
@@ -164,12 +166,15 @@
 
   @Test
   public void ifThenKeepClassesWithMembers() throws Exception {
-    List<String> config = ImmutableList.of(
-        "-if class **.Precondition",
-        "-keepclasseswithmembers,allowobfuscation class **.*User {",
-        "  static void callFoo(...);",
-        "}"
-    );
+    List<String> config =
+        ImmutableList.of(
+            "-if class **.Precondition",
+            "-keepclasseswithmembers,allowobfuscation class **.*User {",
+            "  static void callFoo(...);",
+            "}",
+            shrinker.isR8()
+                ? "-noaccessmodification class * { @com.android.tools.r8.NoAccessModification *; }"
+                : "");
 
     CodeInspector codeInspector = inspectAfterShrinking(shrinker, CLASSES, config);
     if (!keepPrecondition) {
@@ -293,15 +298,18 @@
 
   @Test
   public void ifThenKeepNames() throws Exception {
-    List<String> config = ImmutableList.of(
-        // To keep DependentUser#callFoo, which in turn kept Dependent#<init> as well.
-        // We're testing renaming of Dependent itself and members.
-        "-keepclasseswithmembers,allowobfuscation class **.*User {",
-        "  static void callFoo(...);",
-        "}",
-        "-if class **.Precondition",
-        "-keepnames class **.Dependent"
-    );
+    List<String> config =
+        ImmutableList.of(
+            // To keep DependentUser#callFoo, which in turn kept Dependent#<init> as well.
+            // We're testing renaming of Dependent itself and members.
+            "-keepclasseswithmembers,allowobfuscation class **.*User {",
+            "  static void callFoo(...);",
+            "}",
+            "-if class **.Precondition",
+            "-keepnames class **.Dependent",
+            shrinker.isR8()
+                ? "-noaccessmodification class * { @com.android.tools.r8.NoAccessModification *; }"
+                : "");
 
     CodeInspector codeInspector = inspectAfterShrinking(shrinker, CLASSES, config);
 
@@ -316,17 +324,20 @@
 
   @Test
   public void ifThenKeepClassesWithMemberNames() throws Exception {
-    List<String> config = ImmutableList.of(
-        // To keep DependentUser#callFoo, which in turn kept Dependent#<init> as well.
-        // We're testing renaming of Dependent itself and members.
-        "-keepclasseswithmembers,allowobfuscation class **.*User {",
-        "  static void callFoo(...);",
-        "}",
-        "-if class **.Precondition",
-        "-keepclasseswithmembernames class **.Dependent {",
-        "  <methods>;",
-        "}"
-    );
+    List<String> config =
+        ImmutableList.of(
+            // To keep DependentUser#callFoo, which in turn kept Dependent#<init> as well.
+            // We're testing renaming of Dependent itself and members.
+            "-keepclasseswithmembers,allowobfuscation class **.*User {",
+            "  static void callFoo(...);",
+            "}",
+            "-if class **.Precondition",
+            "-keepclasseswithmembernames class **.Dependent {",
+            "  <methods>;",
+            "}",
+            shrinker.isR8()
+                ? "-noaccessmodification class * { @com.android.tools.r8.NoAccessModification *; }"
+                : "");
 
     CodeInspector codeInspector = inspectAfterShrinking(shrinker, CLASSES, config);
 
@@ -342,17 +353,20 @@
 
   @Test
   public void ifThenKeepClassMemberNames() throws Exception {
-    List<String> config = ImmutableList.of(
-        // To keep DependentUser#callFoo, which in turn kept Dependent#<init> as well.
-        // We're testing renaming of Dependent itself and members.
-        "-keepclasseswithmembers,allowobfuscation class **.*User {",
-        "  static void callFoo(...);",
-        "}",
-        "-if class **.Precondition",
-        "-keepclassmembernames class **.Dependent {",
-        "  <methods>;",
-        "}"
-    );
+    List<String> config =
+        ImmutableList.of(
+            // To keep DependentUser#callFoo, which in turn kept Dependent#<init> as well.
+            // We're testing renaming of Dependent itself and members.
+            "-keepclasseswithmembers,allowobfuscation class **.*User {",
+            "  static void callFoo(...);",
+            "}",
+            "-if class **.Precondition",
+            "-keepclassmembernames class **.Dependent {",
+            "  <methods>;",
+            "}",
+            shrinker.isR8()
+                ? "-noaccessmodification class * { @com.android.tools.r8.NoAccessModification *; }"
+                : "");
 
     CodeInspector codeInspector = inspectAfterShrinking(shrinker, CLASSES, config);
 
diff --git a/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnClassTestClasses.java b/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnClassTestClasses.java
index 65b5c29..78575b1 100644
--- a/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnClassTestClasses.java
+++ b/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnClassTestClasses.java
@@ -3,6 +3,8 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.shaking.ifrule;
 
+import com.android.tools.r8.NoAccessModification;
+
 class EmptyMainClassForIfOnClassTests {
   public static void main(String[] args) {
   }
@@ -11,8 +13,10 @@
 // Precondition -> DependentUser -> Dependent
 // That is, this class and members will be kept only if Precondition and DependentUser are kept.
 class Dependent {
-  private int intField;
-  private String strField;
+
+  @NoAccessModification private int intField;
+
+  @NoAccessModification private String strField;
 
   Dependent(int i, String s) {
     intField = i;
diff --git a/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/KeepIfPresentRuleWithVerticalClassMergingTest.java b/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/KeepIfPresentRuleWithVerticalClassMergingTest.java
index c330985..fbde552 100644
--- a/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/KeepIfPresentRuleWithVerticalClassMergingTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/KeepIfPresentRuleWithVerticalClassMergingTest.java
@@ -10,6 +10,7 @@
 import static org.junit.Assert.assertEquals;
 
 import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestParametersCollection;
@@ -41,6 +42,7 @@
         .addKeepRules(
             "-if class * extends " + A.class.getTypeName(), "-keep class <1> { <init>(...); }")
         .enableInliningAnnotations()
+        .enableNoAccessModificationAnnotationsForClasses()
         .setMinApi(parameters)
         .compile()
         .inspect(
@@ -65,6 +67,8 @@
     }
   }
 
+  // TODO(b/287891322): Allow vertical class merging even when A is made public.
+  @NoAccessModification
   static class A {}
 
   static class B extends A {
diff --git a/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedFieldTypeTest.java b/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedFieldTypeTest.java
index df888c0..f28c2a5 100644
--- a/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedFieldTypeTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedFieldTypeTest.java
@@ -11,6 +11,7 @@
 import static org.junit.Assert.assertNotEquals;
 
 import com.android.tools.r8.NeverClassInline;
+import com.android.tools.r8.NoAccessModification;
 import com.android.tools.r8.NoRedundantFieldLoadElimination;
 import com.android.tools.r8.R8FullTestBuilder;
 import com.android.tools.r8.TestParameters;
@@ -50,6 +51,7 @@
 
   public static class MergedFieldTypeWithCollisionTest extends MergedTypeBaseTest {
 
+    @NoAccessModification
     static class SuperTestClass {
 
       @NoRedundantFieldLoadElimination private A field = new B();
@@ -85,6 +87,7 @@
 
     @Override
     public void configure(R8FullTestBuilder builder) {
+      super.configure(builder);
       builder
           .enableNeverClassInliningAnnotations()
           .enableNoRedundantFieldLoadEliminationAnnotations();
diff --git a/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedParameterTypeTest.java b/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedParameterTypeTest.java
index 32d30d9..01f8190 100644
--- a/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedParameterTypeTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedParameterTypeTest.java
@@ -10,6 +10,7 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotEquals;
 
+import com.android.tools.r8.NoAccessModification;
 import com.android.tools.r8.NoHorizontalClassMerging;
 import com.android.tools.r8.R8FullTestBuilder;
 import com.android.tools.r8.TestParameters;
@@ -54,6 +55,7 @@
 
   public static class MergedParameterTypeWithCollisionTest extends MergedTypeBaseTest {
 
+    @NoAccessModification
     @NoHorizontalClassMerging
     static class SuperTestClass {
 
diff --git a/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedReturnTypeTest.java b/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedReturnTypeTest.java
index 5a03792..9e98e16 100644
--- a/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedReturnTypeTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedReturnTypeTest.java
@@ -11,6 +11,7 @@
 import static org.junit.Assert.assertNotEquals;
 
 import com.android.tools.r8.AssumeMayHaveSideEffects;
+import com.android.tools.r8.NoAccessModification;
 import com.android.tools.r8.NoHorizontalClassMerging;
 import com.android.tools.r8.R8FullTestBuilder;
 import com.android.tools.r8.TestParameters;
@@ -62,6 +63,7 @@
 
   public static class MergedReturnTypeWithCollisionTest extends MergedTypeBaseTest {
 
+    @NoAccessModification
     @NoHorizontalClassMerging
     static class SuperTestClass {
 
diff --git a/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedTypeBaseTest.java b/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedTypeBaseTest.java
index f6e1ea7..da7c397 100644
--- a/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedTypeBaseTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedTypeBaseTest.java
@@ -9,6 +9,7 @@
 import static org.hamcrest.core.IsNot.not;
 import static org.junit.Assert.assertEquals;
 
+import com.android.tools.r8.NoAccessModification;
 import com.android.tools.r8.R8FullTestBuilder;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
@@ -29,12 +30,18 @@
 
   static class B extends A {}
 
+  // TODO(b/287891322): Allow vertical class merging even when C is made public.
+  @NoAccessModification
   static class C {}
 
+  // TODO(b/287891322): Allow vertical class merging even when I is made public.
+  @NoAccessModification
   interface I {}
 
   interface J extends I {}
 
+  // TODO(b/287891322): Allow vertical class merging even when K is made public.
+  @NoAccessModification
   interface K {}
 
   static class Unused {}
@@ -68,8 +75,10 @@
   }
 
   public void configure(R8FullTestBuilder builder) {
-    builder.addOptionsModification(
-        options -> options.enableVerticalClassMerging = enableVerticalClassMerging);
+    builder
+        .addOptionsModification(
+            options -> options.enableVerticalClassMerging = enableVerticalClassMerging)
+        .enableNoAccessModificationAnnotationsForClasses();
   }
 
   public abstract Class<?> getTestClass();
diff --git a/src/test/java/com/android/tools/r8/shaking/innerclassattributes/MissingOuterClassTest.java b/src/test/java/com/android/tools/r8/shaking/innerclassattributes/MissingOuterClassTest.java
index c16510e..8124058 100644
--- a/src/test/java/com/android/tools/r8/shaking/innerclassattributes/MissingOuterClassTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/innerclassattributes/MissingOuterClassTest.java
@@ -82,8 +82,9 @@
     assertEquals(outerClassSubject.getDexProgramClass().getType(), innerClassAttribute.getOuter());
     if (parameters.isCfRuntime() || hostClassSubject == innerClassSubject) {
       assertEquals(
-          DescriptorUtils.getInnerClassName(
-              outerClassSubject.getFinalDescriptor(), innerClassSubject.getFinalDescriptor()),
+          DescriptorUtils.getInnerClassNameFromSimpleName(
+              outerClassSubject.getDexProgramClass().getSimpleName(),
+              innerClassSubject.getDexProgramClass().getSimpleName()),
           innerClassAttribute.getInnerName().toSourceString());
     } else {
       assertEquals(DexItemFactory.unknownTypeName, innerClassAttribute.getInnerName());
diff --git a/src/test/java/com/android/tools/r8/shaking/librarymethodoverride/LibraryMethodOverrideDefaultMethodTest.java b/src/test/java/com/android/tools/r8/shaking/librarymethodoverride/LibraryMethodOverrideDefaultMethodTest.java
index 1b727a0..f20b1b5 100644
--- a/src/test/java/com/android/tools/r8/shaking/librarymethodoverride/LibraryMethodOverrideDefaultMethodTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/librarymethodoverride/LibraryMethodOverrideDefaultMethodTest.java
@@ -4,6 +4,8 @@
 
 package com.android.tools.r8.shaking.librarymethodoverride;
 
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
 import com.android.tools.r8.TestBase;
@@ -62,9 +64,13 @@
         appInfo
             .definitionFor(dexItemFactory.createType(descriptor(ProgramI.class)))
             .asProgramClass();
-    DexEncodedMethod method =
-        clazz.lookupVirtualMethod(m -> m.getReference().name.toString().equals("foo"));
-    assertTrue(method.isLibraryMethodOverride().isTrue());
+    DexEncodedMethod method = clazz.lookupVirtualMethod(m -> m.getName().toString().equals("foo"));
+    if (appInfo.options().canUseDefaultAndStaticInterfaceMethods() || mode.isInitialTreeShaking()) {
+      assertNotNull(method);
+      assertTrue(method.isLibraryMethodOverride().isTrue());
+    } else {
+      assertNull(method);
+    }
   }
 
   public interface LibraryI {
diff --git a/src/test/java/com/android/tools/r8/transformers/ClassFileTransformer.java b/src/test/java/com/android/tools/r8/transformers/ClassFileTransformer.java
index 2e3df74..5c8821d 100644
--- a/src/test/java/com/android/tools/r8/transformers/ClassFileTransformer.java
+++ b/src/test/java/com/android/tools/r8/transformers/ClassFileTransformer.java
@@ -187,6 +187,22 @@
     return classReference;
   }
 
+  public ClassFileTransformer setClassAccessFlags(int accessFlags) {
+    return addClassTransformer(
+        new ClassTransformer() {
+          @Override
+          public void visit(
+              int version,
+              int access,
+              String name,
+              String signature,
+              String superName,
+              String[] interfaces) {
+            super.visit(version, accessFlags, name, signature, superName, interfaces);
+          }
+        });
+  }
+
   /** Unconditionally replace the implements clause of a class. */
   public ClassFileTransformer setImplements(Class<?>... interfaces) {
     return setImplementsClassDescriptors(
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/FoundMethodSubject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/FoundMethodSubject.java
index cc336b6..fd18f5a 100644
--- a/src/test/java/com/android/tools/r8/utils/codeinspector/FoundMethodSubject.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/FoundMethodSubject.java
@@ -30,6 +30,7 @@
 import com.android.tools.r8.graph.MethodAccessFlags;
 import com.android.tools.r8.graph.ProgramMethod;
 import com.android.tools.r8.ir.code.IRCode;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions;
 import com.android.tools.r8.naming.MemberNaming;
 import com.android.tools.r8.naming.MemberNaming.MethodSignature;
 import com.android.tools.r8.naming.signature.GenericSignatureParser;
@@ -74,7 +75,12 @@
   @Override
   public IRCode buildIR(AppView<?> appView) {
     assert codeInspector.application.options.programConsumer != null;
-    return getProgramMethod().buildIR(appView);
+    return getProgramMethod()
+        .buildIR(
+            appView,
+            appView.enableWholeProgramOptimizations()
+                ? MethodConversionOptions.nonConverting()
+                : MethodConversionOptions.forD8(appView));
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/workaround/IncorrectTypeRefinementForThrowableTest.java b/src/test/java/com/android/tools/r8/workaround/IncorrectTypeRefinementForThrowableTest.java
new file mode 100644
index 0000000..bf3f43e
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/workaround/IncorrectTypeRefinementForThrowableTest.java
@@ -0,0 +1,57 @@
+// Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+package com.android.tools.r8.workaround;
+
+
+import com.android.tools.r8.TestBase;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public class IncorrectTypeRefinementForThrowableTest extends TestBase {
+
+  @Parameter(0)
+  public TestParameters parameters;
+
+  @Parameters(name = "{0}")
+  public static TestParametersCollection data() {
+    return getTestParameters().withAllRuntimesAndApiLevels().build();
+  }
+
+  @Test
+  public void testD8() throws Exception {
+    parameters.assumeDexRuntime();
+    testForD8(parameters.getBackend())
+        .addInnerClasses(getClass())
+        .release()
+        .setMinApi(parameters)
+        .run(parameters.getRuntime(), Main.class)
+        .assertSuccessWithEmptyOutput();
+  }
+
+  @Test
+  public void testJvm() throws Exception {
+    parameters.assumeJvmTestParameters();
+    testForJvm(parameters)
+        .addInnerClasses(getClass())
+        .run(parameters.getRuntime(), Main.class)
+        .assertSuccessWithEmptyOutput();
+  }
+
+  static class Main {
+
+    public static void main(String[] args) {
+      RuntimeException o = null;
+      if (o instanceof Object) {
+        throw o;
+      }
+    }
+  }
+}
diff --git a/src/test/smali/arithmetic/Arithmetic.smali b/src/test/smali/arithmetic/Arithmetic.smali
deleted file mode 100644
index f76b9b3..0000000
--- a/src/test/smali/arithmetic/Arithmetic.smali
+++ /dev/null
@@ -1,254 +0,0 @@
-# Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-.class public LTest;
-
-.super Ljava/lang/Object;
-
-.method static addMinusOne(I)I
-    .locals 1
-
-    const/4 v0, -1
-    add-int v0, p0, v0
-    return v0
-.end method
-
-.method static addTwoConstants()I
-    .locals 2
-
-    const/4 v0, 1
-    const/4 v1, 2
-    add-int v0, v0, v1
-    return v0
-.end method
-
-.method static addSameTwoConstants()I
-    .locals 2
-
-    const/4 v0, 1
-    add-int v0, v0, v0
-    return v0
-.end method
-
-.method static subMinusOne(I)I
-    .locals 1
-
-    const/4 v0, -1
-    sub-int v0, p0, v0
-    return v0
-.end method
-
-.method static subSameTwoConstants()I
-    .locals 2
-
-    const/4 v0, 1
-    sub-int v0, v0, v0
-    return v0
-.end method
-
-.method static subtractConstants()I
-    .locals 9
-
-    const/4 v0, 0
-
-    const v1, 127  # Max 8-bit signed integer.
-    const v2, -128  # Min 8-bit signed integer.
-    const v3, 128  # Max 8-bit signed integer plus one.
-    const v4, -129  # Min 8-bit signed integer minus one.
-
-    const v5, 32767  # Max 16-bit signed integer.
-    const v6, -32768  # Min 16-bit signed integer.
-    const v7, 32768  # Max 16-bit signed integer plus one.
-    const v8, -32769  # Min 16-bit signed integer minus one.
-
-    sub-int v0, v0, v1
-    sub-int v0, v0, v2
-    sub-int v0, v0, v3
-    sub-int v0, v0, v4
-    sub-int v0, v0, v5
-    sub-int v0, v0, v6
-    sub-int v0, v0, v7
-    sub-int v0, v0, v8
-    sub-int v0, v1, v0
-    sub-int v0, v2, v0
-    sub-int v0, v3, v0
-    sub-int v0, v4, v0
-    sub-int v0, v5, v0
-    sub-int v0, v6, v0
-    sub-int v0, v7, v0
-    sub-int v0, v8, v0
-
-    return v0
-.end method
-
-.method static sixteenIntArgMethod(IIIIIIIIIIIIIIII)V
-    .locals 0
-    return-void
-.end method
-
-# Same code as subtractConstants, but try to force the register allocator to allocate registers for
-# the arithmetic operations above 15.
-.method static subtractConstants8bitRegisters()I
-    .locals 32
-
-    const/4 v0, 0
-
-    const v1, 127  # Max 8-bit signed integer.
-    const v2, -128  # Min 8-bit signed integer.
-    const v3, 128  # Max 8-bit signed integer plus one.
-    const v4, -129  # Min 8-bit signed integer minus one.
-
-    const v5, 32767  # Max 16-bit signed integer.
-    const v6, -32768  # Min 16-bit signed integer.
-    const v7, 32768  # Max 16-bit signed integer plus one.
-    const v8, -32769  # Min 16-bit signed integer minus one.
-
-    const v9, 9
-    const v10, 10
-    const v11, 11
-    const v12, 12
-    const v13, 13
-    const v14, 14
-    const v15, 15
-
-    sub-int v16, v0, v1
-    sub-int v17, v16, v2
-    sub-int v18, v17, v3
-    sub-int v19, v18, v4
-    sub-int v20, v19, v5
-    sub-int v21, v20, v6
-    sub-int v22, v21, v7
-    sub-int v23, v22, v8
-    sub-int v24, v1, v23
-    sub-int v25, v2, v24
-    sub-int v26, v3, v25
-    sub-int v27, v4, v26
-    sub-int v28, v5, v27
-    sub-int v29, v6, v28
-    sub-int v30, v7, v29
-    sub-int v31, v8, v30
-
-    invoke-static/range {v16 .. v31}, LTest;->sixteenIntArgMethod(IIIIIIIIIIIIIIII)V
-
-    return v31
-.end method
-
-.method static addConstantUsedTwice()I
-    .locals 4
-
-    const/4 v0, 0
-    const/4 v1, 1
-    add-int/2addr v0, v1
-    add-int/2addr v0, v1
-    return v0
-.end method
-
-.method static addTwoLongConstants()J
-    .locals 4
-
-    const-wide v0, 1
-    const-wide v2, 2
-    add-long v0, v0, v2
-    return-wide v0
-.end method
-
-.method static addTwoDoubleConstants()D
-    .locals 4
-
-    const-wide v0, 0x3ff0000000000000L  # 1.0
-    const-wide v2, 0x4000000000000000L  # 2.0
-    add-double v0, v0, v2
-    return-wide v0
-.end method
-
-.method static cmpFold()I
-    .locals 4
-
-    const-wide v0, 0
-    const-wide v2, 0
-    cmp-long v0, v0, v2
-    return v0
-.end method
-
-.method static addFoldLeft(I)I
-    .locals 2
-
-    const/4 v0, 1
-    const/4 v1, 2
-    add-int/2addr v0, v1
-    add-int/2addr v0, p0
-    return v0
-.end method
-
-.method static subFoldLeft(I)I
-    .locals 2
-
-    const/4 v0, 1
-    const/4 v1, 2
-    sub-int/2addr v0, v1
-    sub-int/2addr v0, p0
-    return v0
-.end method
-
-.method public static main([Ljava/lang/String;)V
-    .locals 3
-
-    sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
-
-    # Calculate: 0 + (-1).
-    const/4 v1, 0
-    invoke-static {v1}, LTest;->addMinusOne(I)I
-    move-result v1
-    invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
-
-    invoke-static {}, LTest;->addTwoConstants()I
-    move-result v1
-    invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
-
-    invoke-static {}, LTest;->addSameTwoConstants()I
-    move-result v1
-    invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
-
-    invoke-static {}, LTest;->addTwoLongConstants()J
-    move-result-wide v1
-    invoke-virtual {v0, v1, v2}, Ljava/io/PrintStream;->println(J)V
-
-    invoke-static {}, LTest;->addTwoDoubleConstants()D
-    move-result-wide v1
-    invoke-virtual {v0, v1, v2}, Ljava/io/PrintStream;->println(D)V
-
-    # Calculate: 0 - (-1).
-    const/4 v1, 0
-    invoke-static {v1}, LTest;->subMinusOne(I)I
-    move-result v1
-    invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
-
-    invoke-static {}, LTest;->subSameTwoConstants()I
-    move-result v1
-    invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
-
-    invoke-static {}, LTest;->subtractConstants()I
-    move-result v1
-    invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
-
-    invoke-static {}, LTest;->subtractConstants8bitRegisters()I
-    move-result v1
-    invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
-
-    invoke-static {}, LTest;->addConstantUsedTwice()I
-    move-result v1
-    invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
-
-    const/4 v1, 1
-    invoke-static {v1}, LTest;->addFoldLeft(I)I
-    move-result v1
-    invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
-
-    const/4 v1, 1
-    invoke-static {v1}, LTest;->subFoldLeft(I)I
-    move-result v1
-    invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
-
-    return-void
-.end method
diff --git a/src/test/smali/bad-codegen/Test.java b/src/test/smali/bad-codegen/Test.java
deleted file mode 100644
index f301ed7..0000000
--- a/src/test/smali/bad-codegen/Test.java
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import java.util.Map;
-
-public class Test {
-  public Test a;
-  public static Test P;
-
-  public Test() {
-  }
-
-  public Test(int a, Test b, Test c, Long d, Test e, Map f) {
-  }
-
-  public Test(int i1, int i2, int i3) {
-  }
-
-  public long b() {
-    return 0;
-  }
-
-  public boolean c() {
-    return false;
-  }
-
-  public boolean d() {
-    return false;
-  }
-
-  public static void main(String[] args) {
-    Test test = new Test();
-    try {
-      new TestObject().a(test, test, test, test, true);
-    } catch (Throwable t) {
-      System.out.println(t);
-    }
-  }
-}
diff --git a/src/test/smali/bad-codegen/TestObject.java b/src/test/smali/bad-codegen/TestObject.java
deleted file mode 100644
index dc96fca..0000000
--- a/src/test/smali/bad-codegen/TestObject.java
+++ /dev/null
@@ -1,9 +0,0 @@
-// Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-public class TestObject {
-  public Test a(Test a, Test b, Test c, Test d, boolean e) {
-    return new Test();
-  }
-}
diff --git a/src/test/smali/bad-codegen/TestObject.smali b/src/test/smali/bad-codegen/TestObject.smali
deleted file mode 100644
index 811cd21..0000000
--- a/src/test/smali/bad-codegen/TestObject.smali
+++ /dev/null
@@ -1,1494 +0,0 @@
-# Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-.class public final LTestObject;
-.super Ljava/lang/Object;
-
-.field public a:LTest;
-.field public b:Ljava/util/List;
-
-.method public constructor <init>()V
-    .registers 1
-    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
-    return-void
-.end method
-
-.method public final a(LTest;LTest;LTest;LTest;Z)LTest;
-    .registers 34
-    move-object/from16 v0, p0
-    iget-object v12, v0, LTestObject;->a:LTest;
-    iget-object v4, v12, LTest;->a:LTest;
-    invoke-virtual {v4}, LTest;->b()J
-    move-result-wide v14
-    const/4 v10, 0x0
-    const/4 v4, 0x0
-    if-eqz p2, :cond_9cf
-    move-object/from16 v0, p2
-    iget-object v10, v0, LTest;->a:LTest;
-    move-object/from16 v0, p2
-    iget-object v4, v0, LTest;->b:Ljava/util/List;
-    move-object v13, v4
-    :goto_17
-    if-eqz v10, :cond_1f
-    invoke-virtual {v10}, LTest;->d()Z
-    move-result v4
-    if-nez v4, :cond_21d
-    :cond_1f
-    new-instance v4, LTest;
-    const/4 v5, 0x0
-    const/4 v6, 0x0
-    sget-object v7, LTest;->P:LTest;
-    const-wide/16 v8, 0x0
-    const/4 v11, 0x0
-    invoke-direct/range {v4 .. v11}, LTest;-><init>(ILTest;LTest;JLTest;Ljava/util/Map;)V
-    move-object v14, v4
-    :goto_2c
-    if-nez p4, :cond_44
-    iget-object v4, v14, LTest;->a:LTest;
-    sget-object v5, LTest;->P:LTest;
-    if-ne v4, v5, :cond_44
-    iget-object v4, v14, LTest;->a:LTest;
-    new-instance p4, LTest;
-    iget v5, v4, LTest;->c:I
-    iget v4, v4, LTest;->d:I
-    const v6, 0x2faf080
-    move-object/from16 v0, p4
-    invoke-direct {v0, v5, v4, v6}, LTest;-><init>(III)V
-    :cond_44
-    move-object/from16 v0, p0
-    iget-object v4, v0, LTestObject;->a:LTest;
-    invoke-virtual {v4}, LTest;->a()Z
-    move-result v5
-    if-eqz v5, :cond_6c5
-    iget-object v8, v4, LTest;->a:LTest;
-    if-nez p1, :cond_61e
-    const/4 v4, 0x0
-    :cond_53
-    :goto_53
-    if-eqz v4, :cond_6c8
-    move-object v12, v4
-    :goto_56
-    iget-object v4, v12, LTest;->a:LTest;
-    sget-object v5, LTest;->P:LTest;
-    if-ne v4, v5, :cond_931
-    const/4 v4, 0x1
-    :goto_5d
-    iget-object v5, v14, LTest;->a:LTest;
-    sget-object v6, LTest;->P:LTest;
-    if-ne v5, v6, :cond_934
-    const/4 v5, 0x1
-    :goto_64
-    if-nez v4, :cond_937
-    if-nez v5, :cond_937
-    const/4 v4, 0x0
-    move-object v13, v4
-    :goto_6a
-    sget-object v4, LTest;->P:LTest;
-    invoke-static {v4}, LTest;->a(LTest;)Z
-    move-result v4
-    if-eqz v4, :cond_212
-    const/4 v5, 0x0
-    const/4 v4, 0x0
-    if-eqz v13, :cond_9c8
-    if-ne v13, v14, :cond_976
-    const/4 v5, 0x1
-    move v11, v4
-    move v15, v5
-    :goto_7b
-    if-eqz v12, :cond_97b
-    iget-object v4, v12, LTest;->a:LTest;
-    sget-object v5, LTest;->P:LTest;
-    if-ne v4, v5, :cond_97b
-    const/4 v4, 0x1
-    :goto_84
-    if-eqz v4, :cond_9c
-    const/4 v7, 0x0
-    iget v4, v12, LTest;->a:I
-    packed-switch v4, :pswitch_data_9d2
-    :goto_8c
-    :pswitch_8c
-    if-eqz v7, :cond_9c
-    move-object/from16 v0, p0
-    iget-object v4, v0, LTestObject;->a:LTest;
-    const-string v5, ""
-    const-string v6, ""
-    const-wide/16 v8, 0x1
-    const/4 v10, 0x1
-    invoke-interface/range {v4 .. v10}, LTest;->a(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;JZ)V
-    :cond_9c
-    iget-object v4, v14, LTest;->a:LTest;
-    sget-object v5, LTest;->P:LTest;
-    if-ne v4, v5, :cond_98e
-    const/4 v4, 0x1
-    :goto_a3
-    if-eqz v4, :cond_bb
-    const/4 v7, 0x0
-    iget v4, v14, LTest;->a:I
-    packed-switch v4, :pswitch_data_9e0
-    :goto_ab
-    if-eqz v7, :cond_bb
-    move-object/from16 v0, p0
-    iget-object v4, v0, LTestObject;->a:LTest;
-    const-string v5, ""
-    const-string v6, ""
-    const-wide/16 v8, 0x1
-    const/4 v10, 0x1
-    invoke-interface/range {v4 .. v10}, LTest;->a(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;JZ)V
-    :cond_bb
-    if-eqz v15, :cond_999
-    move-object/from16 v0, p0
-    iget-object v4, v0, LTestObject;->a:LTest;
-    const-string v5, ""
-    const-string v6, ""
-    const-string v7, ""
-    const-wide/16 v8, 0x1
-    const/4 v10, 0x1
-    invoke-interface/range {v4 .. v10}, LTest;->a(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;JZ)V
-    :goto_cd
-    move-object/from16 v0, p0
-    iget-object v4, v0, LTestObject;->a:LTest;
-    if-eqz v4, :cond_119
-    move-object/from16 v0, p0
-    iget-object v4, v0, LTestObject;->a:LTest;
-    move-object/from16 v0, p0
-    iget-object v5, v0, LTestObject;->a:LTest;
-    const-string v6, ""
-    invoke-virtual {v4}, LTest;->a()Z
-    move-result v7
-    if-eqz v7, :cond_f6
-    iget-object v4, v4, LTest;->a:LTest;
-    iget-object v7, v4, LTest;->a:LTest;
-    if-eqz v7, :cond_f6
-    iget-object v7, v4, LTest;->a:LTest;
-    iget-object v7, v7, LTest;->a:LTest;
-    if-eqz v7, :cond_f6
-    iget-object v4, v4, LTest;->a:LTest;
-    iget-object v4, v4, LTest;->a:LTest;
-    invoke-virtual {v4, v5, v6}, LTest;->a(LTest;Ljava/lang/String;)V
-    :cond_f6
-    move-object/from16 v0, p0
-    iget-object v4, v0, LTestObject;->a:LTest;
-    move-object/from16 v0, p0
-    iget-object v5, v0, LTestObject;->a:LTest;
-    const-string v6, ""
-    invoke-virtual {v4}, LTest;->b()Z
-    move-result v7
-    if-eqz v7, :cond_119
-    iget-object v4, v4, LTest;->a:LTest;
-    iget-object v7, v4, LTest;->a:LTest;
-    if-eqz v7, :cond_119
-    iget-object v7, v4, LTest;->a:LTest;
-    iget-object v7, v7, LTest;->a:LTest;
-    if-eqz v7, :cond_119
-    iget-object v4, v4, LTest;->a:LTest;
-    iget-object v4, v4, LTest;->a:LTest;
-    invoke-virtual {v4, v5, v6}, LTest;->a(LTest;Ljava/lang/String;)V
-    :cond_119
-    move-object/from16 v0, p0
-    iget-object v4, v0, LTestObject;->a:LTest;
-    if-eqz v4, :cond_212
-    move-object/from16 v0, p0
-    iget-object v4, v0, LTestObject;->a:LTest;
-    move-object/from16 v0, p0
-    iget-object v5, v0, LTestObject;->a:LTest;
-    const-string v6, ""
-    invoke-virtual {v4}, LTest;->a()Z
-    move-result v7
-    if-eqz v7, :cond_212
-    iget-object v4, v4, LTest;->a:LTest;
-    invoke-static {v5}, LTest;->a(Ljava/lang/Object;)Ljava/lang/Object;
-    invoke-static {v6}, LTest;->a(Ljava/lang/Object;)Ljava/lang/Object;
-    iget-object v7, v4, LTest;->a:LTest;
-    iget-object v15, v7, LTest;->a:LTest;
-    iget-object v4, v4, LTest;->a:LTest;
-    iget-object v7, v4, LTest;->a:LTest;
-    if-eqz v7, :cond_9bf
-    iget-object v4, v4, LTest;->a:LTest;
-    invoke-virtual {v4}, LTest;->b()J
-    move-result-wide v8
-    move-wide/from16 v16, v8
-    :goto_149
-    iget-wide v8, v15, LTest;->l:J
-    const-wide/16 v10, -0x1
-    cmp-long v4, v8, v10
-    if-eqz v4, :cond_191
-    iget-wide v8, v15, LTest;->l:J
-    cmp-long v4, v16, v8
-    if-lez v4, :cond_191
-    iget-wide v8, v15, LTest;->l:J
-    sub-long v8, v16, v8
-    long-to-float v4, v8
-    const v7, 0x4ca4cb80    # 8.64E7f
-    div-float v10, v4, v7
-    const-string v7, ""
-    iget v4, v15, LTest;->g:I
-    int-to-long v8, v4
-    invoke-static/range {v5 .. v10}, LTest;->a(LTest;Ljava/lang/String;Ljava/lang/String;JF)V
-    const-string v7, ""
-    iget v4, v15, LTest;->c:I
-    int-to-long v8, v4
-    invoke-static/range {v5 .. v10}, LTest;->a(LTest;Ljava/lang/String;Ljava/lang/String;JF)V
-    const-string v7, ""
-    iget v4, v15, LTest;->b:I
-    int-to-long v8, v4
-    invoke-static/range {v5 .. v10}, LTest;->a(LTest;Ljava/lang/String;Ljava/lang/String;JF)V
-    const-string v7, ""
-    iget v4, v15, LTest;->a:I
-    int-to-long v8, v4
-    invoke-static/range {v5 .. v10}, LTest;->a(LTest;Ljava/lang/String;Ljava/lang/String;JF)V
-    const-string v7, ""
-    iget v4, v15, LTest;->d:I
-    int-to-long v8, v4
-    invoke-static/range {v5 .. v10}, LTest;->a(LTest;Ljava/lang/String;Ljava/lang/String;JF)V
-    const-string v7, ""
-    iget v4, v15, LTest;->h:I
-    int-to-long v8, v4
-    invoke-static/range {v5 .. v10}, LTest;->a(LTest;Ljava/lang/String;Ljava/lang/String;JF)V
-    :cond_191
-    const-string v7, ""
-    iget v4, v15, LTest;->h:I
-    int-to-long v8, v4
-    iget v10, v15, LTest;->g:I
-    const/4 v11, 0x0
-    invoke-static/range {v5 .. v11}, LTest;->a(LTest;Ljava/lang/String;Ljava/lang/String;JII)I
-    move-result v4
-    iput v4, v15, LTest;->h:I
-    const-string v7, ""
-    iget-wide v8, v15, LTest;->k:J
-    iget v10, v15, LTest;->g:I
-    const/4 v11, 0x0
-    invoke-static/range {v5 .. v11}, LTest;->a(LTest;Ljava/lang/String;Ljava/lang/String;JII)I
-    move-result v4
-    int-to-long v8, v4
-    iput-wide v8, v15, LTest;->k:J
-    const-string v7, ""
-    iget v4, v15, LTest;->i:I
-    int-to-long v8, v4
-    iget v10, v15, LTest;->j:I
-    const/4 v11, 0x0
-    invoke-static/range {v5 .. v11}, LTest;->a(LTest;Ljava/lang/String;Ljava/lang/String;JII)I
-    move-result v4
-    iput v4, v15, LTest;->i:I
-    const/4 v4, 0x0
-    iput v4, v15, LTest;->j:I
-    const-string v7, ""
-    iget v4, v15, LTest;->e:I
-    int-to-long v8, v4
-    iget v10, v15, LTest;->a:I
-    const/4 v11, 0x0
-    invoke-static/range {v5 .. v11}, LTest;->a(LTest;Ljava/lang/String;Ljava/lang/String;JII)I
-    move-result v4
-    iput v4, v15, LTest;->e:I
-    const-string v4, ""
-    iget v7, v15, LTest;->a:I
-    const/4 v8, 0x0
-    invoke-static {v5, v6, v4, v7, v8}, LTest;->a(LTest;Ljava/lang/String;Ljava/lang/String;II)I
-    move-result v4
-    iput v4, v15, LTest;->a:I
-    const-string v4, ""
-    iget v7, v15, LTest;->b:I
-    const/4 v8, 0x0
-    invoke-static {v5, v6, v4, v7, v8}, LTest;->a(LTest;Ljava/lang/String;Ljava/lang/String;II)I
-    move-result v4
-    iput v4, v15, LTest;->b:I
-    const-string v4, ""
-    iget v7, v15, LTest;->c:I
-    const/4 v8, 0x0
-    invoke-static {v5, v6, v4, v7, v8}, LTest;->a(LTest;Ljava/lang/String;Ljava/lang/String;II)I
-    move-result v4
-    iput v4, v15, LTest;->c:I
-    const-string v4, ""
-    iget v7, v15, LTest;->d:I
-    const/4 v8, 0x0
-    invoke-static {v5, v6, v4, v7, v8}, LTest;->a(LTest;Ljava/lang/String;Ljava/lang/String;II)I
-    move-result v4
-    iput v4, v15, LTest;->d:I
-    const-string v4, ""
-    iget v7, v15, LTest;->f:I
-    const/4 v8, 0x0
-    invoke-static {v5, v6, v4, v7, v8}, LTest;->a(LTest;Ljava/lang/String;Ljava/lang/String;II)I
-    move-result v4
-    iput v4, v15, LTest;->f:I
-    const-string v4, ""
-    iget v7, v15, LTest;->g:I
-    const/4 v8, 0x0
-    invoke-static {v5, v6, v4, v7, v8}, LTest;->a(LTest;Ljava/lang/String;Ljava/lang/String;II)I
-    move-result v4
-    iput v4, v15, LTest;->g:I
-    move-wide/from16 v0, v16
-    iput-wide v0, v15, LTest;->l:J
-    :cond_212
-    if-eqz p5, :cond_9c5
-    if-ne v13, v14, :cond_9c5
-    const/4 v4, 0x1
-    :goto_217
-    new-instance v5, LTest;
-    invoke-direct {v5, v13, v12, v14, v4}, LTest;-><init>(LTest;LTest;LTest;Z)V
-    return-object v5
-    :cond_21d
-    invoke-virtual {v12}, LTest;->a()Z
-    move-result v4
-    if-eqz v4, :cond_57c
-    iget-object v8, v12, LTest;->a:LTest;
-    iget-wide v4, v8, LTest;->b:J
-    const-wide/16 v6, 0x1
-    add-long/2addr v4, v6
-    iput-wide v4, v8, LTest;->b:J
-    if-eqz v10, :cond_578
-    iget v4, v10, LTest;->k:I
-    const/4 v5, 0x3
-    if-ne v4, v5, :cond_29b
-    const/4 v4, 0x1
-    :goto_234
-    if-eqz v4, :cond_578
-    iget-object v9, v8, LTest;->a:LTest;
-    invoke-static {v10}, LTest;->a(LTest;)J
-    move-result-wide v16
-    const-wide/16 v4, 0x0
-    cmp-long v4, v16, v4
-    if-gez v4, :cond_2ca
-    const/4 v4, 0x0
-    :cond_243
-    :goto_243
-    if-nez v4, :cond_543
-    iget-object v4, v8, LTest;->a:LTest;
-    iget-object v4, v4, LTest;->a:LTest;
-    iget v5, v4, LTest;->d:I
-    add-int/lit8 v5, v5, 0x1
-    iput v5, v4, LTest;->d:I
-    iget-object v4, v8, LTest;->a:LTest;
-    iget-object v5, v4, LTest;->a:LTest;
-    iget-boolean v4, v5, LTest;->b:Z
-    if-nez v4, :cond_53c
-    iget-object v4, v5, LTest;->a:LTest;
-    iget-object v4, v4, LTest;->a:LTest;
-    iget-object v4, v4, LTest;->f:Ljava/lang/String;
-    if-eqz v4, :cond_539
-    const/4 v4, 0x1
-    :goto_260
-    if-eqz v4, :cond_53c
-    iget-object v4, v5, LTest;->a:LTest;
-    invoke-virtual {v4}, LTest;->b()J
-    move-result-wide v6
-    iget-wide v8, v5, LTest;->c:J
-    sub-long/2addr v6, v8
-    iget v4, v5, LTest;->j:I
-    int-to-long v4, v4
-    cmp-long v4, v6, v4
-    if-lez v4, :cond_53c
-    const/4 v4, 0x1
-    :goto_273
-    if-eqz v4, :cond_53f
-    new-instance v4, LTest;
-    const/4 v5, 0x0
-    const/4 v6, 0x0
-    sget-object v7, LTest;->P:LTest;
-    const-wide/16 v8, 0x0
-    const/4 v11, 0x0
-    invoke-direct/range {v4 .. v11}, LTest;-><init>(ILTest;LTest;JLTest;Ljava/util/Map;)V
-    move-object v6, v4
-    :goto_282
-    if-eqz v6, :cond_57c
-    iget-object v4, v6, LTest;->a:LTest;
-    sget-object v5, LTest;->P:LTest;
-    if-ne v4, v5, :cond_57c
-    new-instance v4, LTest;
-    iget v5, v6, LTest;->a:I
-    iget-object v6, v6, LTest;->a:LTest;
-    sget-object v7, LTest;->P:LTest;
-    iget-wide v8, v10, LTest;->i:J
-    const/4 v11, 0x0
-    invoke-direct/range {v4 .. v11}, LTest;-><init>(ILTest;LTest;JLTest;Ljava/util/Map;)V
-    move-object v14, v4
-    goto/16 :goto_2c
-    :cond_29b
-    const/4 v5, 0x4
-    if-ne v4, v5, :cond_2c7
-    sget-object v4, LTest;->P:LTest;
-    invoke-virtual {v4}, LTest;->b()Ljava/lang/Object;
-    move-result-object v4
-    check-cast v4, Ljava/lang/Integer;
-    invoke-virtual {v4}, Ljava/lang/Integer;->intValue()I
-    move-result v4
-    and-int/lit8 v4, v4, 0x1
-    if-nez v4, :cond_2c4
-    sget-object v4, LTest;->P:LTest;
-    invoke-virtual {v4}, LTest;->a()Ljava/lang/Object;
-    move-result-object v4
-    check-cast v4, Ljava/lang/Long;
-    invoke-virtual {v4}, Ljava/lang/Long;->intValue()I
-    move-result v4
-    and-int/lit8 v4, v4, 0x1
-    if-nez v4, :cond_2c1
-    const/4 v4, 0x1
-    goto/16 :goto_234
-    :cond_2c1
-    const/4 v4, 0x0
-    goto/16 :goto_234
-    :cond_2c4
-    const/4 v4, 0x1
-    goto/16 :goto_234
-    :cond_2c7
-    const/4 v4, 0x0
-    goto/16 :goto_234
-    :cond_2ca
-    iget-object v11, v9, LTest;->a:LTest;
-    iget-object v4, v11, LTest;->a:LTest;
-    if-eqz v4, :cond_325
-    iget-wide v4, v11, LTest;->d:J
-    cmp-long v4, v16, v4
-    if-nez v4, :cond_325
-    iget-object v4, v11, LTest;->a:LTest;
-    :goto_2d8
-    if-nez v4, :cond_243
-    invoke-virtual {v10}, LTest;->a()Ljava/lang/String;
-    move-result-object v5
-    iget v6, v10, LTest;->k:I
-    const/4 v7, 0x3
-    if-ne v6, v7, :cond_4e1
-    const-string v6, ""
-    invoke-virtual {v5, v6}, Ljava/lang/String;->split(Ljava/lang/String;)[Ljava/lang/String;
-    move-result-object v5
-    array-length v6, v5
-    const/4 v7, 0x5
-    if-ne v6, v7, :cond_2f7
-    const/4 v6, 0x0
-    aget-object v6, v5, v6
-    invoke-static {v6}, LTest;->a(Ljava/lang/String;)I
-    move-result v6
-    const/4 v7, 0x3
-    if-eq v6, v7, :cond_489
-    :cond_2f7
-    const/4 v5, 0x0
-    :goto_2f8
-    if-eqz v5, :cond_2fe
-    iget-object v6, v9, LTest;->a:LTest;
-    iput-object v5, v6, LTest;->f:Ljava/lang/String;
-    :cond_2fe
-    iget-object v5, v9, LTest;->a:LTest;
-    invoke-virtual {v5}, LTest;->b()J
-    move-result-wide v6
-    iget-wide v0, v9, LTest;->g:J
-    move-wide/from16 v16, v0
-    sub-long v16, v6, v16
-    iget-wide v0, v9, LTest;->e:J
-    move-wide/from16 v18, v0
-    cmp-long v5, v16, v18
-    if-lez v5, :cond_243
-    iget-wide v0, v9, LTest;->f:J
-    move-wide/from16 v16, v0
-    sub-long v16, v6, v16
-    iget-object v5, v9, LTest;->a:LTest;
-    iget-object v5, v5, LTest;->a:LTest;
-    move-wide/from16 v0, v16
-    invoke-virtual {v5, v0, v1}, LTest;->a(J)V
-    iput-wide v6, v9, LTest;->g:J
-    goto/16 :goto_243
-    :cond_325
-    iget-object v4, v11, LTest;->a:LTest;
-    const/4 v5, 0x1
-    move-wide/from16 v0, v16
-    invoke-virtual {v4, v0, v1, v5}, LTest;->a(JZ)[B
-    move-result-object v5
-    if-nez v5, :cond_332
-    const/4 v4, 0x0
-    goto :goto_2d8
-    :cond_332
-    iget-object v0, v11, LTest;->a:LTest;
-    move-object/from16 v18, v0
-    new-instance v4, LTest;
-    sget-object v6, LTest;->P:LTest;
-    invoke-direct {v4, v6}, LTest;-><init>(LTest;)V
-    array-length v6, v5
-    const/4 v7, 0x6
-    if-ge v6, v7, :cond_346
-    const/4 v4, 0x0
-    :cond_342
-    :goto_342
-    if-nez v4, :cond_481
-    const/4 v4, 0x0
-    goto :goto_2d8
-    :cond_346
-    const/4 v6, 0x0
-    invoke-static {v5, v6}, LTest;->b([BI)I
-    move-result v19
-    const/4 v6, 0x3
-    move-object/from16 v0, v18
-    move/from16 v1, v19
-    invoke-virtual {v0, v1, v5, v6}, LTest;->a(I[BI)[D
-    move-result-object v6
-    if-eqz v6, :cond_35d
-    array-length v7, v6
-    const/16 v20, 0x3
-    move/from16 v0, v20
-    if-eq v7, v0, :cond_35f
-    :cond_35d
-    const/4 v4, 0x0
-    goto :goto_342
-    :cond_35f
-    const/4 v7, 0x2
-    const/16 v20, 0x0
-    aget-wide v20, v6, v20
-    const-wide v22, 0x416312d000000000L    # 1.0E7
-    mul-double v20, v20, v22
-    move-wide/from16 v0, v20
-    double-to-int v0, v0
-    move/from16 v20, v0
-    move/from16 v0, v20
-    int-to-long v0, v0
-    move-wide/from16 v20, v0
-    move-wide/from16 v0, v20
-    invoke-virtual {v4, v7, v0, v1}, LTest;->b(IJ)LTest;
-    const/4 v7, 0x3
-    const/16 v20, 0x1
-    aget-wide v20, v6, v20
-    const-wide v22, 0x416312d000000000L    # 1.0E7
-    mul-double v20, v20, v22
-    move-wide/from16 v0, v20
-    double-to-int v0, v0
-    move/from16 v20, v0
-    move/from16 v0, v20
-    int-to-long v0, v0
-    move-wide/from16 v20, v0
-    move-wide/from16 v0, v20
-    invoke-virtual {v4, v7, v0, v1}, LTest;->b(IJ)LTest;
-    const/4 v7, 0x4
-    const/16 v20, 0x2
-    aget-wide v20, v6, v20
-    move-wide/from16 v0, v20
-    double-to-float v6, v0
-    invoke-virtual {v4, v7, v6}, LTest;->b(IF)LTest;
-    array-length v6, v5
-    const/4 v7, 0x6
-    if-eq v6, v7, :cond_47e
-    array-length v6, v5
-    add-int/lit8 v6, v6, -0x6
-    new-array v0, v6, [B
-    move-object/from16 v20, v0
-    const/4 v7, 0x6
-    const/16 v21, 0x0
-    move-object/from16 v0, v20
-    move/from16 v1, v21
-    invoke-static {v5, v7, v0, v1, v6}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
-    new-instance v21, LTest;
-    move-object/from16 v0, v21
-    move-object/from16 v1, v20
-    invoke-direct {v0, v1}, LTest;-><init>([B)V
-    const/4 v5, 0x0
-    move-object/from16 v0, v21
-    iput v5, v0, LTest;->a:I
-    :goto_3c3
-    move-object/from16 v0, v21
-    iget v5, v0, LTest;->a:I
-    move-object/from16 v0, v21
-    iget-object v6, v0, LTest;->b:[B
-    array-length v6, v6
-    add-int/lit8 v6, v6, -0x1
-    if-ge v5, v6, :cond_47e
-    move-object/from16 v0, v21
-    iget v6, v0, LTest;->a:I
-    invoke-virtual/range {v21 .. v21}, LTest;->a()I
-    move-result v5
-    move-object/from16 v0, v20
-    array-length v7, v0
-    add-int/2addr v5, v6
-    if-ge v7, v5, :cond_3e7
-    const/4 v5, 0x0
-    :goto_3df
-    if-nez v5, :cond_46b
-    const/4 v5, 0x0
-    :goto_3e2
-    if-nez v5, :cond_342
-    const/4 v4, 0x0
-    goto/16 :goto_342
-    :cond_3e7
-    new-instance v5, LTest;
-    sget-object v7, LTest;->P:LTest;
-    invoke-direct {v5, v7}, LTest;-><init>(LTest;)V
-    move-object/from16 v0, v20
-    invoke-static {v0, v6}, LTest;->a([BI)I
-    move-result v22
-    add-int/lit8 v6, v6, 0x1
-    aget-byte v23, v20, v6
-    add-int/lit8 v7, v6, 0x1
-    const/4 v6, 0x0
-    :goto_3fb
-    move/from16 v0, v22
-    if-ge v6, v0, :cond_41a
-    move-object/from16 v0, v20
-    move/from16 v1, v23
-    invoke-static {v0, v7, v1, v6}, LTest;->a([BIBI)I
-    move-result v24
-    const/16 v25, 0x2
-    move/from16 v0, v24
-    int-to-long v0, v0
-    move-wide/from16 v26, v0
-    move/from16 v0, v25
-    move-wide/from16 v1, v26
-    invoke-virtual {v5, v0, v1, v2}, LTest;->a(IJ)V
-    add-int/lit8 v7, v7, 0x1
-    add-int/lit8 v6, v6, 0x1
-    goto :goto_3fb
-    :cond_41a
-    move-object/from16 v0, v18
-    move/from16 v1, v19
-    move-object/from16 v2, v20
-    invoke-virtual {v0, v1, v2, v7}, LTest;->a(I[BI)[D
-    move-result-object v6
-    if-nez v6, :cond_428
-    const/4 v5, 0x0
-    goto :goto_3df
-    :cond_428
-    const/4 v7, 0x3
-    const/16 v22, 0x0
-    aget-wide v22, v6, v22
-    const-wide v24, 0x416312d000000000L    # 1.0E7
-    mul-double v22, v22, v24
-    move-wide/from16 v0, v22
-    double-to-int v0, v0
-    move/from16 v22, v0
-    move/from16 v0, v22
-    int-to-long v0, v0
-    move-wide/from16 v22, v0
-    move-wide/from16 v0, v22
-    invoke-virtual {v5, v7, v0, v1}, LTest;->a(IJ)V
-    const/4 v7, 0x4
-    const/16 v22, 0x1
-    aget-wide v22, v6, v22
-    const-wide v24, 0x416312d000000000L    # 1.0E7
-    mul-double v22, v22, v24
-    move-wide/from16 v0, v22
-    double-to-int v0, v0
-    move/from16 v22, v0
-    move/from16 v0, v22
-    int-to-long v0, v0
-    move-wide/from16 v22, v0
-    move-wide/from16 v0, v22
-    invoke-virtual {v5, v7, v0, v1}, LTest;->a(IJ)V
-    const/4 v7, 0x5
-    const/16 v22, 0x2
-    aget-wide v22, v6, v22
-    move-wide/from16 v0, v22
-    double-to-float v6, v0
-    invoke-virtual {v5, v7, v6}, LTest;->a(IF)V
-    goto/16 :goto_3df
-    :cond_46b
-    const/4 v6, 0x5
-    invoke-virtual {v4, v6, v5}, LTest;->a(ILjava/lang/Object;)V
-    move-object/from16 v0, v21
-    iget v5, v0, LTest;->a:I
-    invoke-virtual/range {v21 .. v21}, LTest;->a()I
-    move-result v6
-    add-int/2addr v5, v6
-    move-object/from16 v0, v21
-    iput v5, v0, LTest;->a:I
-    goto/16 :goto_3c3
-    :cond_47e
-    const/4 v5, 0x1
-    goto/16 :goto_3e2
-    :cond_481
-    iput-object v4, v11, LTest;->a:LTest;
-    move-wide/from16 v0, v16
-    iput-wide v0, v11, LTest;->d:J
-    goto/16 :goto_2d8
-    :cond_489
-    new-instance v6, Ljava/lang/StringBuilder;
-    invoke-direct {v6}, Ljava/lang/StringBuilder;-><init>()V
-    const/4 v7, 0x0
-    aget-object v7, v5, v7
-    invoke-virtual {v6, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-    move-result-object v6
-    const-string v7, ""
-    invoke-virtual {v6, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-    move-result-object v6
-    const/4 v7, 0x1
-    aget-object v7, v5, v7
-    invoke-virtual {v6, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-    move-result-object v6
-    const-string v7, ""
-    invoke-virtual {v6, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-    move-result-object v6
-    const/4 v7, 0x2
-    aget-object v7, v5, v7
-    invoke-virtual {v6, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-    move-result-object v6
-    const-string v7, ""
-    invoke-virtual {v6, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-    move-result-object v6
-    const/4 v7, 0x4
-    aget-object v7, v5, v7
-    invoke-static {v7}, Ljava/lang/Integer;->parseInt(Ljava/lang/String;)I
-    move-result v7
-    shr-int/lit8 v7, v7, 0x10
-    const v11, 0xffff
-    and-int/2addr v7, v11
-    invoke-virtual {v6, v7}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
-    move-result-object v6
-    const-string v7, ""
-    invoke-virtual {v6, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-    move-result-object v6
-    const/4 v7, 0x4
-    aget-object v5, v5, v7
-    invoke-static {v5}, Ljava/lang/Integer;->parseInt(Ljava/lang/String;)I
-    move-result v5
-    const v7, 0xffff
-    and-int/2addr v5, v7
-    invoke-virtual {v6, v5}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
-    move-result-object v5
-    invoke-virtual {v5}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-    move-result-object v5
-    goto/16 :goto_2f8
-    :cond_4e1
-    iget v6, v10, LTest;->k:I
-    const/4 v7, 0x4
-    if-ne v6, v7, :cond_536
-    const-string v6, ""
-    invoke-virtual {v5, v6}, Ljava/lang/String;->split(Ljava/lang/String;)[Ljava/lang/String;
-    move-result-object v5
-    array-length v6, v5
-    const/4 v7, 0x4
-    if-ne v6, v7, :cond_4fa
-    const/4 v6, 0x0
-    aget-object v6, v5, v6
-    invoke-static {v6}, LTest;->a(Ljava/lang/String;)I
-    move-result v6
-    const/4 v7, 0x4
-    if-eq v6, v7, :cond_4fd
-    :cond_4fa
-    const/4 v5, 0x0
-    goto/16 :goto_2f8
-    :cond_4fd
-    new-instance v6, Ljava/lang/StringBuilder;
-    invoke-direct {v6}, Ljava/lang/StringBuilder;-><init>()V
-    const/4 v7, 0x0
-    aget-object v7, v5, v7
-    invoke-virtual {v6, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-    move-result-object v6
-    const-string v7, ""
-    invoke-virtual {v6, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-    move-result-object v6
-    const/4 v7, 0x1
-    aget-object v7, v5, v7
-    invoke-virtual {v6, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-    move-result-object v6
-    const-string v7, ""
-    invoke-virtual {v6, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-    move-result-object v6
-    const/4 v7, 0x2
-    aget-object v7, v5, v7
-    invoke-virtual {v6, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-    move-result-object v6
-    const-string v7, ""
-    invoke-virtual {v6, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-    move-result-object v6
-    const/4 v7, 0x3
-    aget-object v5, v5, v7
-    invoke-virtual {v6, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-    move-result-object v5
-    invoke-virtual {v5}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-    move-result-object v5
-    goto/16 :goto_2f8
-    :cond_536
-    const/4 v5, 0x0
-    goto/16 :goto_2f8
-    :cond_539
-    const/4 v4, 0x0
-    goto/16 :goto_260
-    :cond_53c
-    const/4 v4, 0x0
-    goto/16 :goto_273
-    :cond_53f
-    const/4 v4, 0x0
-    move-object v6, v4
-    goto/16 :goto_282
-    :cond_543
-    iget-object v5, v8, LTest;->a:LTest;
-    iget-object v5, v5, LTest;->a:LTest;
-    iget-object v6, v10, LTest;->j:Ljava/util/Collection;
-    invoke-interface {v6}, Ljava/util/Collection;->size()I
-    move-result v6
-    iget v7, v5, LTest;->e:I
-    add-int/2addr v6, v7
-    iput v6, v5, LTest;->e:I
-    invoke-virtual {v8, v10, v4}, LTest;->a(LTest;LTest;)LTest;
-    move-result-object v6
-    if-eqz v6, :cond_578
-    iget-object v4, v8, LTest;->a:LTest;
-    iget-object v4, v4, LTest;->a:LTest;
-    iget v5, v4, LTest;->c:I
-    add-int/lit8 v5, v5, 0x1
-    iput v5, v4, LTest;->c:I
-    iget-wide v4, v8, LTest;->c:J
-    const-wide/16 v16, 0x1
-    add-long v4, v4, v16
-    iput-wide v4, v8, LTest;->c:J
-    new-instance v4, LTest;
-    const/4 v5, 0x2
-    sget-object v7, LTest;->P:LTest;
-    iget-wide v8, v10, LTest;->i:J
-    const/4 v11, 0x0
-    invoke-direct/range {v4 .. v11}, LTest;-><init>(ILTest;LTest;JLTest;Ljava/util/Map;)V
-    move-object v6, v4
-    goto/16 :goto_282
-    :cond_578
-    const/4 v4, 0x0
-    move-object v6, v4
-    goto/16 :goto_282
-    :cond_57c
-    const/4 v4, 0x0
-    invoke-virtual {v12, v10, v4, v14, v15}, LTest;->a(LTest;Ljava/util/Map;J)LTest;
-    move-result-object v4
-    if-nez v4, :cond_5a1
-    iget-object v4, v12, LTest;->a:LTest;
-    invoke-interface {v4}, LTest;->c()J
-    move-result-wide v4
-    invoke-virtual {v10, v4, v5}, LTest;->a(J)LTest;
-    move-result-object v4
-    move-object/from16 v0, p3
-    invoke-virtual {v0, v4}, LTest;->a(LTest;)V
-    new-instance v4, LTest;
-    const/4 v5, 0x1
-    const/4 v6, 0x0
-    sget-object v7, LTest;->P:LTest;
-    const-wide/16 v8, 0x0
-    const/4 v11, 0x0
-    invoke-direct/range {v4 .. v11}, LTest;-><init>(ILTest;LTest;JLTest;Ljava/util/Map;)V
-    move-object v14, v4
-    goto/16 :goto_2c
-    :cond_5a1
-    invoke-virtual {v4}, LTest;->b()Z
-    move-result v4
-    if-nez v4, :cond_5b6
-    new-instance v4, LTest;
-    const/4 v5, 0x0
-    const/4 v6, 0x0
-    sget-object v7, LTest;->P:LTest;
-    const-wide/16 v8, 0x0
-    const/4 v11, 0x0
-    invoke-direct/range {v4 .. v11}, LTest;-><init>(ILTest;LTest;JLTest;Ljava/util/Map;)V
-    move-object v14, v4
-    goto/16 :goto_2c
-    :cond_5b6
-    if-nez v13, :cond_60a
-    const/4 v4, 0x0
-    :goto_5b9
-    new-instance v16, LTest;
-    add-int/lit8 v4, v4, 0x1
-    move-object/from16 v0, v16
-    invoke-direct {v0, v4}, LTest;-><init>(I)V
-    new-instance v11, LTest;
-    const/4 v13, 0x0
-    invoke-direct/range {v11 .. v16}, LTest;-><init>(LTest;Ljava/util/Map;JLTest;)V
-    iget-wide v0, v10, LTest;->i:J
-    move-wide/from16 v18, v0
-    const-wide/16 v20, 0x7530
-    move-object/from16 v17, p2
-    move-object/from16 v22, v11
-    invoke-virtual/range {v17 .. v22}, LTest;->a(JJLTest;)V
-    new-instance v6, LTest;
-    invoke-virtual/range {v16 .. v16}, LTest;->a()D
-    move-result-wide v4
-    invoke-static {v4, v5}, LTest;->a(D)I
-    move-result v4
-    invoke-virtual/range {v16 .. v16}, LTest;->b()D
-    move-result-wide v8
-    invoke-static {v8, v9}, LTest;->a(D)I
-    move-result v5
-    invoke-virtual/range {v16 .. v16}, LTest;->c()I
-    move-result v7
-    invoke-static {v7}, LTest;->b(I)I
-    move-result v7
-    move-object/from16 v0, v16
-    iget v8, v0, LTest;->d:I
-    invoke-direct {v6, v4, v5, v7, v8}, LTest;-><init>(IIII)V
-    invoke-static {v6}, LTest;->c(LTest;)Z
-    move-result v4
-    if-eqz v4, :cond_60f
-    new-instance v4, LTest;
-    const/4 v5, 0x1
-    sget-object v7, LTest;->P:LTest;
-    iget-wide v8, v10, LTest;->i:J
-    const/4 v11, 0x0
-    invoke-direct/range {v4 .. v11}, LTest;-><init>(ILTest;LTest;JLTest;Ljava/util/Map;)V
-    move-object v14, v4
-    goto/16 :goto_2c
-    :cond_60a
-    invoke-interface {v13}, Ljava/util/LTest;->size()I
-    move-result v4
-    goto :goto_5b9
-    :cond_60f
-    new-instance v4, LTest;
-    const/4 v5, 0x0
-    const/4 v6, 0x0
-    sget-object v7, LTest;->P:LTest;
-    const-wide/16 v8, 0x0
-    const/4 v11, 0x0
-    invoke-direct/range {v4 .. v11}, LTest;-><init>(ILTest;LTest;JLTest;Ljava/util/Map;)V
-    move-object v14, v4
-    goto/16 :goto_2c
-    :cond_61e
-    iget-object v4, v8, LTest;->a:LTest;
-    iget-object v5, v4, LTest;->a:LTest;
-    iget-object v4, v4, LTest;->a:LTest;
-    iget v6, v5, LTest;->d:I
-    add-int/lit8 v6, v6, 0x1
-    iput v6, v5, LTest;->d:I
-    invoke-virtual {v4}, LTest;->c()J
-    move-result-wide v6
-    iput-wide v6, v5, LTest;->f:J
-    move-object/from16 v0, p1
-    invoke-virtual {v8, v0}, LTest;->a(LTest;)LTest;
-    move-result-object v6
-    iget-object v4, v8, LTest;->a:LTest;
-    invoke-virtual {v4}, LTest;->a()V
-    iget-object v4, v8, LTest;->a:LTest;
-    iget-object v5, v4, LTest;->a:LTest;
-    invoke-virtual {v5}, LTest;->b()J
-    move-result-wide v10
-    iget-wide v12, v4, LTest;->m:J
-    sub-long v12, v10, v12
-    iget-wide v0, v4, LTest;->k:J
-    move-wide/from16 v16, v0
-    cmp-long v5, v12, v16
-    if-lez v5, :cond_65f
-    iget-wide v12, v4, LTest;->l:J
-    sub-long v12, v10, v12
-    iget-object v5, v4, LTest;->a:LTest;
-    invoke-virtual {v5, v12, v13}, LTest;->a(J)V
-    iget-object v5, v4, LTest;->a:LTest;
-    invoke-virtual {v5, v12, v13}, LTest;->a(J)V
-    iput-wide v10, v4, LTest;->m:J
-    :cond_65f
-    iget-object v5, v4, LTest;->a:LTest;
-    invoke-virtual {v5}, LTest;->a()V
-    iget-object v5, v4, LTest;->a:LTest;
-    invoke-virtual {v5}, LTest;->a()V
-    iget-object v5, v4, LTest;->a:LTest;
-    invoke-virtual {v5}, LTest;->a()V
-    iget-object v4, v4, LTest;->a:LTest;
-    invoke-virtual {v4}, LTest;->a()V
-    iget-object v4, v8, LTest;->a:LTest;
-    iget-object v5, v4, LTest;->a:LTest;
-    iget-object v4, v4, LTest;->a:LTest;
-    iget-wide v10, v5, LTest;->f:J
-    const-wide/16 v12, -0x1
-    cmp-long v7, v10, v12
-    if-eqz v7, :cond_698
-    invoke-virtual {v4}, LTest;->c()J
-    move-result-wide v10
-    iget-wide v12, v5, LTest;->f:J
-    sub-long/2addr v10, v12
-    const-wide/16 v12, -0x1
-    iput-wide v12, v5, LTest;->f:J
-    const-wide/16 v12, 0x0
-    cmp-long v4, v10, v12
-    if-ltz v4, :cond_698
-    const-wide/16 v12, 0x7530
-    cmp-long v4, v10, v12
-    if-lez v4, :cond_6b0
-    :cond_698
-    :goto_698
-    const/4 v4, 0x0
-    if-eqz v6, :cond_53
-    new-instance v4, LTest;
-    const/4 v5, 0x4
-    sget-object v7, LTest;->P:LTest;
-    iget-object v8, v8, LTest;->a:LTest;
-    iget-object v8, v8, LTest;->a:LTest;
-    invoke-virtual {v8}, LTest;->c()J
-    move-result-wide v8
-    const/4 v11, 0x0
-    move-object/from16 v10, p1
-    invoke-direct/range {v4 .. v11}, LTest;-><init>(ILTest;LTest;JLTest;Ljava/util/Map;)V
-    goto/16 :goto_53
-    :cond_6b0
-    long-to-int v4, v10
-    iput v4, v5, LTest;->a:I
-    if-eqz v6, :cond_6c0
-    iget v4, v5, LTest;->e:I
-    add-int/lit8 v4, v4, 0x1
-    iput v4, v5, LTest;->e:I
-    iget v4, v5, LTest;->a:I
-    iput v4, v5, LTest;->b:I
-    goto :goto_698
-    :cond_6c0
-    iget v4, v5, LTest;->a:I
-    iput v4, v5, LTest;->c:I
-    goto :goto_698
-    :cond_6c5
-    const/4 v4, 0x0
-    goto/16 :goto_53
-    :cond_6c8
-    move-object/from16 v0, p0
-    iget-object v4, v0, LTestObject;->a:LTest;
-    invoke-virtual {v4}, LTest;->b()Z
-    move-result v5
-    if-eqz v5, :cond_91d
-    iget-object v8, v4, LTest;->a:LTest;
-    iget-object v4, v8, LTest;->a:LTest;
-    iget-object v5, v4, LTest;->a:LTest;
-    iget-boolean v4, v5, LTest;->d:Z
-    if-nez v4, :cond_716
-    sget-object v4, LTest;->P:LTest;
-    :goto_6de
-    iput-object v4, v8, LTest;->a:LTest;
-    iget-object v4, v8, LTest;->a:LTest;
-    iget-object v5, v8, LTest;->a:LTest;
-    iget-object v5, v5, LTest;->a:LTest;
-    invoke-virtual {v5}, LTest;->b()J
-    move-result-wide v6
-    invoke-virtual {v4, v6, v7}, LTest;->a(J)V
-    if-nez p1, :cond_721
-    iget-object v4, v8, LTest;->a:LTest;
-    const/4 v5, 0x3
-    iget-object v6, v8, LTest;->a:LTest;
-    iget-object v6, v6, LTest;->a:LTest;
-    invoke-virtual {v6}, LTest;->b()J
-    move-result-wide v6
-    invoke-virtual {v4, v5, v6, v7}, LTest;->a(IJ)V
-    const/4 v4, 0x0
-    :goto_6fe
-    if-eqz v4, :cond_920
-    iget-object v5, v4, LTest;->a:LTest;
-    sget-object v6, LTest;->P:LTest;
-    if-ne v5, v6, :cond_9cc
-    move-object/from16 v0, p0
-    iget-object v5, v0, LTestObject;->a:LTest;
-    move-object/from16 v0, p1
-    move-object/from16 v1, p4
-    move-object/from16 v2, p3
-    invoke-virtual {v5, v0, v1, v2}, LTest;->a(LTest;LTest;LTest;)LTest;
-    move-object v12, v4
-    goto/16 :goto_56
-    :cond_716
-    new-instance v4, LTest;
-    invoke-direct {v4}, LTest;-><init>()V
-    iget-object v5, v5, LTest;->a:LTest;
-    invoke-virtual {v5, v4}, LTest;->a(Ljava/lang/Object;)Ljava/lang/Object;
-    goto :goto_6de
-    :cond_721
-    iget-object v4, v8, LTest;->a:LTest;
-    move-object/from16 v0, p1
-    invoke-virtual {v4, v0}, LTest;->a(LTest;)V
-    iget-object v4, v8, LTest;->a:LTest;
-    iget-object v5, v4, LTest;->a:LTest;
-    iget-object v4, v4, LTest;->a:LTest;
-    const-string v6, ""
-    invoke-virtual {v5, v6}, LTest;->a(Ljava/lang/String;)LTest;
-    move-result-object v5
-    iget v6, v5, LTest;->c:I
-    add-int/lit8 v6, v6, 0x1
-    iput v6, v5, LTest;->c:I
-    invoke-virtual {v4}, LTest;->c()J
-    move-result-wide v6
-    iput-wide v6, v5, LTest;->b:J
-    iget-object v4, v8, LTest;->a:LTest;
-    iget-object v5, v4, LTest;->a:LTest;
-    iget-object v4, v4, LTest;->a:LTest;
-    const-string v6, ""
-    invoke-virtual {v5, v6}, LTest;->a(Ljava/lang/String;)LTest;
-    move-result-object v5
-    iget v6, v5, LTest;->c:I
-    add-int/lit8 v6, v6, 0x1
-    iput v6, v5, LTest;->c:I
-    invoke-virtual {v4}, LTest;->c()J
-    move-result-wide v6
-    iput-wide v6, v5, LTest;->b:J
-    move-object/from16 v0, p1
-    invoke-virtual {v8, v0}, LTest;->a(LTest;)Z
-    move-result v4
-    iget-object v5, v8, LTest;->a:LTest;
-    iget-object v6, v5, LTest;->a:LTest;
-    iget-object v5, v5, LTest;->a:LTest;
-    const-string v7, ""
-    invoke-virtual {v6, v7}, LTest;->a(Ljava/lang/String;)LTest;
-    move-result-object v6
-    iget-wide v10, v6, LTest;->b:J
-    const-wide/16 v12, -0x1
-    cmp-long v7, v10, v12
-    if-eqz v7, :cond_789
-    invoke-virtual {v5}, LTest;->c()J
-    move-result-wide v10
-    iget-wide v12, v6, LTest;->b:J
-    sub-long/2addr v10, v12
-    const-wide/16 v12, -0x1
-    iput-wide v12, v6, LTest;->b:J
-    const-wide/16 v12, 0x0
-    cmp-long v5, v10, v12
-    if-ltz v5, :cond_789
-    const-wide/16 v12, 0x7530
-    cmp-long v5, v10, v12
-    if-lez v5, :cond_83e
-    :cond_789
-    :goto_789
-    if-eqz v4, :cond_793
-    iget-object v4, v8, LTest;->a:LTest;
-    invoke-virtual {v4}, LTest;->c()Z
-    move-result v4
-    if-eqz v4, :cond_843
-    :cond_793
-    iget-object v4, v8, LTest;->a:LTest;
-    invoke-virtual {v4}, LTest;->a()V
-    const/4 v6, 0x0
-    :goto_799
-    iget-object v4, v8, LTest;->a:LTest;
-    const/4 v5, 0x0
-    invoke-virtual {v4, v5}, LTest;->a(Ljava/util/LTest;)V
-    iget-object v4, v8, LTest;->a:LTest;
-    invoke-virtual {v4}, LTest;->a()V
-    iget-object v4, v8, LTest;->a:LTest;
-    iget-object v5, v4, LTest;->a:LTest;
-    invoke-virtual {v5}, LTest;->b()J
-    move-result-wide v10
-    iget-wide v12, v4, LTest;->q:J
-    sub-long v12, v10, v12
-    iget-wide v0, v4, LTest;->o:J
-    move-wide/from16 v16, v0
-    cmp-long v5, v12, v16
-    if-lez v5, :cond_7c3
-    iget-wide v12, v4, LTest;->p:J
-    sub-long v12, v10, v12
-    iget-object v5, v4, LTest;->a:LTest;
-    invoke-virtual {v5, v12, v13}, LTest;->a(J)V
-    iput-wide v10, v4, LTest;->q:J
-    :cond_7c3
-    iget-wide v12, v4, LTest;->s:J
-    sub-long v12, v10, v12
-    iget-wide v0, v4, LTest;->r:J
-    move-wide/from16 v16, v0
-    cmp-long v5, v12, v16
-    if-lez v5, :cond_7d6
-    iget-object v5, v4, LTest;->a:LTest;
-    invoke-virtual {v5}, LTest;->a()V
-    iput-wide v10, v4, LTest;->s:J
-    :cond_7d6
-    iget-object v4, v4, LTest;->a:LTest;
-    invoke-virtual {v4}, LTest;->a()V
-    iget-object v4, v8, LTest;->a:LTest;
-    iget-object v5, v4, LTest;->a:LTest;
-    iget-object v4, v4, LTest;->a:LTest;
-    const-string v7, ""
-    invoke-virtual {v5, v7}, LTest;->a(Ljava/lang/String;)LTest;
-    move-result-object v7
-    iget-wide v10, v7, LTest;->b:J
-    const-wide/16 v12, -0x1
-    cmp-long v9, v10, v12
-    if-eqz v9, :cond_806
-    invoke-virtual {v4}, LTest;->c()J
-    move-result-wide v10
-    iget-wide v12, v7, LTest;->b:J
-    sub-long/2addr v10, v12
-    const-wide/16 v12, -0x1
-    iput-wide v12, v7, LTest;->b:J
-    const-wide/16 v12, 0x0
-    cmp-long v4, v10, v12
-    if-ltz v4, :cond_806
-    const-wide/16 v12, 0x7530
-    cmp-long v4, v10, v12
-    if-lez v4, :cond_8d7
-    :cond_806
-    :goto_806
-    if-eqz v6, :cond_8dc
-    iget v4, v5, LTest;->f:I
-    add-int/lit8 v4, v4, 0x1
-    iput v4, v5, LTest;->f:I
-    iget v4, v7, LTest;->a:I
-    iput v4, v5, LTest;->g:I
-    :goto_812
-    iget-object v4, v8, LTest;->a:LTest;
-    invoke-virtual {v4}, LTest;->c()Z
-    move-result v4
-    if-eqz v4, :cond_8e2
-    iget-object v4, v8, LTest;->a:LTest;
-    const/4 v5, 0x7
-    iget-object v6, v8, LTest;->a:LTest;
-    iget-object v6, v6, LTest;->a:LTest;
-    invoke-virtual {v6}, LTest;->b()J
-    move-result-wide v6
-    invoke-virtual {v4, v5, v6, v7}, LTest;->a(IJ)V
-    new-instance v4, LTest;
-    const/4 v5, 0x0
-    const/4 v6, 0x0
-    sget-object v7, LTest;->P:LTest;
-    iget-object v8, v8, LTest;->a:LTest;
-    iget-object v8, v8, LTest;->a:LTest;
-    invoke-virtual {v8}, LTest;->c()J
-    move-result-wide v8
-    const/4 v11, 0x0
-    move-object/from16 v10, p1
-    invoke-direct/range {v4 .. v11}, LTest;-><init>(ILTest;LTest;JLTest;Ljava/util/Map;)V
-    goto/16 :goto_6fe
-    :cond_83e
-    long-to-int v5, v10
-    iput v5, v6, LTest;->a:I
-    goto/16 :goto_789
-    :cond_843
-    iget-object v4, v8, LTest;->a:LTest;
-    iget-object v5, v4, LTest;->a:LTest;
-    iget-object v4, v4, LTest;->a:LTest;
-    const-string v6, ""
-    invoke-virtual {v5, v6}, LTest;->a(Ljava/lang/String;)LTest;
-    move-result-object v5
-    iget v6, v5, LTest;->c:I
-    add-int/lit8 v6, v6, 0x1
-    iput v6, v5, LTest;->c:I
-    invoke-virtual {v4}, LTest;->c()J
-    move-result-wide v6
-    iput-wide v6, v5, LTest;->b:J
-    iget-object v4, v8, LTest;->a:LTest;
-    invoke-virtual {v4}, LTest;->b()LTest;
-    move-result-object v4
-    iput-object v4, v8, LTest;->a:LTest;
-    iget-object v4, v8, LTest;->a:LTest;
-    iget-object v5, v4, LTest;->a:LTest;
-    iget-object v4, v4, LTest;->a:LTest;
-    const-string v6, ""
-    invoke-virtual {v5, v6}, LTest;->a(Ljava/lang/String;)LTest;
-    move-result-object v5
-    iget-wide v6, v5, LTest;->b:J
-    const-wide/16 v10, -0x1
-    cmp-long v6, v6, v10
-    if-eqz v6, :cond_88e
-    invoke-virtual {v4}, LTest;->c()J
-    move-result-wide v6
-    iget-wide v10, v5, LTest;->b:J
-    sub-long/2addr v6, v10
-    const-wide/16 v10, -0x1
-    iput-wide v10, v5, LTest;->b:J
-    const-wide/16 v10, 0x0
-    cmp-long v4, v6, v10
-    if-ltz v4, :cond_88e
-    const-wide/16 v10, 0x7530
-    cmp-long v4, v6, v10
-    if-lez v4, :cond_8a7
-    :cond_88e
-    :goto_88e
-    iget-object v4, v8, LTest;->a:LTest;
-    invoke-virtual {v4}, LTest;->b()Z
-    move-result v4
-    if-nez v4, :cond_8ab
-    iget-object v4, v8, LTest;->a:LTest;
-    const/4 v5, 0x4
-    iget-object v6, v8, LTest;->a:LTest;
-    iget-object v6, v6, LTest;->a:LTest;
-    invoke-virtual {v6}, LTest;->b()J
-    move-result-wide v6
-    invoke-virtual {v4, v5, v6, v7}, LTest;->a(IJ)V
-    const/4 v6, 0x0
-    goto/16 :goto_799
-    :cond_8a7
-    long-to-int v4, v6
-    iput v4, v5, LTest;->a:I
-    goto :goto_88e
-    :cond_8ab
-    iget-object v4, v8, LTest;->a:LTest;
-    iget-wide v4, v4, LTest;->a:J
-    const/4 v6, 0x2
-    new-array v6, v6, [I
-    invoke-static {v4, v5, v6}, LTest;->a(J[I)[I
-    move-result-object v4
-    iget-object v5, v8, LTest;->a:LTest;
-    iget-object v6, v8, LTest;->a:LTest;
-    iget-object v6, v6, LTest;->a:LTest;
-    iget v6, v6, LTest;->b:I
-    iget-object v7, v8, LTest;->a:LTest;
-    iget-object v7, v7, LTest;->a:LTest;
-    iget v7, v7, LTest;->b:I
-    invoke-virtual {v5, v6, v7, v4}, LTest;->a(II[I)I
-    move-result v5
-    new-instance v6, LTest;
-    const/4 v7, 0x0
-    aget v7, v4, v7
-    const/4 v9, 0x1
-    aget v4, v4, v9
-    const/16 v9, 0x6d
-    invoke-direct {v6, v7, v4, v5, v9}, LTest;-><init>(IIII)V
-    goto/16 :goto_799
-    :cond_8d7
-    long-to-int v4, v10
-    iput v4, v7, LTest;->a:I
-    goto/16 :goto_806
-    :cond_8dc
-    iget v4, v7, LTest;->a:I
-    iput v4, v5, LTest;->h:I
-    goto/16 :goto_812
-    :cond_8e2
-    if-nez v6, :cond_8f5
-    iget-object v4, v8, LTest;->a:LTest;
-    const/4 v5, 0x5
-    iget-object v6, v8, LTest;->a:LTest;
-    iget-object v6, v6, LTest;->a:LTest;
-    invoke-virtual {v6}, LTest;->b()J
-    move-result-wide v6
-    invoke-virtual {v4, v5, v6, v7}, LTest;->a(IJ)V
-    const/4 v4, 0x0
-    goto/16 :goto_6fe
-    :cond_8f5
-    iget-object v4, v8, LTest;->a:LTest;
-    invoke-virtual {v4, v6}, LTest;->a(LTest;)V
-    iget-object v4, v8, LTest;->a:LTest;
-    const/4 v5, 0x1
-    iget-object v7, v8, LTest;->a:LTest;
-    iget-object v7, v7, LTest;->a:LTest;
-    invoke-virtual {v7}, LTest;->b()J
-    move-result-wide v10
-    invoke-virtual {v4, v5, v10, v11}, LTest;->a(IJ)V
-    new-instance v4, LTest;
-    const/4 v5, 0x5
-    sget-object v7, LTest;->P:LTest;
-    iget-object v8, v8, LTest;->a:LTest;
-    iget-object v8, v8, LTest;->a:LTest;
-    invoke-virtual {v8}, LTest;->c()J
-    move-result-wide v8
-    const/4 v11, 0x0
-    move-object/from16 v10, p1
-    invoke-direct/range {v4 .. v11}, LTest;-><init>(ILTest;LTest;JLTest;Ljava/util/Map;)V
-    goto/16 :goto_6fe
-    :cond_91d
-    const/4 v4, 0x0
-    goto/16 :goto_6fe
-    :cond_920
-    move-object/from16 v0, p0
-    iget-object v4, v0, LTestObject;->a:LTest;
-    move-object/from16 v0, p1
-    move-object/from16 v1, p4
-    move-object/from16 v2, p3
-    invoke-virtual {v4, v0, v1, v2}, LTest;->a(LTest;LTest;LTest;)LTest;
-    move-result-object v4
-    move-object v12, v4
-    goto/16 :goto_56
-    :cond_931
-    const/4 v4, 0x0
-    goto/16 :goto_5d
-    :cond_934
-    const/4 v5, 0x0
-    goto/16 :goto_64
-    :cond_937
-    if-nez v4, :cond_93c
-    move-object v13, v14
-    goto/16 :goto_6a
-    :cond_93c
-    if-eqz v5, :cond_973
-    iget-object v5, v12, LTest;->a:LTest;
-    iget-object v6, v14, LTest;->a:LTest;
-    invoke-static {v5, v6}, LTest;->a(LTest;LTest;)I
-    move-result v4
-    iget v7, v5, LTest;->e:I
-    iget v8, v6, LTest;->e:I
-    add-int/2addr v7, v8
-    const v8, 0x3567e0
-    invoke-static {v7, v8}, Ljava/lang/Math;->max(II)I
-    move-result v7
-    div-int/lit16 v7, v7, 0x3e8
-    if-gt v4, v7, :cond_965
-    const/4 v4, 0x1
-    :goto_957
-    if-eqz v4, :cond_969
-    iget v4, v5, LTest;->e:I
-    iget v5, v6, LTest;->e:I
-    if-le v4, v5, :cond_967
-    const/4 v4, 0x1
-    :goto_960
-    if-eqz v4, :cond_973
-    move-object v13, v14
-    goto/16 :goto_6a
-    :cond_965
-    const/4 v4, 0x0
-    goto :goto_957
-    :cond_967
-    const/4 v4, 0x0
-    goto :goto_960
-    :cond_969
-    iget v4, v5, LTest;->f:I
-    iget v5, v6, LTest;->f:I
-    if-ge v4, v5, :cond_971
-    const/4 v4, 0x1
-    goto :goto_960
-    :cond_971
-    const/4 v4, 0x0
-    goto :goto_960
-    :cond_973
-    move-object v13, v12
-    goto/16 :goto_6a
-    :cond_976
-    const/4 v4, 0x1
-    move v11, v4
-    move v15, v5
-    goto/16 :goto_7b
-    :cond_97b
-    const/4 v4, 0x0
-    goto/16 :goto_84
-    :pswitch_97e
-    const-string v7, ""
-    goto/16 :goto_8c
-    :pswitch_982
-    const-string v7, ""
-    goto/16 :goto_8c
-    :pswitch_986
-    const-string v7, ""
-    goto/16 :goto_8c
-    :pswitch_98a
-    const-string v7, ""
-    goto/16 :goto_8c
-    :cond_98e
-    const/4 v4, 0x0
-    goto/16 :goto_a3
-    :pswitch_991
-    const-string v7, ""
-    goto/16 :goto_ab
-    :pswitch_995
-    const-string v7, ""
-    goto/16 :goto_ab
-    :cond_999
-    if-eqz v11, :cond_9ad
-    move-object/from16 v0, p0
-    iget-object v4, v0, LTestObject;->a:LTest;
-    const-string v5, ""
-    const-string v6, ""
-    const-string v7, ""
-    const-wide/16 v8, 0x1
-    const/4 v10, 0x1
-    invoke-virtual/range {v4 .. v10}, LTest;->a(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;JZ)V
-    goto/16 :goto_cd
-    :cond_9ad
-    move-object/from16 v0, p0
-    iget-object v4, v0, LTestObject;->a:LTest;
-    const-string v5, ""
-    const-string v6, ""
-    const-string v7, ""
-    const-wide/16 v8, 0x1
-    const/4 v10, 0x1
-    invoke-virtual/range {v4 .. v10}, LTest;->a(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;JZ)V
-    goto/16 :goto_cd
-    :cond_9bf
-    const-wide/16 v8, 0x0
-    move-wide/from16 v16, v8
-    goto/16 :goto_149
-    :cond_9c5
-    const/4 v4, 0x0
-    goto/16 :goto_217
-    :cond_9c8
-    move v11, v4
-    move v15, v5
-    goto/16 :goto_7b
-    :cond_9cc
-    move-object v12, v4
-    goto/16 :goto_56
-    :cond_9cf
-    move-object v13, v4
-    goto/16 :goto_17
-    :pswitch_data_9d2
-    .packed-switch 0x1
-        :pswitch_97e
-        :pswitch_982
-        :pswitch_8c
-        :pswitch_986
-        :pswitch_98a
-    .end packed-switch
-    :pswitch_data_9e0
-    .packed-switch 0x1
-        :pswitch_991
-        :pswitch_995
-    .end packed-switch
-.end method
\ No newline at end of file
diff --git a/src/test/smali/chain-of-loops/Test.java b/src/test/smali/chain-of-loops/Test.java
deleted file mode 100644
index 77d335d..0000000
--- a/src/test/smali/chain-of-loops/Test.java
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-public class Test {
-  public int b(int i, String s) {
-    throw new RuntimeException("b(ILjava/lang/String;)");
-  }
-
-  public int b(Test t) {
-    throw new RuntimeException("b(LTest;)");
-  }
-
-  public static int f(int i0, int i1) {
-    throw new RuntimeException("f(II)");
-  }
-
-  public static void main(String[] args) {
-    try {
-      new TestObject().method();
-    } catch (Exception e) {
-      System.out.println(e);
-    }
-  }
-}
diff --git a/src/test/smali/chain-of-loops/TestObject.java b/src/test/smali/chain-of-loops/TestObject.java
deleted file mode 100644
index 85cb78a..0000000
--- a/src/test/smali/chain-of-loops/TestObject.java
+++ /dev/null
@@ -1,9 +0,0 @@
-// Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-public class TestObject {
-  public final int method() {
-    return 0;
-  }
-}
diff --git a/src/test/smali/chain-of-loops/TestObject.smali b/src/test/smali/chain-of-loops/TestObject.smali
deleted file mode 100644
index ff971cb..0000000
--- a/src/test/smali/chain-of-loops/TestObject.smali
+++ /dev/null
@@ -1,1034 +0,0 @@
-# Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-.class public final LTestObject;
-.super Ljava/lang/Object;
-
-.field public i:I
-.field public e:Ljava/lang/String;
-.field public z:Ljava/lang/String;
-.field public f:LTest;
-.field public a:[LTest;
-
-.method public constructor <init>()V
-    .registers 1
-    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
-    return-void
-.end method
-
-.method public final method()I
-    .registers 7
-    .prologue
-    const/4 v5, 0x1
-    const/4 v1, 0x0
-    invoke-virtual {p0}, LTestObject;->method2()I
-    move-result v0
-    iget-object v2, p0, LTestObject;->e:Ljava/lang/String;
-    if-eqz v2, :cond_1b
-    iget-object v2, p0, LTestObject;->e:Ljava/lang/String;
-    const-string v3, ""
-    invoke-virtual {v2, v3}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-    move-result v2
-    if-nez v2, :cond_1b
-    iget-object v2, p0, LTestObject;->e:Ljava/lang/String;
-    invoke-static {v5, v2}, LTest;->b(ILjava/lang/String;)I
-    move-result v2
-    add-int/2addr v0, v2
-    :cond_1b
-    iget-object v2, p0, LTestObject;->f:LTest;
-    if-eqz v2, :cond_27
-    const/4 v2, 0x2
-    iget-object v3, p0, LTestObject;->f:LTest;
-    invoke-static {v2, v3}, LTest;->d(ILTest;)I
-    move-result v2
-    add-int/2addr v0, v2
-    :cond_27
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    if-eqz v2, :cond_47
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    array-length v2, v2
-    if-lez v2, :cond_47
-    move v2, v0
-    move v0, v1
-    :goto_32
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    array-length v3, v3
-    if-ge v0, v3, :cond_46
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    aget-object v3, v3, v0
-    if-eqz v3, :cond_43
-    const/4 v4, 0x3
-    invoke-static {v4, v3}, LTest;->d(ILTest;)I
-    move-result v3
-    add-int/2addr v2, v3
-    :cond_43
-    add-int/lit8 v0, v0, 0x1
-    goto :goto_32
-    :cond_46
-    move v0, v2
-    :cond_47
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    if-eqz v2, :cond_67
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    array-length v2, v2
-    if-lez v2, :cond_67
-    move v2, v0
-    move v0, v1
-    :goto_52
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    array-length v3, v3
-    if-ge v0, v3, :cond_66
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    aget-object v3, v3, v0
-    if-eqz v3, :cond_63
-    const/4 v4, 0x4
-    invoke-static {v4, v3}, LTest;->d(ILTest;)I
-    move-result v3
-    add-int/2addr v2, v3
-    :cond_63
-    add-int/lit8 v0, v0, 0x1
-    goto :goto_52
-    :cond_66
-    move v0, v2
-    :cond_67
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    if-eqz v2, :cond_87
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    array-length v2, v2
-    if-lez v2, :cond_87
-    move v2, v0
-    move v0, v1
-    :goto_72
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    array-length v3, v3
-    if-ge v0, v3, :cond_86
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    aget-object v3, v3, v0
-    if-eqz v3, :cond_83
-    const/4 v4, 0x5
-    invoke-static {v4, v3}, LTest;->d(ILTest;)I
-    move-result v3
-    add-int/2addr v2, v3
-    :cond_83
-    add-int/lit8 v0, v0, 0x1
-    goto :goto_72
-    :cond_86
-    move v0, v2
-    :cond_87
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    if-eqz v2, :cond_a7
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    array-length v2, v2
-    if-lez v2, :cond_a7
-    move v2, v0
-    move v0, v1
-    :goto_92
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    array-length v3, v3
-    if-ge v0, v3, :cond_a6
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    aget-object v3, v3, v0
-    if-eqz v3, :cond_a3
-    const/4 v4, 0x6
-    invoke-static {v4, v3}, LTest;->d(ILTest;)I
-    move-result v3
-    add-int/2addr v2, v3
-    :cond_a3
-    add-int/lit8 v0, v0, 0x1
-    goto :goto_92
-    :cond_a6
-    move v0, v2
-    :cond_a7
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    if-eqz v2, :cond_c7
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    array-length v2, v2
-    if-lez v2, :cond_c7
-    move v2, v0
-    move v0, v1
-    :goto_b2
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    array-length v3, v3
-    if-ge v0, v3, :cond_c6
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    aget-object v3, v3, v0
-    if-eqz v3, :cond_c3
-    const/4 v4, 0x7
-    invoke-static {v4, v3}, LTest;->d(ILTest;)I
-    move-result v3
-    add-int/2addr v2, v3
-    :cond_c3
-    add-int/lit8 v0, v0, 0x1
-    goto :goto_b2
-    :cond_c6
-    move v0, v2
-    :cond_c7
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    if-eqz v2, :cond_e8
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    array-length v2, v2
-    if-lez v2, :cond_e8
-    move v2, v0
-    move v0, v1
-    :goto_d2
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    array-length v3, v3
-    if-ge v0, v3, :cond_e7
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    aget-object v3, v3, v0
-    if-eqz v3, :cond_e4
-    const/16 v4, 0x8
-    invoke-static {v4, v3}, LTest;->d(ILTest;)I
-    move-result v3
-    add-int/2addr v2, v3
-    :cond_e4
-    add-int/lit8 v0, v0, 0x1
-    goto :goto_d2
-    :cond_e7
-    move v0, v2
-    :cond_e8
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    if-eqz v2, :cond_109
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    array-length v2, v2
-    if-lez v2, :cond_109
-    move v2, v0
-    move v0, v1
-    :goto_f3
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    array-length v3, v3
-    if-ge v0, v3, :cond_108
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    aget-object v3, v3, v0
-    if-eqz v3, :cond_105
-    const/16 v4, 0x9
-    invoke-static {v4, v3}, LTest;->d(ILTest;)I
-    move-result v3
-    add-int/2addr v2, v3
-    :cond_105
-    add-int/lit8 v0, v0, 0x1
-    goto :goto_f3
-    :cond_108
-    move v0, v2
-    :cond_109
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    if-eqz v2, :cond_12a
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    array-length v2, v2
-    if-lez v2, :cond_12a
-    move v2, v0
-    move v0, v1
-    :goto_114
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    array-length v3, v3
-    if-ge v0, v3, :cond_129
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    aget-object v3, v3, v0
-    if-eqz v3, :cond_126
-    const/16 v4, 0xa
-    invoke-static {v4, v3}, LTest;->d(ILTest;)I
-    move-result v3
-    add-int/2addr v2, v3
-    :cond_126
-    add-int/lit8 v0, v0, 0x1
-    goto :goto_114
-    :cond_129
-    move v0, v2
-    :cond_12a
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    if-eqz v2, :cond_14b
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    array-length v2, v2
-    if-lez v2, :cond_14b
-    move v2, v0
-    move v0, v1
-    :goto_135
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    array-length v3, v3
-    if-ge v0, v3, :cond_14a
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    aget-object v3, v3, v0
-    if-eqz v3, :cond_147
-    const/16 v4, 0xb
-    invoke-static {v4, v3}, LTest;->d(ILTest;)I
-    move-result v3
-    add-int/2addr v2, v3
-    :cond_147
-    add-int/lit8 v0, v0, 0x1
-    goto :goto_135
-    :cond_14a
-    move v0, v2
-    :cond_14b
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    if-eqz v2, :cond_16c
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    array-length v2, v2
-    if-lez v2, :cond_16c
-    move v2, v0
-    move v0, v1
-    :goto_156
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    array-length v3, v3
-    if-ge v0, v3, :cond_16b
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    aget-object v3, v3, v0
-    if-eqz v3, :cond_168
-    const/16 v4, 0xc
-    invoke-static {v4, v3}, LTest;->d(ILTest;)I
-    move-result v3
-    add-int/2addr v2, v3
-    :cond_168
-    add-int/lit8 v0, v0, 0x1
-    goto :goto_156
-    :cond_16b
-    move v0, v2
-    :cond_16c
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    if-eqz v2, :cond_18d
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    array-length v2, v2
-    if-lez v2, :cond_18d
-    move v2, v0
-    move v0, v1
-    :goto_177
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    array-length v3, v3
-    if-ge v0, v3, :cond_18c
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    aget-object v3, v3, v0
-    if-eqz v3, :cond_189
-    const/16 v4, 0xd
-    invoke-static {v4, v3}, LTest;->d(ILTest;)I
-    move-result v3
-    add-int/2addr v2, v3
-    :cond_189
-    add-int/lit8 v0, v0, 0x1
-    goto :goto_177
-    :cond_18c
-    move v0, v2
-    :cond_18d
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    if-eqz v2, :cond_1ae
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    array-length v2, v2
-    if-lez v2, :cond_1ae
-    move v2, v0
-    move v0, v1
-    :goto_198
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    array-length v3, v3
-    if-ge v0, v3, :cond_1ad
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    aget-object v3, v3, v0
-    if-eqz v3, :cond_1aa
-    const/16 v4, 0xe
-    invoke-static {v4, v3}, LTest;->d(ILTest;)I
-    move-result v3
-    add-int/2addr v2, v3
-    :cond_1aa
-    add-int/lit8 v0, v0, 0x1
-    goto :goto_198
-    :cond_1ad
-    move v0, v2
-    :cond_1ae
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    if-eqz v2, :cond_1cf
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    array-length v2, v2
-    if-lez v2, :cond_1cf
-    move v2, v0
-    move v0, v1
-    :goto_1b9
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    array-length v3, v3
-    if-ge v0, v3, :cond_1ce
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    aget-object v3, v3, v0
-    if-eqz v3, :cond_1cb
-    const/16 v4, 0xf
-    invoke-static {v4, v3}, LTest;->d(ILTest;)I
-    move-result v3
-    add-int/2addr v2, v3
-    :cond_1cb
-    add-int/lit8 v0, v0, 0x1
-    goto :goto_1b9
-    :cond_1ce
-    move v0, v2
-    :cond_1cf
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    if-eqz v2, :cond_1f0
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    array-length v2, v2
-    if-lez v2, :cond_1f0
-    move v2, v0
-    move v0, v1
-    :goto_1da
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    array-length v3, v3
-    if-ge v0, v3, :cond_1ef
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    aget-object v3, v3, v0
-    if-eqz v3, :cond_1ec
-    const/16 v4, 0x10
-    invoke-static {v4, v3}, LTest;->d(ILTest;)I
-    move-result v3
-    add-int/2addr v2, v3
-    :cond_1ec
-    add-int/lit8 v0, v0, 0x1
-    goto :goto_1da
-    :cond_1ef
-    move v0, v2
-    :cond_1f0
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    if-eqz v2, :cond_211
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    array-length v2, v2
-    if-lez v2, :cond_211
-    move v2, v0
-    move v0, v1
-    :goto_1fb
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    array-length v3, v3
-    if-ge v0, v3, :cond_210
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    aget-object v3, v3, v0
-    if-eqz v3, :cond_20d
-    const/16 v4, 0x11
-    invoke-static {v4, v3}, LTest;->d(ILTest;)I
-    move-result v3
-    add-int/2addr v2, v3
-    :cond_20d
-    add-int/lit8 v0, v0, 0x1
-    goto :goto_1fb
-    :cond_210
-    move v0, v2
-    :cond_211
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    if-eqz v2, :cond_232
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    array-length v2, v2
-    if-lez v2, :cond_232
-    move v2, v0
-    move v0, v1
-    :goto_21c
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    array-length v3, v3
-    if-ge v0, v3, :cond_231
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    aget-object v3, v3, v0
-    if-eqz v3, :cond_22e
-    const/16 v4, 0x12
-    invoke-static {v4, v3}, LTest;->d(ILTest;)I
-    move-result v3
-    add-int/2addr v2, v3
-    :cond_22e
-    add-int/lit8 v0, v0, 0x1
-    goto :goto_21c
-    :cond_231
-    move v0, v2
-    :cond_232
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    if-eqz v2, :cond_253
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    array-length v2, v2
-    if-lez v2, :cond_253
-    move v2, v0
-    move v0, v1
-    :goto_23d
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    array-length v3, v3
-    if-ge v0, v3, :cond_252
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    aget-object v3, v3, v0
-    if-eqz v3, :cond_24f
-    const/16 v4, 0x13
-    invoke-static {v4, v3}, LTest;->d(ILTest;)I
-    move-result v3
-    add-int/2addr v2, v3
-    :cond_24f
-    add-int/lit8 v0, v0, 0x1
-    goto :goto_23d
-    :cond_252
-    move v0, v2
-    :cond_253
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    if-eqz v2, :cond_274
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    array-length v2, v2
-    if-lez v2, :cond_274
-    move v2, v0
-    move v0, v1
-    :goto_25e
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    array-length v3, v3
-    if-ge v0, v3, :cond_273
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    aget-object v3, v3, v0
-    if-eqz v3, :cond_270
-    const/16 v4, 0x14
-    invoke-static {v4, v3}, LTest;->d(ILTest;)I
-    move-result v3
-    add-int/2addr v2, v3
-    :cond_270
-    add-int/lit8 v0, v0, 0x1
-    goto :goto_25e
-    :cond_273
-    move v0, v2
-    :cond_274
-    iget-object v2, p0, LTestObject;->z:Ljava/lang/String;
-    if-eqz v2, :cond_28b
-    iget-object v2, p0, LTestObject;->z:Ljava/lang/String;
-    const-string v3, ""
-    invoke-virtual {v2, v3}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-    move-result v2
-    if-nez v2, :cond_28b
-    const/16 v2, 0x15
-    iget-object v3, p0, LTestObject;->z:Ljava/lang/String;
-    invoke-static {v2, v3}, LTest;->b(ILjava/lang/String;)I
-    move-result v2
-    add-int/2addr v0, v2
-    :cond_28b
-    iget v2, p0, LTestObject;->i:I
-    if-eq v2, v5, :cond_298
-    const/16 v2, 0x16
-    iget v3, p0, LTestObject;->i:I
-    invoke-static {v2, v3}, LTest;->f(II)I
-    move-result v2
-    add-int/2addr v0, v2
-    :cond_298
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    if-eqz v2, :cond_2b9
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    array-length v2, v2
-    if-lez v2, :cond_2b9
-    move v2, v0
-    move v0, v1
-    :goto_2a3
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    array-length v3, v3
-    if-ge v0, v3, :cond_2b8
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    aget-object v3, v3, v0
-    if-eqz v3, :cond_2b5
-    const/16 v4, 0x17
-    invoke-static {v4, v3}, LTest;->d(ILTest;)I
-    move-result v3
-    add-int/2addr v2, v3
-    :cond_2b5
-    add-int/lit8 v0, v0, 0x1
-    goto :goto_2a3
-    :cond_2b8
-    move v0, v2
-    :cond_2b9
-    iget-object v2, p0, LTestObject;->z:Ljava/lang/String;
-    if-eqz v2, :cond_2d0
-    iget-object v2, p0, LTestObject;->z:Ljava/lang/String;
-    const-string v3, ""
-    invoke-virtual {v2, v3}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-    move-result v2
-    if-nez v2, :cond_2d0
-    const/16 v2, 0x18
-    iget-object v3, p0, LTestObject;->z:Ljava/lang/String;
-    invoke-static {v2, v3}, LTest;->b(ILjava/lang/String;)I
-    move-result v2
-    add-int/2addr v0, v2
-    :cond_2d0
-    iget-object v2, p0, LTest;->M:LTest;
-    if-eqz v2, :cond_2dd
-    const/16 v2, 0x19
-    iget-object v3, p0, LTest;->M:LTest;
-    invoke-static {v2, v3}, LTest;->d(ILTest;)I
-    move-result v2
-    add-int/2addr v0, v2
-    :cond_2dd
-    iget-object v2, p0, LTestObject;->z:Ljava/lang/String;
-    if-eqz v2, :cond_2f4
-    iget-object v2, p0, LTestObject;->z:Ljava/lang/String;
-    const-string v3, ""
-    invoke-virtual {v2, v3}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-    move-result v2
-    if-nez v2, :cond_2f4
-    const/16 v2, 0x1a
-    iget-object v3, p0, LTestObject;->z:Ljava/lang/String;
-    invoke-static {v2, v3}, LTest;->b(ILjava/lang/String;)I
-    move-result v2
-    add-int/2addr v0, v2
-    :cond_2f4
-    iget-object v2, p0, LTest;->o:[LTest;
-    if-eqz v2, :cond_315
-    iget-object v2, p0, LTest;->o:[LTest;
-    array-length v2, v2
-    if-lez v2, :cond_315
-    move v2, v0
-    move v0, v1
-    :goto_2ff
-    iget-object v3, p0, LTest;->o:[LTest;
-    array-length v3, v3
-    if-ge v0, v3, :cond_314
-    iget-object v3, p0, LTest;->o:[LTest;
-    aget-object v3, v3, v0
-    if-eqz v3, :cond_311
-    const/16 v4, 0x1b
-    invoke-static {v4, v3}, LTest;->d(ILTest;)I
-    move-result v3
-    add-int/2addr v2, v3
-    :cond_311
-    add-int/lit8 v0, v0, 0x1
-    goto :goto_2ff
-    :cond_314
-    move v0, v2
-    :cond_315
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    if-eqz v2, :cond_336
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    array-length v2, v2
-    if-lez v2, :cond_336
-    move v2, v0
-    move v0, v1
-    :goto_320
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    array-length v3, v3
-    if-ge v0, v3, :cond_335
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    aget-object v3, v3, v0
-    if-eqz v3, :cond_332
-    const/16 v4, 0x1c
-    invoke-static {v4, v3}, LTest;->d(ILTest;)I
-    move-result v3
-    add-int/2addr v2, v3
-    :cond_332
-    add-int/lit8 v0, v0, 0x1
-    goto :goto_320
-    :cond_335
-    move v0, v2
-    :cond_336
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    if-eqz v2, :cond_357
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    array-length v2, v2
-    if-lez v2, :cond_357
-    move v2, v0
-    move v0, v1
-    :goto_341
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    array-length v3, v3
-    if-ge v0, v3, :cond_356
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    aget-object v3, v3, v0
-    if-eqz v3, :cond_353
-    const/16 v4, 0x1d
-    invoke-static {v4, v3}, LTest;->d(ILTest;)I
-    move-result v3
-    add-int/2addr v2, v3
-    :cond_353
-    add-int/lit8 v0, v0, 0x1
-    goto :goto_341
-    :cond_356
-    move v0, v2
-    :cond_357
-    iget-object v2, p0, LTest;->t:[LTest;
-    if-eqz v2, :cond_378
-    iget-object v2, p0, LTest;->t:[LTest;
-    array-length v2, v2
-    if-lez v2, :cond_378
-    move v2, v0
-    move v0, v1
-    :goto_362
-    iget-object v3, p0, LTest;->t:[LTest;
-    array-length v3, v3
-    if-ge v0, v3, :cond_377
-    iget-object v3, p0, LTest;->t:[LTest;
-    aget-object v3, v3, v0
-    if-eqz v3, :cond_374
-    const/16 v4, 0x1e
-    invoke-static {v4, v3}, LTest;->d(ILTest;)I
-    move-result v3
-    add-int/2addr v2, v3
-    :cond_374
-    add-int/lit8 v0, v0, 0x1
-    goto :goto_362
-    :cond_377
-    move v0, v2
-    :cond_378
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    if-eqz v2, :cond_399
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    array-length v2, v2
-    if-lez v2, :cond_399
-    move v2, v0
-    move v0, v1
-    :goto_383
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    array-length v3, v3
-    if-ge v0, v3, :cond_398
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    aget-object v3, v3, v0
-    if-eqz v3, :cond_395
-    const/16 v4, 0x1f
-    invoke-static {v4, v3}, LTest;->d(ILTest;)I
-    move-result v3
-    add-int/2addr v2, v3
-    :cond_395
-    add-int/lit8 v0, v0, 0x1
-    goto :goto_383
-    :cond_398
-    move v0, v2
-    :cond_399
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    if-eqz v2, :cond_3ba
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    array-length v2, v2
-    if-lez v2, :cond_3ba
-    move v2, v0
-    move v0, v1
-    :goto_3a4
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    array-length v3, v3
-    if-ge v0, v3, :cond_3b9
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    aget-object v3, v3, v0
-    if-eqz v3, :cond_3b6
-    const/16 v4, 0x20
-    invoke-static {v4, v3}, LTest;->d(ILTest;)I
-    move-result v3
-    add-int/2addr v2, v3
-    :cond_3b6
-    add-int/lit8 v0, v0, 0x1
-    goto :goto_3a4
-    :cond_3b9
-    move v0, v2
-    :cond_3ba
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    if-eqz v2, :cond_3db
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    array-length v2, v2
-    if-lez v2, :cond_3db
-    move v2, v0
-    move v0, v1
-    :goto_3c5
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    array-length v3, v3
-    if-ge v0, v3, :cond_3da
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    aget-object v3, v3, v0
-    if-eqz v3, :cond_3d7
-    const/16 v4, 0x21
-    invoke-static {v4, v3}, LTest;->d(ILTest;)I
-    move-result v3
-    add-int/2addr v2, v3
-    :cond_3d7
-    add-int/lit8 v0, v0, 0x1
-    goto :goto_3c5
-    :cond_3da
-    move v0, v2
-    :cond_3db
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    if-eqz v2, :cond_3fc
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    array-length v2, v2
-    if-lez v2, :cond_3fc
-    move v2, v0
-    move v0, v1
-    :goto_3e6
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    array-length v3, v3
-    if-ge v0, v3, :cond_3fb
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    aget-object v3, v3, v0
-    if-eqz v3, :cond_3f8
-    const/16 v4, 0x22
-    invoke-static {v4, v3}, LTest;->d(ILTest;)I
-    move-result v3
-    add-int/2addr v2, v3
-    :cond_3f8
-    add-int/lit8 v0, v0, 0x1
-    goto :goto_3e6
-    :cond_3fb
-    move v0, v2
-    :cond_3fc
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    if-eqz v2, :cond_41d
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    array-length v2, v2
-    if-lez v2, :cond_41d
-    move v2, v0
-    move v0, v1
-    :goto_407
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    array-length v3, v3
-    if-ge v0, v3, :cond_41c
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    aget-object v3, v3, v0
-    if-eqz v3, :cond_419
-    const/16 v4, 0x23
-    invoke-static {v4, v3}, LTest;->d(ILTest;)I
-    move-result v3
-    add-int/2addr v2, v3
-    :cond_419
-    add-int/lit8 v0, v0, 0x1
-    goto :goto_407
-    :cond_41c
-    move v0, v2
-    :cond_41d
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    if-eqz v2, :cond_43e
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    array-length v2, v2
-    if-lez v2, :cond_43e
-    move v2, v0
-    move v0, v1
-    :goto_428
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    array-length v3, v3
-    if-ge v0, v3, :cond_43d
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    aget-object v3, v3, v0
-    if-eqz v3, :cond_43a
-    const/16 v4, 0x24
-    invoke-static {v4, v3}, LTest;->d(ILTest;)I
-    move-result v3
-    add-int/2addr v2, v3
-    :cond_43a
-    add-int/lit8 v0, v0, 0x1
-    goto :goto_428
-    :cond_43d
-    move v0, v2
-    :cond_43e
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    if-eqz v2, :cond_45f
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    array-length v2, v2
-    if-lez v2, :cond_45f
-    move v2, v0
-    move v0, v1
-    :goto_449
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    array-length v3, v3
-    if-ge v0, v3, :cond_45e
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    aget-object v3, v3, v0
-    if-eqz v3, :cond_45b
-    const/16 v4, 0x25
-    invoke-static {v4, v3}, LTest;->d(ILTest;)I
-    move-result v3
-    add-int/2addr v2, v3
-    :cond_45b
-    add-int/lit8 v0, v0, 0x1
-    goto :goto_449
-    :cond_45e
-    move v0, v2
-    :cond_45f
-    iget-object v2, p0, LTest;->T:LTest;
-    if-eqz v2, :cond_46c
-    const/16 v2, 0x26
-    iget-object v3, p0, LTest;->T:LTest;
-    invoke-static {v2, v3}, LTest;->d(ILTest;)I
-    move-result v2
-    add-int/2addr v0, v2
-    :cond_46c
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    if-eqz v2, :cond_48d
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    array-length v2, v2
-    if-lez v2, :cond_48d
-    move v2, v0
-    move v0, v1
-    :goto_477
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    array-length v3, v3
-    if-ge v0, v3, :cond_48c
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    aget-object v3, v3, v0
-    if-eqz v3, :cond_489
-    const/16 v4, 0x27
-    invoke-static {v4, v3}, LTest;->d(ILTest;)I
-    move-result v3
-    add-int/2addr v2, v3
-    :cond_489
-    add-int/lit8 v0, v0, 0x1
-    goto :goto_477
-    :cond_48c
-    move v0, v2
-    :cond_48d
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    if-eqz v2, :cond_4ae
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    array-length v2, v2
-    if-lez v2, :cond_4ae
-    move v2, v0
-    move v0, v1
-    :goto_498
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    array-length v3, v3
-    if-ge v0, v3, :cond_4ad
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    aget-object v3, v3, v0
-    if-eqz v3, :cond_4aa
-    const/16 v4, 0x28
-    invoke-static {v4, v3}, LTest;->d(ILTest;)I
-    move-result v3
-    add-int/2addr v2, v3
-    :cond_4aa
-    add-int/lit8 v0, v0, 0x1
-    goto :goto_498
-    :cond_4ad
-    move v0, v2
-    :cond_4ae
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    if-eqz v2, :cond_4cf
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    array-length v2, v2
-    if-lez v2, :cond_4cf
-    move v2, v0
-    move v0, v1
-    :goto_4b9
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    array-length v3, v3
-    if-ge v0, v3, :cond_4ce
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    aget-object v3, v3, v0
-    if-eqz v3, :cond_4cb
-    const/16 v4, 0x29
-    invoke-static {v4, v3}, LTest;->d(ILTest;)I
-    move-result v3
-    add-int/2addr v2, v3
-    :cond_4cb
-    add-int/lit8 v0, v0, 0x1
-    goto :goto_4b9
-    :cond_4ce
-    move v0, v2
-    :cond_4cf
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    if-eqz v2, :cond_4f0
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    array-length v2, v2
-    if-lez v2, :cond_4f0
-    move v2, v0
-    move v0, v1
-    :goto_4da
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    array-length v3, v3
-    if-ge v0, v3, :cond_4ef
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    aget-object v3, v3, v0
-    if-eqz v3, :cond_4ec
-    const/16 v4, 0x2a
-    invoke-static {v4, v3}, LTest;->d(ILTest;)I
-    move-result v3
-    add-int/2addr v2, v3
-    :cond_4ec
-    add-int/lit8 v0, v0, 0x1
-    goto :goto_4da
-    :cond_4ef
-    move v0, v2
-    :cond_4f0
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    if-eqz v2, :cond_511
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    array-length v2, v2
-    if-lez v2, :cond_511
-    move v2, v0
-    move v0, v1
-    :goto_4fb
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    array-length v3, v3
-    if-ge v0, v3, :cond_510
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    aget-object v3, v3, v0
-    if-eqz v3, :cond_50d
-    const/16 v4, 0x2b
-    invoke-static {v4, v3}, LTest;->d(ILTest;)I
-    move-result v3
-    add-int/2addr v2, v3
-    :cond_50d
-    add-int/lit8 v0, v0, 0x1
-    goto :goto_4fb
-    :cond_510
-    move v0, v2
-    :cond_511
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    if-eqz v2, :cond_532
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    array-length v2, v2
-    if-lez v2, :cond_532
-    move v2, v0
-    move v0, v1
-    :goto_51c
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    array-length v3, v3
-    if-ge v0, v3, :cond_531
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    aget-object v3, v3, v0
-    if-eqz v3, :cond_52e
-    const/16 v4, 0x2c
-    invoke-static {v4, v3}, LTest;->d(ILTest;)I
-    move-result v3
-    add-int/2addr v2, v3
-    :cond_52e
-    add-int/lit8 v0, v0, 0x1
-    goto :goto_51c
-    :cond_531
-    move v0, v2
-    :cond_532
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    if-eqz v2, :cond_553
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    array-length v2, v2
-    if-lez v2, :cond_553
-    move v2, v0
-    move v0, v1
-    :goto_53d
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    array-length v3, v3
-    if-ge v0, v3, :cond_552
-    iget-object v3, p0, LTestObject;->a:[LTest;
-    aget-object v3, v3, v0
-    if-eqz v3, :cond_54f
-    const/16 v4, 0x2d
-    invoke-static {v4, v3}, LTest;->d(ILTest;)I
-    move-result v3
-    add-int/2addr v2, v3
-    :cond_54f
-    add-int/lit8 v0, v0, 0x1
-    goto :goto_53d
-    :cond_552
-    move v0, v2
-    :cond_553
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    if-eqz v2, :cond_571
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    array-length v2, v2
-    if-lez v2, :cond_571
-    :goto_55c
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    array-length v2, v2
-    if-ge v1, v2, :cond_571
-    iget-object v2, p0, LTestObject;->a:[LTest;
-    aget-object v2, v2, v1
-    if-eqz v2, :cond_56e
-    const/16 v3, 0x2e
-    invoke-static {v3, v2}, LTest;->d(ILTest;)I
-    move-result v2
-    add-int/2addr v0, v2
-    :cond_56e
-    add-int/lit8 v1, v1, 0x1
-    goto :goto_55c
-    :cond_571
-    iget-object v1, p0, LTest;->V:LTest;
-    if-eqz v1, :cond_57e
-    const/16 v1, 0x64
-    iget-object v2, p0, LTest;->V:LTest;
-    invoke-static {v1, v2}, LTest;->d(ILTest;)I
-    move-result v1
-    add-int/2addr v0, v1
-    :cond_57e
-    return v0
-.end method
-
-.method public final method2()I
-    .registers 1
-    .prologue
-    const/4 v0, 0x1
-    return v0
-.end method
diff --git a/src/test/smali/controlflow/ControlFlow.smali b/src/test/smali/controlflow/ControlFlow.smali
deleted file mode 100644
index 35881fe..0000000
--- a/src/test/smali/controlflow/ControlFlow.smali
+++ /dev/null
@@ -1,225 +0,0 @@
-# Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-.class public LTest;
-
-.super Ljava/lang/Object;
-
-.method static constantEqTrue()I
-    .locals 1
-
-    const v0, 0
-    if-eqz v0, :equals
-    const v0, 1
-    return v0
-    :equals
-    const v0, 2
-    return v0
-.end method
-
-.method static constantEqFalse()I
-    .locals 1
-
-    const v0, 1
-    if-eqz v0, :equals
-    const v0, 1
-    return v0
-    :equals
-    const v0, 2
-    return v0
-.end method
-
-.method static constantNeTrue()I
-    .locals 1
-
-    const v0, 1
-    if-nez v0, :equals
-    const v0, 1
-    return v0
-    :equals
-    const v0, 2
-    return v0
-.end method
-
-.method static constantNeFalse()I
-    .locals 1
-
-    const v0, 0
-    if-nez v0, :equals
-    const v0, 1
-    return v0
-    :equals
-    const v0, 2
-    return v0
-.end method
-
-.method static constantLtzTrue()I
-    .locals 1
-
-    const v0, -1
-    if-ltz v0, :equals
-    const v0, 1
-    return v0
-    :equals
-    const v0, 2
-    return v0
-.end method
-
-.method static constantLtzFalse()I
-    .locals 1
-
-    const v0, 0
-    if-ltz v0, :equals
-    const v0, 1
-    return v0
-    :equals
-    const v0, 2
-    return v0
-.end method
-
-.method static constantLezTrue()I
-    .locals 1
-
-    const v0, 0
-    if-lez v0, :equals
-    const v0, 1
-    return v0
-    :equals
-    const v0, 2
-    return v0
-.end method
-
-.method static constantLezFalse()I
-    .locals 1
-
-    const v0, 1
-    if-lez v0, :equals
-    const v0, 1
-    return v0
-    :equals
-    const v0, 2
-    return v0
-.end method
-
-.method static constantGtzTrue()I
-    .locals 1
-
-    const v0, 1
-    if-gtz v0, :equals
-    const v0, 1
-    return v0
-    :equals
-    const v0, 2
-    return v0
-.end method
-
-.method static constantGtzFalse()I
-    .locals 1
-
-    const v0, 0
-    if-gtz v0, :equals
-    const v0, 1
-    return v0
-    :equals
-    const v0, 2
-    return v0
-.end method
-
-.method static constantGezTrue()I
-    .locals 1
-
-    const v0, 0
-    if-gez v0, :equals
-    const v0, 1
-    return v0
-    :equals
-    const v0, 2
-    return v0
-.end method
-
-.method static constantGezFalse()I
-    .locals 1
-
-    const v0, -1
-    if-gez v0, :equals
-    const v0, 1
-    return v0
-    :equals
-    const v0, 2
-    return v0
-.end method
-
-.method static cmpConstantLong()I
-    .locals 4
-
-    const-wide v0, 0
-    const-wide v2, 0
-    cmp-long v0, v0, v2
-    if-eqz v0, :equals
-    const v0, 1
-    return v0
-    :equals
-    const v0, 2
-    return v0
-.end method
-
-.method public static main([Ljava/lang/String;)V
-    .locals 3
-
-    sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
-
-    invoke-static {}, LTest;->constantEqTrue()I
-    move-result v1
-    invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
-
-    invoke-static {}, LTest;->constantEqFalse()I
-    move-result v1
-    invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
-
-    invoke-static {}, LTest;->constantNeTrue()I
-    move-result v1
-    invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
-
-    invoke-static {}, LTest;->constantNeFalse()I
-    move-result v1
-    invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
-
-    invoke-static {}, LTest;->constantLtzTrue()I
-    move-result v1
-    invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
-
-    invoke-static {}, LTest;->constantLtzFalse()I
-    move-result v1
-    invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
-
-    invoke-static {}, LTest;->constantLezTrue()I
-    move-result v1
-    invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
-
-    invoke-static {}, LTest;->constantLezFalse()I
-    move-result v1
-    invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
-
-    invoke-static {}, LTest;->constantGtzTrue()I
-    move-result v1
-    invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
-
-    invoke-static {}, LTest;->constantGtzFalse()I
-    move-result v1
-    invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
-
-    invoke-static {}, LTest;->constantGezTrue()I
-    move-result v1
-    invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
-
-    invoke-static {}, LTest;->constantGezFalse()I
-    move-result v1
-    invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
-
-    invoke-static {}, LTest;->cmpConstantLong()I
-    move-result v1
-    invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
-
-    return-void
-.end method
diff --git a/src/test/smali/fibonacci/Fibonacci.smali b/src/test/smali/fibonacci/Fibonacci.smali
deleted file mode 100644
index 3345ec0..0000000
--- a/src/test/smali/fibonacci/Fibonacci.smali
+++ /dev/null
@@ -1,129 +0,0 @@
-# Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-.class public LTest;
-
-.super Ljava/lang/Object;
-
-.method static fibonacci(I)I
-    .locals 2
-
-    if-eqz p0, :return
-    const/4 v0, 0x1
-    if-ne p0, v0, :calc
-
-    :return
-    return p0
-
-    :calc
-    add-int/lit8 v0, p0, -0x1
-    invoke-static {v0}, LTest;->fibonacci(I)I
-    move-result v0
-    add-int/lit8 v1, p0, -0x2
-    invoke-static {v1}, LTest;->fibonacci(I)I
-    move-result v1
-    add-int p0, v0, v1
-    goto :return
-.end method
-
-.method static fibonacciLong(J)J
-    .locals 4
-
-    const-wide/16 v2, 0x1
-    const-wide/16 v0, 0x0
-    cmp-long v0, p0, v0
-    if-eqz v0, :return
-    cmp-long v0, p0, v2
-    if-nez v0, :calc
-
-    :return
-    return-wide p0
-
-    :calc
-    sub-long v0, p0, v2
-    invoke-static {v0, v1}, LTest;->fibonacciLong(J)J
-    move-result-wide v0
-    const-wide/16 v2, 0x2
-    sub-long v2, p0, v2
-    invoke-static {v2, v3}, LTest;->fibonacciLong(J)J
-    move-result-wide v2
-    add-long p0, v0, v2
-    goto :return
-.end method
-
-.method static fibonacciJack(I)I
-    .locals 2
-
-    if-eqz p0, :return
-    const/4 v0, 0x1
-    if-ne p0, v0, :calc
-
-    :return
-    return p0
-
-    :calc
-    add-int/lit8 v0, p0, -0x1
-    invoke-static {v0}, LTest;->fibonacciJack(I)I
-    move-result v0
-    add-int/lit8 v1, p0, -0x2
-    invoke-static {v1}, LTest;->fibonacciJack(I)I
-    move-result v1
-    add-int/2addr v0, v1
-    return v0
-.end method
-
-.method static fibonacciLongJack(J)J
-    .locals 4
-
-    const-wide/16 v2, 0x1
-    const-wide/16 v0, 0x0
-    cmp-long v0, p0, v0
-    if-eqz v0, :return
-    cmp-long v0, p0, v2
-    if-nez v0, :calc
-
-    :return
-    return-wide p0
-
-    :calc
-    sub-long v0, p0, v2
-    invoke-static {v0, v1}, LTest;->fibonacciLongJack(J)J
-    move-result-wide v0
-    const-wide/16 v2, 0x2
-    sub-long v2, p0, v2
-    invoke-static {v2, v3}, LTest;->fibonacciLongJack(J)J
-    move-result-wide v2
-    add-long/2addr v0, v2
-    return-wide v0
-.end method
-
-.method public static main([Ljava/lang/String;)V
-    .registers 5
-
-    sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
-
-    const/16 v1, 0xa
-    invoke-static {v1}, LTest;->fibonacci(I)I
-    move-result v1
-    invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
-
-    sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
-    const-wide/16 v2, 0xa
-    invoke-static {v2, v3}, LTest;->fibonacciLong(J)J
-    move-result-wide v2
-    invoke-virtual {v0, v2, v3}, Ljava/io/PrintStream;->println(J)V
-
-    const/16 v1, 0xa
-    invoke-static {v1}, LTest;->fibonacciJack(I)I
-    move-result v1
-    invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
-
-    sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
-    const-wide/16 v2, 0xa
-    invoke-static {v2, v3}, LTest;->fibonacciLongJack(J)J
-    move-result-wide v2
-    invoke-virtual {v0, v2, v3}, Ljava/io/PrintStream;->println(J)V
-
-    return-void
-.end method
diff --git a/src/test/smali/fill-array-data/FillArrayData.smali b/src/test/smali/fill-array-data/FillArrayData.smali
deleted file mode 100644
index 81a5834..0000000
--- a/src/test/smali/fill-array-data/FillArrayData.smali
+++ /dev/null
@@ -1,61 +0,0 @@
-# Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-.class public LTest;
-
-.super Ljava/lang/Object;
-
-# Simple fill array data
-.method public static test1()[I
-  .registers 2
-
-  const/4 v1, 3
-  new-array v0, v1, [I
-  fill-array-data v0, :array_data
-  return-object v0
-
-  :array_data
-  .array-data 4
-    1 2 3
-  .end array-data
-.end method
-
-# Fill array data after data
-.method public static test2()[I
-  .registers 2
-
-  goto :start
-
-  :array_data
-  .array-data 4
-    4 5 6
-  .end array-data
-
-  :start
-  const/4 v1, 3
-  new-array v0, v1, [I
-  fill-array-data v0, :array_data
-  return-object v0
-
-.end method
-
-.method public static main([Ljava/lang/String;)V
-    .locals 2
-
-    sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
-
-    invoke-static {}, LTest;->test1()[I
-    move-result-object v1
-    invoke-static {v1}, Ljava/util/Arrays;->toString([I)Ljava/lang/String;
-    move-result-object v1
-    invoke-virtual {v0, v1}, Ljava/io/PrintStream;->print(Ljava/lang/Object;)V
-
-    invoke-static {}, LTest;->test2()[I
-    move-result-object v1
-    invoke-static {v1}, Ljava/util/Arrays;->toString([I)Ljava/lang/String;
-    move-result-object v1
-    invoke-virtual {v0, v1}, Ljava/io/PrintStream;->print(Ljava/lang/Object;)V
-
-    return-void
-.end method
diff --git a/src/test/smali/filled-new-array/FilledNewArray.smali b/src/test/smali/filled-new-array/FilledNewArray.smali
deleted file mode 100644
index 2550e3f..0000000
--- a/src/test/smali/filled-new-array/FilledNewArray.smali
+++ /dev/null
@@ -1,93 +0,0 @@
-# Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-.class public LTest;
-
-.super Ljava/lang/Object;
-
-# Filled new array from arguments.
-.method public static test1(III)[I
-  .locals 1
-
-  filled-new-array {p0, p1, p2}, [I
-  move-result-object v0
-  return-object v0
-.end method
-
-# Filled new array from constants.
-.method public static test2()[I
-  .locals 3
-
-  const/4 v0, 4
-  const/4 v1, 5
-  const/4 v2, 6
-  filled-new-array {v0, v1, v2}, [I
-  move-result-object v0
-  return-object v0
-.end method
-
-# Filled new array range from arguments.
-.method public static test3(IIIIII)[I
-  .locals 1
-
-  filled-new-array/range {p0 .. p5}, [I
-  move-result-object v0
-  return-object v0
-.end method
-
-# Filled new array range from constants.
-.method public static test4()[I
-  .locals 6
-
-  const/4 v0, 6
-  const/4 v1, 5
-  const/4 v2, 4
-  const/4 v3, 3
-  const/4 v4, 2
-  const/4 v5, 1
-  filled-new-array/range {v0  .. v5}, [I
-  move-result-object v0
-  return-object v0
-.end method
-
-.method public static main([Ljava/lang/String;)V
-    .locals 7
-
-    sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
-
-    const/4 v1, 1
-    const/4 v2, 2
-    const/4 v3, 3
-    invoke-static {v1, v2, v3}, LTest;->test1(III)[I
-    move-result-object v1
-    invoke-static {v1}, Ljava/util/Arrays;->toString([I)Ljava/lang/String;
-    move-result-object v1
-    invoke-virtual {v0, v1}, Ljava/io/PrintStream;->print(Ljava/lang/Object;)V
-
-    invoke-static {}, LTest;->test2()[I
-    move-result-object v1
-    invoke-static {v1}, Ljava/util/Arrays;->toString([I)Ljava/lang/String;
-    move-result-object v1
-    invoke-virtual {v0, v1}, Ljava/io/PrintStream;->print(Ljava/lang/Object;)V
-
-    const/4 v1, 1
-    const/4 v2, 2
-    const/4 v3, 3
-    const/4 v4, 4
-    const/4 v5, 5
-    const/4 v6, 6
-    invoke-static/range {v1 .. v6}, LTest;->test3(IIIIII)[I
-    move-result-object v1
-    invoke-static {v1}, Ljava/util/Arrays;->toString([I)Ljava/lang/String;
-    move-result-object v1
-    invoke-virtual {v0, v1}, Ljava/io/PrintStream;->print(Ljava/lang/Object;)V
-
-    invoke-static {}, LTest;->test4()[I
-    move-result-object v1
-    invoke-static {v1}, Ljava/util/Arrays;->toString([I)Ljava/lang/String;
-    move-result-object v1
-    invoke-virtual {v0, v1}, Ljava/io/PrintStream;->print(Ljava/lang/Object;)V
-
-    return-void
-.end method
diff --git a/src/test/smali/illegal-invokes/Iface.java b/src/test/smali/illegal-invokes/Iface.java
deleted file mode 100644
index dd11626..0000000
--- a/src/test/smali/illegal-invokes/Iface.java
+++ /dev/null
@@ -1,9 +0,0 @@
-// Copyright (c) 2017, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-public class Iface {
-
-  public void bar() {
-  }
-}
diff --git a/src/test/smali/illegal-invokes/Iface.smali b/src/test/smali/illegal-invokes/Iface.smali
deleted file mode 100644
index 5f074dce..0000000
--- a/src/test/smali/illegal-invokes/Iface.smali
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2017, the R8 project authors. Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-.class interface public abstract LIface;
-.super Ljava/lang/Object;
-
-.method public abstract bar()V
-.end method
-
diff --git a/src/test/smali/illegal-invokes/Lowest.java b/src/test/smali/illegal-invokes/Lowest.java
deleted file mode 100644
index e464313..0000000
--- a/src/test/smali/illegal-invokes/Lowest.java
+++ /dev/null
@@ -1,11 +0,0 @@
-// Copyright (c) 2017, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-public class Lowest extends Iface implements Super {
-
-  @Override
-  public void foo() {
-
-  }
-}
diff --git a/src/test/smali/illegal-invokes/Lowest.smali b/src/test/smali/illegal-invokes/Lowest.smali
deleted file mode 100644
index d6c5787..0000000
--- a/src/test/smali/illegal-invokes/Lowest.smali
+++ /dev/null
@@ -1,12 +0,0 @@
-# Copyright (c) 2017, the R8 project authors. Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-.class public LLowest;
-.super LSuper;
-
-.method public bar()V
-    .locals 0
-    return-void
-.end method
-
diff --git a/src/test/smali/illegal-invokes/Super.java b/src/test/smali/illegal-invokes/Super.java
deleted file mode 100644
index 54a8714..0000000
--- a/src/test/smali/illegal-invokes/Super.java
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2017, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-public interface Super {
-
-  public void foo();
-}
diff --git a/src/test/smali/illegal-invokes/Super.smali b/src/test/smali/illegal-invokes/Super.smali
deleted file mode 100644
index 1ec4f0e..0000000
--- a/src/test/smali/illegal-invokes/Super.smali
+++ /dev/null
@@ -1,13 +0,0 @@
-# Copyright (c) 2017, the R8 project authors. Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-.class public LSuper;
-.super Ljava/lang/Object;
-.implements LIface;
-
-.method public foo()V
-    .locals 0
-    return-void
-.end method
-
diff --git a/src/test/smali/illegal-invokes/Test.java b/src/test/smali/illegal-invokes/Test.java
deleted file mode 100644
index 8ddd18e..0000000
--- a/src/test/smali/illegal-invokes/Test.java
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright (c) 2017, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-public class Test {
-
-  int ignore;
-
-  public static void main(String... args) {
-    Lowest l = new Lowest();
-    callVirtualOnIface(l);
-    callIfaceOnVirtual(l);
-  }
-
-  private static void callVirtualOnIface(Iface i) {
-    try {
-      i.bar();
-    } catch (IncompatibleClassChangeError e) {
-      System.out.println("ICCE");
-    }
-  }
-
-  private static void callIfaceOnVirtual(Super s) {
-    try {
-      s.foo();
-    } catch (IncompatibleClassChangeError e) {
-      System.out.println("ICCE");
-    }
-  }
-}
diff --git a/src/test/smali/infinite-loop/InfiniteLoop1.smali b/src/test/smali/infinite-loop/InfiniteLoop1.smali
deleted file mode 100644
index a93923b..0000000
--- a/src/test/smali/infinite-loop/InfiniteLoop1.smali
+++ /dev/null
@@ -1,53 +0,0 @@
-# Copyright (c) 2017, the R8 project authors. Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-.class public LTest;
-
-.super Ljava/lang/Object;
-
-.method public static loop1()V
-  .locals 0
-  goto :a
-
-  :a
-  goto :b
-
-  :b
-  goto :c
-
-  :c
-  goto :d
-
-  :d
-  goto :b
-
-  return-void
-.end method
-
-.method public static loop2()V
-  .locals 2
-  sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
-  const/4 v1, 0x1
-  invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
-  goto :a
-
-  :a
-  goto :b
-
-  :b
-  goto :c
-
-  :c
-  goto :d
-
-  :d
-  goto :b
-
-  return-void
-.end method
-
-.method public static main([Ljava/lang/String;)V
-    .locals 0
-    return-void
-.end method
diff --git a/src/test/smali/merge-blocks-regression/Test.java b/src/test/smali/merge-blocks-regression/Test.java
deleted file mode 100644
index ca61ff4..0000000
--- a/src/test/smali/merge-blocks-regression/Test.java
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-public class Test {
-
-  public Object b;
-  public Test d;
-  public Test e;
-  public Test g;
-  public Test f;
-
-  public void a() { throw new RuntimeException("Test.a()"); }
-  public void a(long p1) { throw new RuntimeException("Test.a(long)"); }
-  public void a(long p1, boolean p2) { throw new RuntimeException("Test.a(long, boolean)"); }
-  public Test a(java.io.DataInputStream p1) { throw new RuntimeException("Test.a(input-stream)"); }
-  public Test a(byte[] p1, Test p2) { throw new RuntimeException("Test.a(B[], Test)"); }
-  public java.io.File b() { throw new RuntimeException("Test.b()"); }
-  public Test bW_() { throw new RuntimeException("Test.bW_()"); }
-  public long c() { throw new RuntimeException("Test.d()"); }
-  public void c(boolean p1) { throw new RuntimeException("Test.c(boolean)"); }
-  public void c(java.nio.ByteBuffer p1) { throw new RuntimeException("Test.c(byte-buf)"); }
-  public byte[] cB() { throw new RuntimeException("Test.cB()"); }
-  public long d() { throw new RuntimeException("Test.d()"); }
-  public void d(boolean p1) { throw new RuntimeException("Test.d(boolean)"); }
-  public Test e() { throw new RuntimeException("Test.e()"); }
-  public void eV() { throw new RuntimeException("Test.eV()"); }
-
-  public static void main(String[] args) {
-    try {
-      new TestObject().f();
-    } catch (Exception e) {
-      System.out.println(e);
-    }
-  }
-}
diff --git a/src/test/smali/merge-blocks-regression/TestObject.java b/src/test/smali/merge-blocks-regression/TestObject.java
deleted file mode 100644
index 59b46f6..0000000
--- a/src/test/smali/merge-blocks-regression/TestObject.java
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-public class TestObject {
-  public void f() {
-  }
-}
diff --git a/src/test/smali/merge-blocks-regression/TestObject.smali b/src/test/smali/merge-blocks-regression/TestObject.smali
deleted file mode 100644
index f14013e..0000000
--- a/src/test/smali/merge-blocks-regression/TestObject.smali
+++ /dev/null
@@ -1,199 +0,0 @@
-# Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-.class public final LTestObject;
-.super Ljava/lang/Object;
-
-.field public c:LTest;
-.field public b:LTest;
-.field public d:LTest;
-.field public e:LTest;
-.field public h:LTest;
-.field public i:LTest;
-.field public j:LTest;
-
-.method public constructor <init>()V
-    .registers 1
-    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
-    return-void
-.end method
-
-.method public final f()V
-    .registers 15
-    const/16 v11, 0xd
-    const/4 v2, 0x0
-    const/4 v1, 0x1
-    iget-object v3, p0, LTestObject;->c:LTest;
-    iget-object v0, p0, LTestObject;->b:LTest;
-    invoke-virtual {v0}, LTest;->bW_()LTest;
-    move-result-object v0
-    iget-object v4, p0, LTestObject;->b:LTest;
-    invoke-virtual {v4}, LTest;->e()LTest;
-    move-result-object v4
-    new-instance v5, Ljava/io/File;
-    invoke-virtual {v0}, LTest;->b()Ljava/io/File;
-    move-result-object v0
-    const-string v6, "nlp_state"
-    invoke-direct {v5, v0, v6}, Ljava/io/File;-><init>(Ljava/io/File;Ljava/lang/String;)V
-    invoke-virtual {v4}, LTest;->d()J
-    move-result-wide v6
-    invoke-virtual {v4}, LTest;->c()J
-    move-result-wide v8
-    :try_start_25
-    new-instance v0, Ljava/io/FileInputStream;
-    invoke-direct {v0, v5}, Ljava/io/FileInputStream;-><init>(Ljava/io/File;)V
-    new-instance v4, Ljava/io/BufferedInputStream;
-    invoke-direct {v4, v0}, Ljava/io/BufferedInputStream;-><init>(Ljava/io/InputStream;)V
-    iget-object v0, v3, LTest;->g:LTest;
-    invoke-virtual {v0}, LTest;->cB()[B
-    :try_end_34
-    .catch Ljava/io/FileNotFoundException; {:try_start_25 .. :try_end_34} :catch_bf
-    .catch Ljava/lang/SecurityException; {:try_start_25 .. :try_end_34} :catch_c8
-    .catch Ljava/io/IOException; {:try_start_25 .. :try_end_34} :catch_d8
-    move-result-object v0
-    :try_start_35
-    new-instance v5, Ljava/io/DataInputStream;
-    invoke-direct {v5, v4}, Ljava/io/DataInputStream;-><init>(Ljava/io/InputStream;)V
-    invoke-virtual {v5}, Ljava/io/DataInputStream;->readUnsignedShort()I
-    move-result v10
-    if-ne v10, v11, :cond_c4
-    if-ne v10, v11, :cond_b2
-    iget-object v10, v3, LTest;->f:LTest;
-    if-nez v10, :cond_4d
-    const/4 v10, 0x0
-    invoke-static {v0, v10}, LTest;->a([BLTest;)LTest;
-    move-result-object v0
-    iput-object v0, v3, LTest;->f:LTest;
-    :cond_4d
-    iget-object v0, v3, LTest;->f:LTest;
-    invoke-virtual {v0, v5}, LTest;->a(Ljava/io/DataInputStream;)LTest;
-    move-result-object v0
-    iget-object v0, v0, LTest;->b:Ljava/lang/Object;
-    check-cast v0, [B
-    invoke-static {v0}, Ljava/nio/ByteBuffer;->wrap([B)Ljava/nio/ByteBuffer;
-    :try_end_5a
-    .catch Ljava/io/IOException; {:try_start_35 .. :try_end_5a} :catch_ba
-    .catch Ljava/io/FileNotFoundException; {:try_start_35 .. :try_end_5a} :catch_bf
-    .catch Ljava/lang/SecurityException; {:try_start_35 .. :try_end_5a} :catch_c8
-    move-result-object v5
-    :try_start_5b
-    invoke-virtual {v5}, Ljava/nio/ByteBuffer;->getLong()J
-    move-result-wide v10
-    invoke-virtual {v5}, Ljava/nio/ByteBuffer;->getLong()J
-    move-result-wide v12
-    add-long/2addr v10, v12
-    sub-long v6, v10, v6
-    invoke-static {v8, v9, v6, v7}, Ljava/lang/Math;->min(JJ)J
-    move-result-wide v6
-    invoke-virtual {v5}, Ljava/nio/ByteBuffer;->get()B
-    move-result v0
-    if-ne v0, v1, :cond_cd
-    move v0, v1
-    :goto_71
-    invoke-virtual {v3, v6, v7, v0}, LTest;->a(JZ)V
-    :try_end_74
-    .catch Ljava/lang/IllegalArgumentException; {:try_start_5b .. :try_end_74} :catch_cf
-    .catch Ljava/nio/BufferUnderflowException; {:try_start_5b .. :try_end_74} :catch_dd
-    .catch Ljava/io/IOException; {:try_start_5b .. :try_end_74} :catch_ba
-    .catch Ljava/io/FileNotFoundException; {:try_start_5b .. :try_end_74} :catch_bf
-    .catch Ljava/lang/SecurityException; {:try_start_5b .. :try_end_74} :catch_c8
-    :try_start_74
-    iget-object v0, v3, LTest;->d:LTest;
-    invoke-virtual {v0, v5}, LTest;->c(Ljava/nio/ByteBuffer;)V
-    iget-object v0, v3, LTest;->e:LTest;
-    invoke-virtual {v0, v5}, LTest;->c(Ljava/nio/ByteBuffer;)V
-    :try_end_7e
-    .catch Ljava/io/IOException; {:try_start_74 .. :try_end_7e} :catch_ba
-    .catch Ljava/io/FileNotFoundException; {:try_start_74 .. :try_end_7e} :catch_bf
-    .catch Ljava/lang/SecurityException; {:try_start_74 .. :try_end_7e} :catch_c8
-    :goto_7e
-    :try_start_7e
-    invoke-virtual {v4}, Ljava/io/BufferedInputStream;->close()V
-    :try_end_81
-    .catch Ljava/io/FileNotFoundException; {:try_start_7e .. :try_end_81} :catch_bf
-    .catch Ljava/lang/SecurityException; {:try_start_7e .. :try_end_81} :catch_c8
-    .catch Ljava/io/IOException; {:try_start_7e .. :try_end_81} :catch_d8
-    :goto_81
-    iget-object v0, p0, LTestObject;->i:LTest;
-    invoke-virtual {v0, v1}, LTest;->c(Z)V
-    iget-object v0, p0, LTestObject;->i:LTest;
-    invoke-virtual {v0, v2}, LTest;->d(Z)V
-    iget-object v0, p0, LTestObject;->d:LTest;
-    if-eqz v0, :cond_94
-    iget-object v0, p0, LTestObject;->d:LTest;
-    invoke-virtual {v0}, LTest;->a()V
-    :cond_94
-    iget-object v0, p0, LTestObject;->e:LTest;
-    if-eqz v0, :cond_9d
-    iget-object v0, p0, LTestObject;->e:LTest;
-    invoke-virtual {v0}, LTest;->eV()V
-    :cond_9d
-    iget-object v0, p0, LTestObject;->h:LTest;
-    iget-object v1, p0, LTestObject;->b:LTest;
-    invoke-virtual {v1}, LTest;->e()LTest;
-    move-result-object v1
-    invoke-virtual {v1}, LTest;->c()J
-    move-result-wide v2
-    invoke-virtual {v0, v2, v3}, LTest;->a(J)V
-    iget-object v0, p0, LTestObject;->j:LTest;
-    invoke-virtual {v0}, LTest;->a()V
-    return-void
-    :cond_b2
-    :try_start_b2
-    new-instance v0, Ljava/io/IOException;
-    const-string v4, "Incompatible version."
-    invoke-direct {v0, v4}, Ljava/io/IOException;-><init>(Ljava/lang/String;)V
-    throw v0
-    :try_end_ba
-    .catch Ljava/io/IOException; {:try_start_b2 .. :try_end_ba} :catch_ba
-    .catch Ljava/io/FileNotFoundException; {:try_start_b2 .. :try_end_ba} :catch_bf
-    .catch Ljava/lang/SecurityException; {:try_start_b2 .. :try_end_ba} :catch_c8
-    :catch_ba
-    move-exception v0
-    :try_start_bb
-    invoke-virtual {v3, v8, v9}, LTest;->a(J)V
-    throw v0
-    :try_end_bf
-    .catch Ljava/io/FileNotFoundException; {:try_start_bb .. :try_end_bf} :catch_bf
-    .catch Ljava/lang/SecurityException; {:try_start_bb .. :try_end_bf} :catch_c8
-    .catch Ljava/io/IOException; {:try_start_bb .. :try_end_bf} :catch_d8
-    :catch_bf
-    move-exception v0
-    invoke-virtual {v3, v8, v9}, LTest;->a(J)V
-    goto :goto_81
-    :cond_c4
-    :try_start_c4
-    invoke-virtual {v3, v8, v9}, LTest;->a(J)V
-    :try_end_c7
-    .catch Ljava/io/IOException; {:try_start_c4 .. :try_end_c7} :catch_ba
-    .catch Ljava/io/FileNotFoundException; {:try_start_c4 .. :try_end_c7} :catch_bf
-    .catch Ljava/lang/SecurityException; {:try_start_c4 .. :try_end_c7} :catch_c8
-    goto :goto_7e
-    :catch_c8
-    move-exception v0
-    invoke-virtual {v3, v8, v9}, LTest;->a(J)V
-    goto :goto_81
-    :cond_cd
-    move v0, v2
-    goto :goto_71
-    :catch_cf
-    move-exception v0
-    :goto_d0
-    :try_start_d0
-    new-instance v4, Ljava/io/IOException;
-    const-string v5, "Byte buffer read failed."
-    invoke-direct {v4, v5, v0}, Ljava/io/IOException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
-    throw v4
-    :try_end_d8
-    .catch Ljava/io/IOException; {:try_start_d0 .. :try_end_d8} :catch_ba
-    .catch Ljava/io/FileNotFoundException; {:try_start_d0 .. :try_end_d8} :catch_bf
-    .catch Ljava/lang/SecurityException; {:try_start_d0 .. :try_end_d8} :catch_c8
-    :catch_d8
-    move-exception v0
-    invoke-virtual {v3, v8, v9}, LTest;->a(J)V
-    goto :goto_81
-    :catch_dd
-    move-exception v0
-    goto :goto_d0
-.end method
diff --git a/src/test/smali/multiple-returns/MultipleReturns.smali b/src/test/smali/multiple-returns/MultipleReturns.smali
deleted file mode 100644
index 145736b..0000000
--- a/src/test/smali/multiple-returns/MultipleReturns.smali
+++ /dev/null
@@ -1,126 +0,0 @@
-# Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-.class public LTest;
-
-.super Ljava/lang/Object;
-
-.field static private result:Ljava/lang/String;
-
-.method public static test1(Z)Ljava/lang/String;
-    .locals 1
-    .param p0
-
-    if-eqz p0, :false_branch
-
-    const-string v0, "T"
-    return-object v0
-
-    :false_branch
-    const-string v0, "F"
-    return-object v0
-.end method
-
-.method public static test2(Z)V
-    .locals 1
-    .param p0
-
-    if-eqz p0, :false_branch
-
-    const-string v0, "t"
-    sput-object v0, LTest;->result:Ljava/lang/String;
-    return-void
-
-    :false_branch
-    const-string v0, "f"
-    sput-object v0, LTest;->result:Ljava/lang/String;
-    return-void
-.end method
-
-.method public static test3(Z)J
-    .locals 2
-    .param p0
-
-    if-eqz p0, :false_branch
-
-    const-wide v0, 0x1
-    return-wide v0
-
-    :false_branch
-    const-wide/high16 v0, 0x4000000000000000L
-    return-wide v0
-.end method
-
-.method public static test4(Z)Z
-    .locals 0
-    .param p0
-
-    if-eqz p0, :false_branch
-
-    return p0
-
-    :false_branch
-    return p0
-.end method
-
-.method public static main([Ljava/lang/String;)V
-    .locals 3
-    .param p0
-
-    sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
-
-    const/4 v1, 0x1
-    invoke-static {v1}, LTest;->test1(Z)Ljava/lang/String;
-    move-result-object v1
-    invoke-virtual {v0, v1}, Ljava/io/PrintStream;->print(Ljava/lang/Object;)V
-
-    const/4 v1, 0x0
-    invoke-static {v1}, LTest;->test1(Z)Ljava/lang/String;
-    move-result-object v1
-    invoke-virtual {v0, v1}, Ljava/io/PrintStream;->print(Ljava/lang/Object;)V
-
-    const/4 v1, 0x1
-    invoke-static {v1}, LTest;->test2(Z)V
-    sget-object v1, LTest;->result:Ljava/lang/String;
-    invoke-virtual {v0, v1}, Ljava/io/PrintStream;->print(Ljava/lang/Object;)V
-
-    const/4 v1, 0x0
-    invoke-static {v1}, LTest;->test2(Z)V
-    sget-object v1, LTest;->result:Ljava/lang/String;
-    invoke-virtual {v0, v1}, Ljava/io/PrintStream;->print(Ljava/lang/Object;)V
-
-    invoke-virtual {v0}, Ljava/io/PrintStream;->println()V
-
-    const/4 v1, 0x1
-    invoke-static {v1}, LTest;->test3(Z)J
-    move-result-wide v1
-    invoke-static {v1, v2}, Ljava/lang/Long;->toString(J)Ljava/lang/String;
-    move-result-object v1
-    invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
-
-    const/4 v1, 0x0
-    invoke-static {v1}, LTest;->test3(Z)J
-    move-result-wide v1
-    invoke-static {v1, v2}, Ljava/lang/Long;->toString(J)Ljava/lang/String;
-    move-result-object v1
-    invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
-
-    const/4 v1, 0x1
-    invoke-static {v1}, LTest;->test4(Z)Z
-    move-result v1
-    invoke-static {v1}, Ljava/lang/Boolean;->toString(Z)Ljava/lang/String;
-    move-result-object v1
-    invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
-
-    const/4 v1, 0x0
-    invoke-static {v1}, LTest;->test4(Z)Z
-    move-result v1
-    invoke-static {v1}, Ljava/lang/Boolean;->toString(Z)Ljava/lang/String;
-    move-result-object v1
-    invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
-
-    return-void
-.end method
-
-
diff --git a/src/test/smali/new-instance-and-init/Test.java b/src/test/smali/new-instance-and-init/Test.java
deleted file mode 100644
index a47e69d..0000000
--- a/src/test/smali/new-instance-and-init/Test.java
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-public class Test {
-
-  public Test(int i) {
-    System.out.println("Test(" + i + ")");
-  }
-
-  public static void main(String[] args) {
-    TestObject.allocate(0);
-    TestObject.allocate(4);
-    TestObject.allocate(10);
-  }
-}
diff --git a/src/test/smali/new-instance-and-init/TestObject.java b/src/test/smali/new-instance-and-init/TestObject.java
deleted file mode 100644
index 003f09d..0000000
--- a/src/test/smali/new-instance-and-init/TestObject.java
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-public class TestObject {
-  public static void allocate(int i) {
-  }
-}
diff --git a/src/test/smali/new-instance-and-init/TestObject.smali b/src/test/smali/new-instance-and-init/TestObject.smali
deleted file mode 100644
index 665de1b..0000000
--- a/src/test/smali/new-instance-and-init/TestObject.smali
+++ /dev/null
@@ -1,26 +0,0 @@
-# Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-.class public final LTestObject;
-.super Ljava/lang/Object;
-
-.method public static allocate(I)V
-    .registers 4
-    new-instance v2, LTest;
-    if-nez v3, :cond_9
-    const/4 v1, 0x0
-    invoke-direct {v2, v1}, LTest;-><init>(I)V
-    :goto_8
-    return-void
-    :cond_9
-    const/16 v0, 0xa
-    if-ge v3, v0, :cond_14
-    const/4 v1, 0x0
-    invoke-direct {v2, v1}, LTest;-><init>(I)V
-    goto :goto_8
-    :cond_14
-    const/4 v1, 0x0
-    invoke-direct {v2, v1}, LTest;-><init>(I)V
-    goto :goto_8
-.end method
\ No newline at end of file
diff --git a/src/test/smali/overlapping-long-registers/Overlapping.smali b/src/test/smali/overlapping-long-registers/Overlapping.smali
deleted file mode 100644
index 167eb1b..0000000
--- a/src/test/smali/overlapping-long-registers/Overlapping.smali
+++ /dev/null
@@ -1,53 +0,0 @@
-# Copyright (c) 2017, the R8 project authors. Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-# Some versions of dalvik had a bug where you cannot use the second half of an input long
-# as the first part of an output long. This smali code explicitly has that issue so the
-# generated dex file can be used to test art/dalvik versions.
-#
-# The issue was that if you have
-#
-#   add-long v3, v0, v2
-#
-# dalvik would add v0 and v2 and store the result in v3 before adding v1 and v3 (now clobbered).
-
-.class public LTest;
-
-.super Ljava/lang/Object;
-
-.method static add(JJ)J
-    .locals 5
-    move-wide v0, p0
-    move-wide v2, p2
-    add-long v3, v0, v2
-    return-wide v3
-.end method
-
-.method public static main([Ljava/lang/String;)V
-    .locals 10
-
-    sget-object v5, Ljava/lang/System;->out:Ljava/io/PrintStream;
-
-    const-wide/high16 v0, 0x4000000000000000L
-    const-wide/high16 v2, 0x4100000000000000L
-    invoke-static {v0, v1, v2, v3}, LTest;->add(JJ)J
-    move-result-wide v6
-    invoke-virtual {v5, v6, v7}, Ljava/io/PrintStream;->println(J)V
-
-    # Adding loop in an attempt to get the jit to process the add method.
-    const v8, 1000000
-    const v9, 1
-    :loop
-    if-eqz v8, :exit
-    const-wide v0, 0x4000000000040000L
-    const-wide v2, 0x4100000000041000L
-    invoke-static {v0, v1, v2, v3}, LTest;->add(JJ)J
-    move-result-wide v6
-    sub-int v8, v8, v9
-    goto :loop
-
-    :exit
-    invoke-virtual {v5, v6, v7}, Ljava/io/PrintStream;->println(J)V
-    return-void
-.end method
diff --git a/src/test/smali/packed-switch/PackedSwitch.smali b/src/test/smali/packed-switch/PackedSwitch.smali
deleted file mode 100644
index 30ab926..0000000
--- a/src/test/smali/packed-switch/PackedSwitch.smali
+++ /dev/null
@@ -1,106 +0,0 @@
-# Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-.class public LTest;
-
-.super Ljava/lang/Object;
-
-# Empty packed switch
-.method public static test1(I)I
-  .registers 1
-  packed-switch v0, :packed_switch_data
-  const/4 v0, 0x1
-  return v0
-
-  :packed_switch_data
-  .packed-switch 0x0
-  .end packed-switch
-.end method
-
-# Empty packed switch after data
-.method public static test2(I)I
-  .registers 1
-
-  goto :packed_switch
-
-  :packed_switch_data
-  .packed-switch 0x0
-  .end packed-switch
-
-  :packed_switch
-  packed-switch v0, :packed_switch_data
-  const/4 v0, 0x2
-  return v0
-.end method
-
-# Packed switch after data
-.method public static test3(I)I
-  .registers 1
-
-  goto :packed_switch
-
-  :case_0
-  const/4 v0, 0x3
-  goto :return
-
-  :packed_switch_data
-  .packed-switch 0x0
-    :case_0
-    :case_1
-  .end packed-switch
-
-  :packed_switch
-  packed-switch v0, :packed_switch_data
-  const/4 v0, 0x5
-  goto :return
-
-  :case_1
-  const/4 v0, 0x4
-
-  :return
-  return v0
-.end method
-
-.method public static main([Ljava/lang/String;)V
-    .locals 2
-
-    sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
-
-    const/4 v1, 0x0
-    invoke-static {v1}, LTest;->test1(I)I
-    move-result v1
-    invoke-static {v1}, Ljava/lang/Integer;->toString(I)Ljava/lang/String;
-    move-result-object v1
-    invoke-virtual {v0, v1}, Ljava/io/PrintStream;->print(Ljava/lang/Object;)V
-
-    const/4 v1, 0x0
-    invoke-static {v1}, LTest;->test2(I)I
-    move-result v1
-    invoke-static {v1}, Ljava/lang/Integer;->toString(I)Ljava/lang/String;
-    move-result-object v1
-    invoke-virtual {v0, v1}, Ljava/io/PrintStream;->print(Ljava/lang/Object;)V
-
-    const/4 v1, 0x0
-    invoke-static {v1}, LTest;->test3(I)I
-    move-result v1
-    invoke-static {v1}, Ljava/lang/Integer;->toString(I)Ljava/lang/String;
-    move-result-object v1
-    invoke-virtual {v0, v1}, Ljava/io/PrintStream;->print(Ljava/lang/Object;)V
-
-    const/4 v1, 0x1
-    invoke-static {v1}, LTest;->test3(I)I
-    move-result v1
-    invoke-static {v1}, Ljava/lang/Integer;->toString(I)Ljava/lang/String;
-    move-result-object v1
-    invoke-virtual {v0, v1}, Ljava/io/PrintStream;->print(Ljava/lang/Object;)V
-
-    const/4 v1, 0x2
-    invoke-static {v1}, LTest;->test3(I)I
-    move-result v1
-    invoke-static {v1}, Ljava/lang/Integer;->toString(I)Ljava/lang/String;
-    move-result-object v1
-    invoke-virtual {v0, v1}, Ljava/io/PrintStream;->print(Ljava/lang/Object;)V
-
-    return-void
-.end method
diff --git a/src/test/smali/phi-removal-regression/Test.java b/src/test/smali/phi-removal-regression/Test.java
deleted file mode 100644
index 7accd02..0000000
--- a/src/test/smali/phi-removal-regression/Test.java
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-public class Test {
-  boolean returnBoolean() {
-    System.out.println("returnBoolean");
-    return true;
-  }
-
-  boolean returnTheOtherBoolean(Test a) {
-    System.out.println("returnTheOtherBoolean");
-    return a.returnBoolean();
-  }
-
-  public static void main(String[] args) {
-    new TestObject().a(new Test(), 42);
-  }
-}
diff --git a/src/test/smali/phi-removal-regression/TestObject.java b/src/test/smali/phi-removal-regression/TestObject.java
deleted file mode 100644
index 8a93611..0000000
--- a/src/test/smali/phi-removal-regression/TestObject.java
+++ /dev/null
@@ -1,9 +0,0 @@
-// Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-public class TestObject {
-  public boolean a(Test a, int i) {
-    return true;
-  }
-}
diff --git a/src/test/smali/phi-removal-regression/TestObject.smali b/src/test/smali/phi-removal-regression/TestObject.smali
deleted file mode 100644
index 66efa4f..0000000
--- a/src/test/smali/phi-removal-regression/TestObject.smali
+++ /dev/null
@@ -1,64 +0,0 @@
-# Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-.class public final LTestObject;
-.super Ljava/lang/Object;
-
-.field final list:Ljava/util/ArrayList;
-.field private final s:Z
-
-.method public constructor <init>()V
-    .registers 1
-    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
-    return-void
-.end method
-
-.method public final a(LTest;I)Z
-    .registers 9
-    .prologue
-    const/4 v2, 0x1
-    const/4 v1, 0x0
-    invoke-virtual {p1}, LTest;->returnBoolean()Z
-    move-result v0
-    if-eqz v0, :cond_a
-    move v0, v1
-    :goto_9
-    return v0
-    :cond_a
-    and-int/lit8 v0, p2, 0x2
-    if-nez v0, :cond_14
-    iget-boolean v0, p0, LTestObject;->b:Z
-    if-eqz v0, :cond_14
-    move v0, v2
-    goto :goto_9
-    :cond_14
-    iget-object v0, p0, LTestObject;->list:Ljava/util/ArrayList;
-    invoke-virtual {v0}, Ljava/util/ArrayList;->size()I
-    move-result v4
-    move v3, v1
-    :goto_1b
-    if-ge v3, v4, :cond_3b
-    iget-object v0, p0, LTestObject;->list:Ljava/util/ArrayList;
-    invoke-virtual {v0, v3}, Ljava/util/ArrayList;->get(I)Ljava/lang/Object;
-    move-result-object v0
-    check-cast v0, LTest;
-    and-int/lit8 v5, p2, 0x1
-    if-eqz v5, :cond_2f
-    invoke-virtual {v0}, LTest;->returnBoolean()Z
-    move-result v5
-    if-nez v5, :cond_37
-    :cond_2f
-    invoke-virtual {v0, p1}, LTest;->returnTheOtherBoolean(LTest;)Z
-    move-result v0
-    if-eqz v0, :cond_37
-    move v0, v2
-    goto :goto_9
-    :cond_37
-    add-int/lit8 v0, v3, 0x1
-    move v3, v0
-    goto :goto_1b
-    :cond_3b
-    move v0, v1
-    goto :goto_9
-.end method
diff --git a/src/test/smali/regression/33336471/33336471.smali b/src/test/smali/regression/33336471/33336471.smali
deleted file mode 100644
index 87e9cf6..0000000
--- a/src/test/smali/regression/33336471/33336471.smali
+++ /dev/null
@@ -1,204 +0,0 @@
-# Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-.class public LTest;
-
-.super Ljava/lang/Object;
-
-# This method is not called by the test, and is only for reference of dex code failing on
-# art from Android 5.1.1 with mixed int/float constants.
-# When run dex2oat prints the warning:
-#
-# dex2oat W  7568  7571 art/compiler/dex/vreg_analysis.cc:367]
-# void Test.intAndFloatZeroConstantsNotWorking() op at block 6 has both fp and core/ref uses for
-# same def.
-.method static intAndFloatZeroConstantsNotWorking()V
-    .locals 8
-
-    const-string        v6, "START"
-    sget-object         v7, Ljava/lang/System;->out:Ljava/io/PrintStream;
-    invoke-virtual      {v7, v6}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
-
-    const/high16        v0, 0x3f800000  # 1.0
-    const/4             v1, 0x00  # 0 / 0.0
-    const/4             v3, 2
-    move                v4, v1
-
-  :label_a
-    invoke-virtual      {v7, v4}, Ljava/io/PrintStream;->println(I)V
-    invoke-virtual      {v7, v3}, Ljava/io/PrintStream;->println(I)V
-    if-ge               v4, v3, :label_b
-    const-string        v6, "LOOP"
-    invoke-virtual      {v7, v6}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
-    add-int/lit8        v4, v4, 0x01  # 1
-    goto                :label_a
-
-  :label_b
-    const/4             v5, 0x01
-    new-array           v5, v5, [F
-    const/4             v3, 0x00
-    aget                v4, v5, v3
-    cmpl-float          v1, v4, v1
-    if-nez              v1, :label_c
-    cmpl-float          v0, v4, v0
-    if-eqz              v0, :label_c
-    const-string        v0, "DONE"
-    invoke-virtual      {v7, v0}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
-    goto                :label_d
-
-  :label_c
-    const-string        v0, "FLOAT COMPARISON FAILED"
-    invoke-virtual      {v7, v0}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
-
-  :label_d
-    return-void
-.end method
-
-.method static intAndFloatZeroConstants()V
-    .locals 8
-
-    const-string        v6, "START"
-    sget-object         v7, Ljava/lang/System;->out:Ljava/io/PrintStream;
-    invoke-virtual      {v7, v6}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
-
-    const/high16        v0, 0x3f800000  # 1.0
-    const/4             v1, 0x00  # 0
-    const/4             v2, 0x00  # 0.0
-    const/4             v3, 2
-    move                v4, v1
-
-  :label_a
-    invoke-virtual      {v7, v4}, Ljava/io/PrintStream;->println(I)V
-    invoke-virtual      {v7, v3}, Ljava/io/PrintStream;->println(I)V
-    if-ge               v4, v3, :label_b
-    const-string        v6, "LOOP"
-    invoke-virtual      {v7, v6}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
-    add-int/lit8        v4, v4, 0x01  # 1
-    goto                :label_a
-
-  :label_b
-    const/4             v5, 0x01
-    new-array           v5, v5, [F
-    const/4             v3, 0x00
-    aget                v4, v5, v3
-    cmpl-float          v1, v4, v2
-    if-nez              v1, :label_c
-    cmpl-float          v0, v4, v0
-    if-eqz              v0, :label_c
-    const-string        v0, "DONE"
-    invoke-virtual      {v7, v0}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
-    goto                :label_d
-
-  :label_c
-    const-string        v0, "FLOAT COMPARISON FAILED"
-    invoke-virtual      {v7, v0}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
-
-  :label_d
-    return-void
-.end method
-
-# This method is not called by the test, and is only for reference of dex code failing on
-# art from Android 5.1.1 with mixed long/double constants.
-# This code does actually work, but dex2oat still prints the warning:
-#
-# dex2oat W  7568  7571 art/compiler/dex/vreg_analysis.cc:367]
-# void Test.longAndDoubleZeroConstantsNotWorking() op at block 6 has both fp and core/ref uses
-#for same def.
-.method static longAndDoubleZeroConstantsNotWorking()V
-    .locals 14
-
-    const-string        v12, "START"
-    sget-object         v13, Ljava/lang/System;->out:Ljava/io/PrintStream;
-    invoke-virtual      {v13, v12}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
-
-    const-wide/high16   v0, 0x3f80000000000000L  # 1.0 0->0 1->2 2->4 3->6 4->8 5->10+11 6->12 7->13
-    const-wide/16       v2, 0x00L  # 0 / 0.0
-    const-wide/16       v6, 2
-    move-wide           v8, v2
-
-  :label_a
-    invoke-virtual      {v13, v8, v9}, Ljava/io/PrintStream;->println(J)V
-    invoke-virtual      {v13, v6, v7}, Ljava/io/PrintStream;->println(J)V
-    cmp-long            v12, v8, v6
-    if-gez              v12, :label_b
-    const-string        v12, "LOOP"
-    invoke-virtual      {v13, v12}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
-    const-wide/16       v10, 0x01
-    add-long            v8, v8, v10
-    goto                :label_a
-
-  :label_b
-    const/4             v10, 0x01
-    new-array           v10, v10, [D
-    const/4             v6, 0x00
-    aget-wide           v8, v10, v6
-    cmpl-double         v2, v8, v2
-    if-nez              v2, :label_c
-    cmpl-double         v0, v8, v0
-    if-eqz              v0, :label_c
-    const-string        v0, "DONE"
-    invoke-virtual      {v13, v0}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
-    goto                :label_d
-
-  :label_c
-    const-string        v0, "FLOAT COMPARISON FAILED"
-    invoke-virtual      {v13, v0}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
-
-  :label_d
-    return-void
-.end method
-
-.method static longAndDoubleZeroConstants()V
-    .locals 14
-
-    const-string        v12, "START"
-    sget-object         v13, Ljava/lang/System;->out:Ljava/io/PrintStream;
-    invoke-virtual      {v13, v12}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
-
-    const-wide/high16   v0, 0x3f80000000000000L
-    const-wide/16       v2, 0x00L  # 0
-    const-wide/16       v4, 0x00L  # 0.0
-    const-wide/16       v6, 2
-    move-wide           v8, v2
-
-  :label_a
-    invoke-virtual      {v13, v8, v9}, Ljava/io/PrintStream;->println(J)V
-    invoke-virtual      {v13, v6, v7}, Ljava/io/PrintStream;->println(J)V
-    cmp-long            v12, v8, v6
-    if-gez              v12, :label_b
-    const-string        v12, "LOOP"
-    invoke-virtual      {v13, v12}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
-    const-wide/16       v10, 0x01
-    add-long            v8, v8, v10
-    goto                :label_a
-
-  :label_b
-    const/4             v10, 0x01
-    new-array           v10, v10, [D
-    const/4             v6, 0x00
-    aget-wide           v8, v10, v6
-    cmpl-double         v2, v8, v4
-    if-nez              v2, :label_c
-    cmpl-double         v0, v8, v0
-    if-eqz              v0, :label_c
-    const-string        v0, "DONE"
-    invoke-virtual      {v13, v0}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
-    goto                :label_d
-
-  :label_c
-    const-string        v0, "DOUBLE COMPARISON FAILED"
-    invoke-virtual      {v13, v0}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
-
-  :label_d
-    return-void
-.end method
-
-.method public static main([Ljava/lang/String;)V
-    .locals 0
-
-    invoke-static {}, LTest;->intAndFloatZeroConstants()V
-    invoke-static {}, LTest;->longAndDoubleZeroConstants()V
-
-    return-void
-.end method
diff --git a/src/test/smali/regression/33846227/33846227.smali b/src/test/smali/regression/33846227/33846227.smali
deleted file mode 100644
index c8553a7..0000000
--- a/src/test/smali/regression/33846227/33846227.smali
+++ /dev/null
@@ -1,36 +0,0 @@
-# Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-# Before Lollipop (Art 5.1.1) Art/Dalvik failed on verification if an empty sparse switch payload
-# was the last instruction in a method. This was originally reported as 19827056, and fixed in
-# https://android.googlesource.com/platform/art/+/9ccd151d0d27a729f88af9d00285afe4d147981a
-
-# This test is copied from
-# https://android.googlesource.com/platform/art/+/9ccd151d0d27a729f88af9d00285afe4d147981a
-.class public LTest;
-.super Ljava/lang/Object;
-
-.method public static run()V
-    .registers 2
-
-    :start
-    const v0, 0
-
-    sparse-switch v0, :SparseSwitch
-
-    return-void
-
-    :SparseSwitch
-    .sparse-switch
-    .end sparse-switch
-
-.end method
-
-.method public static main([Ljava/lang/String;)V
-    .locals 0
-
-    invoke-static {}, LTest;->run()V
-
-    return-void
-.end method
diff --git a/src/test/smali/regression/78072750/78072750.smali b/src/test/smali/regression/78072750/78072750.smali
deleted file mode 100644
index ecf4668..0000000
--- a/src/test/smali/regression/78072750/78072750.smali
+++ /dev/null
@@ -1,22386 +0,0 @@
-# Copyright (c) 2018, the R8 project authors. Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-.class Landroid/databinding/DataBinderMapperImpl;
-.super Landroid/databinding/DataBinderMapper;
-.source "DataBinderMapperImpl.java"
-
-
-# annotations
-.annotation system Ldalvik/annotation/MemberClasses;
-    value = {
-        Landroid/databinding/DataBinderMapperImpl$InnerBrLookup;
-    }
-.end annotation
-
-
-# direct methods
-.method public constructor <init>()V
-    .registers 1
-
-    .line 5
-    invoke-direct {p0}, Landroid/databinding/DataBinderMapper;-><init>()V
-
-    .line 6
-    return-void
-.end method
-
-
-# virtual methods
-.method public convertBrIdToString(I)Ljava/lang/String;
-    .registers 3
-    .param p1, "id"    # I
-
-    .line 4474
-    if-ltz p1, :cond_d
-
-    sget-object v0, Landroid/databinding/DataBinderMapperImpl$InnerBrLookup;->sKeys:[Ljava/lang/String;
-
-    array-length v0, v0
-
-    if-lt p1, v0, :cond_8
-
-    goto :goto_d
-
-    .line 4477
-    :cond_8
-    sget-object v0, Landroid/databinding/DataBinderMapperImpl$InnerBrLookup;->sKeys:[Ljava/lang/String;
-
-    aget-object v0, v0, p1
-
-    return-object v0
-
-    .line 4475
-    :cond_d
-    :goto_d
-    const/4 v0, 0x0
-
-    return-object v0
-.end method
-
-.method public getDataBinder(Landroid/databinding/DataBindingComponent;Landroid/view/View;I)Landroid/databinding/ViewDataBinding;
-    .registers 8
-    .param p1, "bindingComponent"    # Landroid/databinding/DataBindingComponent;
-    .param p2, "view"    # Landroid/view/View;
-    .param p3, "layoutId"    # I
-
-    .line 9
-    packed-switch p3, :pswitch_data_3bcc
-
-    packed-switch p3, :pswitch_data_3bd6
-
-    packed-switch p3, :pswitch_data_3be2
-
-    packed-switch p3, :pswitch_data_3bea
-
-    packed-switch p3, :pswitch_data_3bf8
-
-    packed-switch p3, :pswitch_data_3c00
-
-    packed-switch p3, :pswitch_data_3c10
-
-    packed-switch p3, :pswitch_data_3c18
-
-    packed-switch p3, :pswitch_data_3c22
-
-    packed-switch p3, :pswitch_data_3c2a
-
-    packed-switch p3, :pswitch_data_3c32
-
-    packed-switch p3, :pswitch_data_3c40
-
-    packed-switch p3, :pswitch_data_3c4c
-
-    packed-switch p3, :pswitch_data_3c58
-
-    packed-switch p3, :pswitch_data_3c62
-
-    packed-switch p3, :pswitch_data_3c72
-
-    packed-switch p3, :pswitch_data_3c8a
-
-    packed-switch p3, :pswitch_data_3cd2
-
-    packed-switch p3, :pswitch_data_3cde
-
-    packed-switch p3, :pswitch_data_3d2a
-
-    packed-switch p3, :pswitch_data_3d92
-
-    packed-switch p3, :pswitch_data_3d9a
-
-    packed-switch p3, :pswitch_data_3da8
-
-    packed-switch p3, :pswitch_data_3db2
-
-    packed-switch p3, :pswitch_data_3dd2
-
-    packed-switch p3, :pswitch_data_3de6
-
-    packed-switch p3, :pswitch_data_3df2
-
-    packed-switch p3, :pswitch_data_3dfc
-
-    packed-switch p3, :pswitch_data_3e08
-
-    packed-switch p3, :pswitch_data_3e12
-
-    packed-switch p3, :pswitch_data_3e20
-
-    packed-switch p3, :pswitch_data_3e2a
-
-    packed-switch p3, :pswitch_data_3e34
-
-    packed-switch p3, :pswitch_data_3e42
-
-    packed-switch p3, :pswitch_data_3e52
-
-    sparse-switch p3, :sswitch_data_3e5c
-
-    .line 2648
-    const/4 v0, 0x0
-
-    return-object v0
-
-    .line 1779
-    :sswitch_6e
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1780
-    .local v0, "tag":Ljava/lang/Object;
-    if-nez v0, :cond_7d
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1781
-    :cond_7d
-    const-string v1, "layout/toolbar_onboarding_progress_layout_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_8b
-
-    .line 1782
-    new-instance v1, Lcom/classdojo/android/databinding/ToolbarOnboardingProgressLayoutBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ToolbarOnboardingProgressLayoutBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1784
-    :cond_8b
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for toolbar_onboarding_progress_layout is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 825
-    .end local v0    # "tag":Ljava/lang/Object;
-    :sswitch_a2
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 826
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_b1
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 827
-    :cond_b1
-    const-string v1, "layout/toolbar_gray_layout_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_bf
-
-    .line 828
-    new-instance v1, Lcom/classdojo/android/databinding/ToolbarGrayLayoutBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ToolbarGrayLayoutBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 830
-    :cond_bf
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for toolbar_gray_layout is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 942
-    .end local v0    # "tag":Ljava/lang/Object;
-    :sswitch_d6
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 943
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_e5
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 944
-    :cond_e5
-    const-string v1, "layout/toolbar_base_layout_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_f3
-
-    .line 945
-    new-instance v1, Lcom/classdojo/android/databinding/ToolbarBaseLayoutBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ToolbarBaseLayoutBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 947
-    :cond_f3
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for toolbar_base_layout is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2259
-    .end local v0    # "tag":Ljava/lang/Object;
-    :sswitch_10a
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2260
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_119
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2261
-    :cond_119
-    const-string v1, "layout/thumbnail_item_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_127
-
-    .line 2262
-    new-instance v1, Lcom/classdojo/components/databinding/ThumbnailItemBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/components/databinding/ThumbnailItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2264
-    :cond_127
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for thumbnail_item is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1368
-    .end local v0    # "tag":Ljava/lang/Object;
-    :sswitch_13e
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1369
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_14d
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1370
-    :cond_14d
-    const-string v1, "layout/story_post_created_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_15b
-
-    .line 1371
-    new-instance v1, Lcom/classdojo/android/databinding/StoryPostCreatedBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/StoryPostCreatedBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1373
-    :cond_15b
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for story_post_created is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 315
-    .end local v0    # "tag":Ljava/lang/Object;
-    :sswitch_172
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 316
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_181
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 317
-    :cond_181
-    const-string v1, "layout/setup_skills_list_item_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_18f
-
-    .line 318
-    new-instance v1, Lcom/classdojo/android/databinding/SetupSkillsListItemBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/SetupSkillsListItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 320
-    :cond_18f
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for setup_skills_list_item is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1518
-    .end local v0    # "tag":Ljava/lang/Object;
-    :sswitch_1a6
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1519
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_1b5
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1520
-    :cond_1b5
-    const-string v1, "layout/popup_item_copy_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_1c3
-
-    .line 1521
-    new-instance v1, Lcom/classdojo/android/databinding/PopupItemCopyBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/PopupItemCopyBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1523
-    :cond_1c3
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for popup_item_copy is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 585
-    .end local v0    # "tag":Ljava/lang/Object;
-    :sswitch_1da
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 586
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_1e9
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 587
-    :cond_1e9
-    const-string v1, "layout/placeholder_offline_with_refresh_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_1f7
-
-    .line 588
-    new-instance v1, Lcom/classdojo/android/databinding/PlaceholderOfflineWithRefreshBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/PlaceholderOfflineWithRefreshBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 590
-    :cond_1f7
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for placeholder_offline_with_refresh is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 795
-    .end local v0    # "tag":Ljava/lang/Object;
-    :sswitch_20e
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 796
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_21d
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 797
-    :cond_21d
-    const-string v1, "layout/placeholder_empty_with_refresh_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_22b
-
-    .line 798
-    new-instance v1, Lcom/classdojo/android/databinding/PlaceholderEmptyWithRefreshBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/PlaceholderEmptyWithRefreshBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 800
-    :cond_22b
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for placeholder_empty_with_refresh is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1473
-    .end local v0    # "tag":Ljava/lang/Object;
-    :sswitch_242
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1474
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_251
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1475
-    :cond_251
-    const-string v1, "layout/item_teacher_add_coteacher_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_25f
-
-    .line 1476
-    new-instance v1, Lcom/classdojo/android/databinding/ItemTeacherAddCoteacherBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ItemTeacherAddCoteacherBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1478
-    :cond_25f
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for item_teacher_add_coteacher is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1680
-    .end local v0    # "tag":Ljava/lang/Object;
-    :sswitch_276
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1681
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_285
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1682
-    :cond_285
-    const-string v1, "layout/item_student_drawing_tool_sticker_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_293
-
-    .line 1683
-    new-instance v1, Lcom/classdojo/android/databinding/ItemStudentDrawingToolStickerBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ItemStudentDrawingToolStickerBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1685
-    :cond_293
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for item_student_drawing_tool_sticker is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1161
-    .end local v0    # "tag":Ljava/lang/Object;
-    :sswitch_2aa
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1162
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_2b9
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1163
-    :cond_2b9
-    const-string v1, "layout/item_parent_list_new_message_invite_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_2c7
-
-    .line 1164
-    new-instance v1, Lcom/classdojo/android/databinding/ItemParentListNewMessageInviteBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ItemParentListNewMessageInviteBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1166
-    :cond_2c7
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for item_parent_list_new_message_invite is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1044
-    .end local v0    # "tag":Ljava/lang/Object;
-    :sswitch_2de
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1045
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_2ed
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1046
-    :cond_2ed
-    const-string v1, "layout/item_image_resource_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_2fb
-
-    .line 1047
-    new-instance v1, Lcom/classdojo/android/databinding/ItemImageResourceBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ItemImageResourceBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1049
-    :cond_2fb
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for item_image_resource is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1863
-    .end local v0    # "tag":Ljava/lang/Object;
-    :sswitch_312
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1864
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_321
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1865
-    :cond_321
-    const-string v1, "layout/item_add_student_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_32f
-
-    .line 1866
-    new-instance v1, Lcom/classdojo/android/databinding/ItemAddStudentBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ItemAddStudentBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1868
-    :cond_32f
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for item_add_student is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1287
-    .end local v0    # "tag":Ljava/lang/Object;
-    :sswitch_346
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1288
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_355
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1289
-    :cond_355
-    const-string v1, "layout/fragment_tab_class_wall_item_student_avatar_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_363
-
-    .line 1290
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentTabClassWallItemStudentAvatarBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTabClassWallItemStudentAvatarBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1292
-    :cond_363
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_tab_class_wall_item_student_avatar is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 351
-    .end local v0    # "tag":Ljava/lang/Object;
-    :sswitch_37a
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 352
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_389
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 353
-    :cond_389
-    const-string v1, "layout/fragment_tab_class_wall_generic_button_icon_text_item_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_397
-
-    .line 354
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentTabClassWallGenericButtonIconTextItemBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTabClassWallGenericButtonIconTextItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 356
-    :cond_397
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_tab_class_wall_generic_button_icon_text_item is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 648
-    .end local v0    # "tag":Ljava/lang/Object;
-    :sswitch_3ae
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 649
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_3bd
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 650
-    :cond_3bd
-    const-string v1, "layout/fragment_school_detail_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_3cb
-
-    .line 651
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentSchoolDetailBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentSchoolDetailBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 653
-    :cond_3cb
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_school_detail is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1815
-    .end local v0    # "tag":Ljava/lang/Object;
-    :sswitch_3e2
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1816
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_3f1
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1817
-    :cond_3f1
-    const-string v1, "layout/fragment_group_students_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_3ff
-
-    .line 1818
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentGroupStudentsBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentGroupStudentsBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1820
-    :cond_3ff
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_group_students is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 567
-    .end local v0    # "tag":Ljava/lang/Object;
-    :sswitch_416
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 568
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_425
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 569
-    :cond_425
-    const-string v1, "layout/fragment_account_switcher_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_433
-
-    .line 570
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentAccountSwitcherBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentAccountSwitcherBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 572
-    :cond_433
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_account_switcher is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 978
-    .end local v0    # "tag":Ljava/lang/Object;
-    :sswitch_44a
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 979
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_459
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 980
-    :cond_459
-    const-string v1, "layout/debug_feature_list_item_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_467
-
-    .line 981
-    new-instance v1, Lcom/classdojo/android/databinding/DebugFeatureListItemBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/DebugFeatureListItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 983
-    :cond_467
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for debug_feature_list_item is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1644
-    .end local v0    # "tag":Ljava/lang/Object;
-    :sswitch_47e
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1645
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_48d
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1646
-    :cond_48d
-    const-string v1, "layout/chat_empty_broadcasts_view_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_49b
-
-    .line 1647
-    new-instance v1, Lcom/classdojo/android/databinding/ChatEmptyBroadcastsViewBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ChatEmptyBroadcastsViewBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1649
-    :cond_49b
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for chat_empty_broadcasts_view is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1425
-    .end local v0    # "tag":Ljava/lang/Object;
-    :sswitch_4b2
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1426
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_4c1
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1427
-    :cond_4c1
-    const-string v1, "layout-sw600dp-land/activity_student_capture_home_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_4cf
-
-    .line 1428
-    new-instance v1, Lcom/classdojo/android/databinding/ActivityStudentCaptureHomeBindingSw600dpLandImpl;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityStudentCaptureHomeBindingSw600dpLandImpl;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1430
-    :cond_4cf
-    const-string v1, "layout/activity_student_capture_home_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_4dd
-
-    .line 1431
-    new-instance v1, Lcom/classdojo/android/databinding/ActivityStudentCaptureHomeBindingImpl;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityStudentCaptureHomeBindingImpl;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1433
-    :cond_4dd
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for activity_student_capture_home is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2349
-    .end local v0    # "tag":Ljava/lang/Object;
-    :sswitch_4f4
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2350
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_503
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2351
-    :cond_503
-    const-string v1, "layout/activity_school_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_511
-
-    .line 2352
-    new-instance v1, Lcom/classdojo/android/databinding/ActivitySchoolBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivitySchoolBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2354
-    :cond_511
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for activity_school is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 495
-    .end local v0    # "tag":Ljava/lang/Object;
-    :sswitch_528
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 496
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_537
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 497
-    :cond_537
-    const-string v1, "layout/activity_qrcode_scan_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_545
-
-    .line 498
-    new-instance v1, Lcom/classdojo/android/databinding/ActivityQrcodeScanBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityQrcodeScanBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 500
-    :cond_545
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for activity_qrcode_scan is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 333
-    .end local v0    # "tag":Ljava/lang/Object;
-    :sswitch_55c
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 334
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_56b
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 335
-    :cond_56b
-    const-string v1, "layout/activity_passwordless_login_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_579
-
-    .line 336
-    new-instance v1, Lcom/classdojo/android/databinding/ActivityPasswordlessLoginBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityPasswordlessLoginBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 338
-    :cond_579
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for activity_passwordless_login is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 960
-    .end local v0    # "tag":Ljava/lang/Object;
-    :sswitch_590
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 961
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_59f
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 962
-    :cond_59f
-    const-string v1, "layout/activity_parent_setup_student_account_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_5ad
-
-    .line 963
-    new-instance v1, Lcom/classdojo/android/databinding/ActivityParentSetupStudentAccountBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityParentSetupStudentAccountBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 965
-    :cond_5ad
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for activity_parent_setup_student_account is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1572
-    .end local v0    # "tag":Ljava/lang/Object;
-    :sswitch_5c4
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1573
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_5d3
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1574
-    :cond_5d3
-    const-string v1, "layout/activity_parent_home_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_5e1
-
-    .line 1575
-    new-instance v1, Lcom/classdojo/android/databinding/ActivityParentHomeBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityParentHomeBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1577
-    :cond_5e1
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for activity_parent_home is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1635
-    .end local v0    # "tag":Ljava/lang/Object;
-    :sswitch_5f8
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1636
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_607
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1637
-    :cond_607
-    const-string v1, "layout/activity_parent_checklist_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_615
-
-    .line 1638
-    new-instance v1, Lcom/classdojo/android/databinding/ActivityParentChecklistBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityParentChecklistBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1640
-    :cond_615
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for activity_parent_checklist is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2520
-    .end local v0    # "tag":Ljava/lang/Object;
-    :sswitch_62c
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2521
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_63b
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2522
-    :cond_63b
-    const-string v1, "layout/activity_email_verified_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_649
-
-    .line 2523
-    new-instance v1, Lcom/classdojo/android/databinding/ActivityEmailVerifiedBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityEmailVerifiedBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2525
-    :cond_649
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for activity_email_verified is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1797
-    .end local v0    # "tag":Ljava/lang/Object;
-    :sswitch_660
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1798
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_66f
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1799
-    :cond_66f
-    const-string v1, "layout/activity_class_link_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_67d
-
-    .line 1800
-    new-instance v1, Lcom/classdojo/android/databinding/ActivityClassLinkBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityClassLinkBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1802
-    :cond_67d
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for activity_class_link is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 180
-    .end local v0    # "tag":Ljava/lang/Object;
-    :sswitch_694
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 181
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_6a3
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 182
-    :cond_6a3
-    const-string v1, "layout/activity_add_edit_class_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_6b1
-
-    .line 183
-    new-instance v1, Lcom/classdojo/android/databinding/ActivityAddEditClassBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityAddEditClassBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 185
-    :cond_6b1
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for activity_add_edit_class is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1617
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_6c8
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1618
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_6d7
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1619
-    :cond_6d7
-    const-string v1, "layout/webview_fragment_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_6e5
-
-    .line 1620
-    new-instance v1, Lcom/classdojo/android/databinding/WebviewFragmentBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/WebviewFragmentBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1622
-    :cond_6e5
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for webview_fragment is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 30
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_6fc
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 31
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_70b
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 32
-    :cond_70b
-    const-string v1, "layout/view_teacher_student_connection_text_codes_instructions_header_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_719
-
-    .line 33
-    new-instance v1, Lcom/classdojo/android/databinding/ViewTeacherStudentConnectionTextCodesInstructionsHeaderBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ViewTeacherStudentConnectionTextCodesInstructionsHeaderBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 35
-    :cond_719
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for view_teacher_student_connection_text_codes_instructions_header is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1743
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_730
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1744
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_73f
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1745
-    :cond_73f
-    const-string v1, "layout/view_students_moved_tooltip_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_74d
-
-    .line 1746
-    new-instance v1, Lcom/classdojo/android/databinding/ViewStudentsMovedTooltipBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ViewStudentsMovedTooltipBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1748
-    :cond_74d
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for view_students_moved_tooltip is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2250
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_764
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2251
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_773
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2252
-    :cond_773
-    const-string v1, "layout/view_parent_pending_connection_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_781
-
-    .line 2253
-    new-instance v1, Lcom/classdojo/android/databinding/ViewParentPendingConnectionBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ViewParentPendingConnectionBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2255
-    :cond_781
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for view_parent_pending_connection is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2049
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_798
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2050
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_7a7
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2051
-    :cond_7a7
-    const-string v1, "layout/view_list_header_limit_width_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_7b5
-
-    .line 2052
-    new-instance v1, Lcom/classdojo/android/databinding/ViewListHeaderLimitWidthBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ViewListHeaderLimitWidthBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2054
-    :cond_7b5
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for view_list_header_limit_width is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 207
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_7cc
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 208
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_7db
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 209
-    :cond_7db
-    const-string v1, "layout/view_list_header_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_7e9
-
-    .line 210
-    new-instance v1, Lcom/classdojo/android/databinding/ViewListHeaderBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ViewListHeaderBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 212
-    :cond_7e9
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for view_list_header is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1599
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_800
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1600
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_80f
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1601
-    :cond_80f
-    const-string v1, "layout/view_drawing_tool_sticker_drawer_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_81d
-
-    .line 1602
-    new-instance v1, Lcom/classdojo/android/databinding/ViewDrawingToolStickerDrawerBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ViewDrawingToolStickerDrawerBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1604
-    :cond_81d
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for view_drawing_tool_sticker_drawer is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2538
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_834
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2539
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_843
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2540
-    :cond_843
-    const-string v1, "layout/view_drawing_tool_discard_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_851
-
-    .line 2541
-    new-instance v1, Lcom/classdojo/android/databinding/ViewDrawingToolDiscardBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ViewDrawingToolDiscardBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2543
-    :cond_851
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for view_drawing_tool_discard is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2610
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_868
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2611
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_877
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2612
-    :cond_877
-    const-string v1, "layout/view_drawer_item_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_885
-
-    .line 2613
-    new-instance v1, Lcom/classdojo/android/databinding/ViewDrawerItemBindingImpl;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ViewDrawerItemBindingImpl;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2615
-    :cond_885
-    const-string v1, "layout-sw600dp-land/view_drawer_item_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_893
-
-    .line 2616
-    new-instance v1, Lcom/classdojo/android/databinding/ViewDrawerItemBindingSw600dpLandImpl;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ViewDrawerItemBindingSw600dpLandImpl;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2618
-    :cond_893
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for view_drawer_item is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2286
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_8aa
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2287
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_8b9
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2288
-    :cond_8b9
-    const-string v1, "layout/toolbar_text_post_layout_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_8c7
-
-    .line 2289
-    new-instance v1, Lcom/classdojo/android/databinding/ToolbarTextPostLayoutBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ToolbarTextPostLayoutBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2291
-    :cond_8c7
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for toolbar_text_post_layout is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 441
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_8de
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 442
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_8ed
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 443
-    :cond_8ed
-    const-string v1, "layout/toolbar_text_layout_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_8fb
-
-    .line 444
-    new-instance v1, Lcom/classdojo/android/databinding/ToolbarTextLayoutBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ToolbarTextLayoutBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 446
-    :cond_8fb
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for toolbar_text_layout is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1824
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_912
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1825
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_921
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1826
-    :cond_921
-    const-string v1, "layout/toolbar_teacher_onboarding_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_92f
-
-    .line 1827
-    new-instance v1, Lcom/classdojo/android/databinding/ToolbarTeacherOnboardingBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ToolbarTeacherOnboardingBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1829
-    :cond_92f
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for toolbar_teacher_onboarding is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 924
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_946
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 925
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_955
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 926
-    :cond_955
-    const-string v1, "layout/toolbar_teacher_home_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_963
-
-    .line 927
-    new-instance v1, Lcom/classdojo/android/databinding/ToolbarTeacherHomeBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ToolbarTeacherHomeBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 929
-    :cond_963
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for toolbar_teacher_home is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1377
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_97a
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1378
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_989
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1379
-    :cond_989
-    const-string v1, "layout/toolbar_teacher_approval_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_997
-
-    .line 1380
-    new-instance v1, Lcom/classdojo/android/databinding/ToolbarTeacherApprovalBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ToolbarTeacherApprovalBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1382
-    :cond_997
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for toolbar_teacher_approval is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1698
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_9ae
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1699
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_9bd
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1700
-    :cond_9bd
-    const-string v1, "layout/student_login_list_not_my_class_item_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_9cb
-
-    .line 1701
-    new-instance v1, Lcom/classdojo/android/databinding/StudentLoginListNotMyClassItemBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/StudentLoginListNotMyClassItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1703
-    :cond_9cb
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for student_login_list_not_my_class_item is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1842
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_9e2
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1843
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_9f1
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1844
-    :cond_9f1
-    const-string v1, "layout-sw600dp/student_login_list_item_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_9ff
-
-    .line 1845
-    new-instance v1, Lcom/classdojo/android/databinding/StudentLoginListItemBindingSw600dpImpl;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/StudentLoginListItemBindingSw600dpImpl;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1847
-    :cond_9ff
-    const-string v1, "layout/student_login_list_item_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_a0d
-
-    .line 1848
-    new-instance v1, Lcom/classdojo/android/databinding/StudentLoginListItemBindingImpl;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/StudentLoginListItemBindingImpl;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1850
-    :cond_a0d
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for student_login_list_item is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2124
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_a24
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2125
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_a33
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2126
-    :cond_a33
-    const-string v1, "layout/student_connections_individual_codes_invite_section_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_a41
-
-    .line 2127
-    new-instance v1, Lcom/classdojo/android/databinding/StudentConnectionsIndividualCodesInviteSectionBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/StudentConnectionsIndividualCodesInviteSectionBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2129
-    :cond_a41
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for student_connections_individual_codes_invite_section is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1224
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_a58
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1225
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_a67
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1226
-    :cond_a67
-    const-string v1, "layout/parent_connections_single_code_invite_section_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_a75
-
-    .line 1227
-    new-instance v1, Lcom/classdojo/android/databinding/ParentConnectionsSingleCodeInviteSectionBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ParentConnectionsSingleCodeInviteSectionBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1229
-    :cond_a75
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for parent_connections_single_code_invite_section is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1833
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_a8c
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1834
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_a9b
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1835
-    :cond_a9b
-    const-string v1, "layout/parent_connections_individual_codes_invite_section_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_aa9
-
-    .line 1836
-    new-instance v1, Lcom/classdojo/android/databinding/ParentConnectionsIndividualCodesInviteSectionBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ParentConnectionsIndividualCodesInviteSectionBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1838
-    :cond_aa9
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for parent_connections_individual_codes_invite_section is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 216
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_ac0
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 217
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_acf
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 218
-    :cond_acf
-    const-string v1, "layout/parent_checklist_success_overlay_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_add
-
-    .line 219
-    new-instance v1, Lcom/classdojo/android/databinding/ParentChecklistSuccessOverlayBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ParentChecklistSuccessOverlayBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 221
-    :cond_add
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for parent_checklist_success_overlay is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1890
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_af4
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1891
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_b03
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1892
-    :cond_b03
-    const-string v1, "layout/layout_student_list_empty_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_b11
-
-    .line 1893
-    new-instance v1, Lcom/classdojo/android/databinding/LayoutStudentListEmptyBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/LayoutStudentListEmptyBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1895
-    :cond_b11
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for layout_student_list_empty is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2214
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_b28
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2215
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_b37
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2216
-    :cond_b37
-    const-string v1, "layout/layout_student_connections_list_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_b45
-
-    .line 2217
-    new-instance v1, Lcom/classdojo/android/databinding/LayoutStudentConnectionsListBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/LayoutStudentConnectionsListBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2219
-    :cond_b45
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for layout_student_connections_list is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1395
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_b5c
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1396
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_b6b
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1397
-    :cond_b6b
-    const-string v1, "layout/layout_student_connections_invite_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_b79
-
-    .line 1398
-    new-instance v1, Lcom/classdojo/android/databinding/LayoutStudentConnectionsInviteBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/LayoutStudentConnectionsInviteBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1400
-    :cond_b79
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for layout_student_connections_invite is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1170
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_b90
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1171
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_b9f
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1172
-    :cond_b9f
-    const-string v1, "layout/layout_student_connections_initial_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_bad
-
-    .line 1173
-    new-instance v1, Lcom/classdojo/android/databinding/LayoutStudentConnectionsInitialBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/LayoutStudentConnectionsInitialBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1175
-    :cond_bad
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for layout_student_connections_initial is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2358
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_bc4
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2359
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_bd3
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2360
-    :cond_bd3
-    const-string v1, "layout/layout_progress_footer_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_be1
-
-    .line 2361
-    new-instance v1, Lcom/classdojo/android/databinding/LayoutProgressFooterBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/LayoutProgressFooterBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2363
-    :cond_be1
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for layout_progress_footer is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1215
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_bf8
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1216
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_c07
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1217
-    :cond_c07
-    const-string v1, "layout/layout_parent_connections_list_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_c15
-
-    .line 1218
-    new-instance v1, Lcom/classdojo/android/databinding/LayoutParentConnectionsListBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/LayoutParentConnectionsListBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1220
-    :cond_c15
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for layout_parent_connections_list is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 468
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_c2c
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 469
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_c3b
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 470
-    :cond_c3b
-    const-string v1, "layout/layout_parent_connections_invite_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_c49
-
-    .line 471
-    new-instance v1, Lcom/classdojo/android/databinding/LayoutParentConnectionsInviteBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/LayoutParentConnectionsInviteBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 473
-    :cond_c49
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for layout_parent_connections_invite is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2640
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_c60
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2641
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_c6f
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2642
-    :cond_c6f
-    const-string v1, "layout/layout_parent_connections_initial_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_c7d
-
-    .line 2643
-    new-instance v1, Lcom/classdojo/android/databinding/LayoutParentConnectionsInitialBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/LayoutParentConnectionsInitialBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2645
-    :cond_c7d
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for layout_parent_connections_initial is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2178
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_c94
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2179
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_ca3
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2180
-    :cond_ca3
-    const-string v1, "layout/layout_legacy_video_view_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_cb1
-
-    .line 2181
-    new-instance v1, Lcom/classdojo/android/databinding/LayoutLegacyVideoViewBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/LayoutLegacyVideoViewBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2183
-    :cond_cb1
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for layout_legacy_video_view is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 723
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_cc8
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 724
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_cd7
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 725
-    :cond_cd7
-    const-string v1, "layout/layout_dojo_video_view_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_ce5
-
-    .line 726
-    new-instance v1, Lcom/classdojo/android/databinding/LayoutDojoVideoViewBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/LayoutDojoVideoViewBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 728
-    :cond_ce5
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for layout_dojo_video_view is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 603
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_cfc
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 604
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_d0b
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 605
-    :cond_d0b
-    const-string v1, "layout/layout_create_account_splash_page_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_d19
-
-    .line 606
-    new-instance v1, Lcom/classdojo/android/databinding/LayoutCreateAccountSplashPageBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/LayoutCreateAccountSplashPageBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 608
-    :cond_d19
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for layout_create_account_splash_page is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1965
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_d30
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1966
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_d3f
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1967
-    :cond_d3f
-    const-string v1, "layout/item_teacher_student_text_code_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_d4d
-
-    .line 1968
-    new-instance v1, Lcom/classdojo/android/databinding/ItemTeacherStudentTextCodeBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ItemTeacherStudentTextCodeBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1970
-    :cond_d4d
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for item_teacher_student_text_code is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2475
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_d64
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2476
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_d73
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2477
-    :cond_d73
-    const-string v1, "layout/item_parent_checklist_complete_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_d81
-
-    .line 2478
-    new-instance v1, Lcom/classdojo/android/databinding/ItemParentChecklistCompleteBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ItemParentChecklistCompleteBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2480
-    :cond_d81
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for item_parent_checklist_complete is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1545
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_d98
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1546
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_da7
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1547
-    :cond_da7
-    const-string v1, "layout/item_parent_checklist_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_db5
-
-    .line 1548
-    new-instance v1, Lcom/classdojo/android/databinding/ItemParentChecklistBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ItemParentChecklistBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1550
-    :cond_db5
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for item_parent_checklist is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 714
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_dcc
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 715
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_ddb
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 716
-    :cond_ddb
-    const-string v1, "layout/item_onboarding_class_code_header_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_de9
-
-    .line 717
-    new-instance v1, Lcom/classdojo/android/databinding/ItemOnboardingClassCodeHeaderBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ItemOnboardingClassCodeHeaderBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 719
-    :cond_de9
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for item_onboarding_class_code_header is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1197
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_e00
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1198
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_e0f
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1199
-    :cond_e0f
-    const-string v1, "layout/item_grid_teacher_title_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_e1d
-
-    .line 1200
-    new-instance v1, Lcom/classdojo/android/databinding/ItemGridTeacherTitleBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ItemGridTeacherTitleBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1202
-    :cond_e1d
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for item_grid_teacher_title is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2106
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_e34
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2107
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_e43
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2108
-    :cond_e43
-    const-string v1, "layout/item_file_attachment_view_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_e51
-
-    .line 2109
-    new-instance v1, Lcom/classdojo/android/databinding/ItemFileAttachmentViewBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ItemFileAttachmentViewBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2111
-    :cond_e51
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for item_file_attachment_view is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2502
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_e68
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2503
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_e77
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2504
-    :cond_e77
-    const-string v1, "layout/item_class_code_student_select_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_e85
-
-    .line 2505
-    new-instance v1, Lcom/classdojo/android/databinding/ItemClassCodeStudentSelectBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ItemClassCodeStudentSelectBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2507
-    :cond_e85
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for item_class_code_student_select is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1770
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_e9c
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1771
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_eab
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1772
-    :cond_eab
-    const-string v1, "layout/item_class_code_header_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_eb9
-
-    .line 1773
-    new-instance v1, Lcom/classdojo/android/databinding/ItemClassCodeHeaderBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ItemClassCodeHeaderBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1775
-    :cond_eb9
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for item_class_code_header is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1509
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_ed0
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1510
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_edf
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1511
-    :cond_edf
-    const-string v1, "layout/invite_parent_list_item_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_eed
-
-    .line 1512
-    new-instance v1, Lcom/classdojo/android/databinding/InviteParentListItemBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/InviteParentListItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1514
-    :cond_eed
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for invite_parent_list_item is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 450
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_f04
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 451
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_f13
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 452
-    :cond_f13
-    const-string v1, "layout/invite_list_item_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_f21
-
-    .line 453
-    new-instance v1, Lcom/classdojo/android/databinding/InviteListItemBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/InviteListItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 455
-    :cond_f21
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for invite_list_item is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2241
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_f38
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2242
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_f47
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2243
-    :cond_f47
-    const-string v1, "layout/fragment_web_view_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_f55
-
-    .line 2244
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentWebViewBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentWebViewBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2246
-    :cond_f55
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_web_view is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2574
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_f6c
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2575
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_f7b
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2576
-    :cond_f7b
-    const-string v1, "layout/fragment_video_preview_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_f89
-
-    .line 2577
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentVideoPreviewBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentVideoPreviewBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2579
-    :cond_f89
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_video_preview is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2088
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_fa0
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2089
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_faf
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2090
-    :cond_faf
-    const-string v1, "layout/fragment_teacher_welcome_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_fbd
-
-    .line 2091
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentTeacherWelcomeBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTeacherWelcomeBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2093
-    :cond_fbd
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_teacher_welcome is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1098
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_fd4
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1099
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_fe3
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1100
-    :cond_fe3
-    const-string v1, "layout/fragment_teacher_student_connection_text_codes_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_ff1
-
-    .line 1101
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentTeacherStudentConnectionTextCodesBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTeacherStudentConnectionTextCodesBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1103
-    :cond_ff1
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_teacher_student_connection_text_codes is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2511
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_1008
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2512
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_1017
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2513
-    :cond_1017
-    const-string v1, "layout/fragment_teacher_student_connection_class_code_qr_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_1025
-
-    .line 2514
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentTeacherStudentConnectionClassCodeQrBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTeacherStudentConnectionClassCodeQrBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2516
-    :cond_1025
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_teacher_student_connection_class_code_qr is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1926
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_103c
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1927
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_104b
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1928
-    :cond_104b
-    const-string v1, "layout/fragment_teacher_story_feed_approval_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_1059
-
-    .line 1929
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentTeacherStoryFeedApprovalBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTeacherStoryFeedApprovalBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1931
-    :cond_1059
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_teacher_story_feed_approval is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2385
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_1070
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2386
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_107f
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2387
-    :cond_107f
-    const-string v1, "layout/fragment_teacher_settings_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_108d
-
-    .line 2388
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentTeacherSettingsBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTeacherSettingsBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2390
-    :cond_108d
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_teacher_settings is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1899
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_10a4
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1900
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_10b3
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1901
-    :cond_10b3
-    const-string v1, "layout/fragment_teacher_search_item_empty_teacher_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_10c1
-
-    .line 1902
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentTeacherSearchItemEmptyTeacherBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTeacherSearchItemEmptyTeacherBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1904
-    :cond_10c1
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_teacher_search_item_empty_teacher is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 504
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_10d8
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 505
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_10e7
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 506
-    :cond_10e7
-    const-string v1, "layout/fragment_teacher_connection_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_10f5
-
-    .line 507
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentTeacherConnectionBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTeacherConnectionBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 509
-    :cond_10f5
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_teacher_connection is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1260
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_110c
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1261
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_111b
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1262
-    :cond_111b
-    const-string v1, "layout/fragment_teacher_channel_list_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_1129
-
-    .line 1263
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentTeacherChannelListBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTeacherChannelListBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1265
-    :cond_1129
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_teacher_channel_list is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 843
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_1140
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 844
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_114f
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 845
-    :cond_114f
-    const-string v1, "layout/fragment_teacher_approval_feed_item_text_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_115d
-
-    .line 846
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentTeacherApprovalFeedItemTextBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTeacherApprovalFeedItemTextBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 848
-    :cond_115d
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_teacher_approval_feed_item_text is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2529
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_1174
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2530
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_1183
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2531
-    :cond_1183
-    const-string v1, "layout/fragment_teacher_approval_feed_item_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_1191
-
-    .line 2532
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentTeacherApprovalFeedItemBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTeacherApprovalFeedItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2534
-    :cond_1191
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_teacher_approval_feed_item is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2493
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_11a8
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2494
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_11b7
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2495
-    :cond_11b7
-    const-string v1, "layout/fragment_tab_student_list_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_11c5
-
-    .line 2496
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentTabStudentListBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTabStudentListBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2498
-    :cond_11c5
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_tab_student_list is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1935
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_11dc
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1936
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_11eb
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1937
-    :cond_11eb
-    const-string v1, "layout-sw600dp-land/fragment_tab_story_feed_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_11f9
-
-    .line 1938
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentTabStoryFeedBindingSw600dpLandImpl;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTabStoryFeedBindingSw600dpLandImpl;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1940
-    :cond_11f9
-    const-string v1, "layout/fragment_tab_story_feed_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_1207
-
-    .line 1941
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentTabStoryFeedBindingImpl;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTabStoryFeedBindingImpl;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1943
-    :cond_1207
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_tab_story_feed is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 93
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_121e
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 94
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_122d
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 95
-    :cond_122d
-    const-string v1, "layout/fragment_tab_notification_pending_posts_item_thumbnail_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_123b
-
-    .line 96
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentTabNotificationPendingPostsItemThumbnailBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTabNotificationPendingPostsItemThumbnailBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 98
-    :cond_123b
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_tab_notification_pending_posts_item_thumbnail is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2421
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_1252
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2422
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_1261
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2423
-    :cond_1261
-    const-string v1, "layout/fragment_tab_notification_pending_posts_item_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_126f
-
-    .line 2424
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentTabNotificationPendingPostsItemBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTabNotificationPendingPostsItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2426
-    :cond_126f
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_tab_notification_pending_posts_item is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1143
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_1286
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1144
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_1295
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1145
-    :cond_1295
-    const-string v1, "layout/fragment_tab_notification_list_pending_requests_item_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_12a3
-
-    .line 1146
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentTabNotificationListPendingRequestsItemBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTabNotificationListPendingRequestsItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1148
-    :cond_12a3
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_tab_notification_list_pending_requests_item is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 750
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_12ba
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 751
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_12c9
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 752
-    :cond_12c9
-    const-string v1, "layout/fragment_tab_notification_list_item_header_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_12d7
-
-    .line 753
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentTabNotificationListItemHeaderBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTabNotificationListItemHeaderBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 755
-    :cond_12d7
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_tab_notification_list_item_header is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1455
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_12ee
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1456
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_12fd
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1457
-    :cond_12fd
-    const-string v1, "layout/fragment_tab_notification_list_item_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_130b
-
-    .line 1458
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentTabNotificationListItemBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTabNotificationListItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1460
-    :cond_130b
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_tab_notification_list_item is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1752
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_1322
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1753
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_1331
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1754
-    :cond_1331
-    const-string v1, "layout/fragment_tab_notification_list_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_133f
-
-    .line 1755
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentTabNotificationListBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTabNotificationListBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1757
-    :cond_133f
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_tab_notification_list is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 153
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_1356
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 154
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_1365
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 155
-    :cond_1365
-    const-string v1, "layout/fragment_tab_class_wall_item_webview_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_1373
-
-    .line 156
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentTabClassWallItemWebviewBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTabClassWallItemWebviewBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 158
-    :cond_1373
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_tab_class_wall_item_webview is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1386
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_138a
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1387
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_1399
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1388
-    :cond_1399
-    const-string v1, "layout/fragment_tab_class_wall_item_student_report_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_13a7
-
-    .line 1389
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentTabClassWallItemStudentReportBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTabClassWallItemStudentReportBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1391
-    :cond_13a7
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_tab_class_wall_item_student_report is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1446
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_13be
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1447
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_13cd
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1448
-    :cond_13cd
-    const-string v1, "layout/fragment_tab_class_wall_item_student_permission_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_13db
-
-    .line 1449
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentTabClassWallItemStudentPermissionBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTabClassWallItemStudentPermissionBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1451
-    :cond_13db
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_tab_class_wall_item_student_permission is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1806
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_13f2
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1807
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_1401
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1808
-    :cond_1401
-    const-string v1, "layout/fragment_tab_class_wall_item_parent_empty_checklist_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_140f
-
-    .line 1809
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentTabClassWallItemParentEmptyChecklistBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTabClassWallItemParentEmptyChecklistBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1811
-    :cond_140f
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_tab_class_wall_item_parent_empty_checklist is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 888
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_1426
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 889
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_1435
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 890
-    :cond_1435
-    const-string v1, "layout/fragment_tab_class_wall_item_parent_empty_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_1443
-
-    .line 891
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentTabClassWallItemParentEmptyBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTabClassWallItemParentEmptyBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 893
-    :cond_1443
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_tab_class_wall_item_parent_empty is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 804
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_145a
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 805
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_1469
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 806
-    :cond_1469
-    const-string v1, "layout/fragment_tab_class_wall_item_invite_card_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_1477
-
-    .line 807
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentTabClassWallItemInviteCardBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTabClassWallItemInviteCardBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 809
-    :cond_1477
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_tab_class_wall_item_invite_card is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1251
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_148e
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1252
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_149d
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1253
-    :cond_149d
-    const-string v1, "layout/fragment_tab_class_wall_item_invite_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_14ab
-
-    .line 1254
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentTabClassWallItemInviteBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTabClassWallItemInviteBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1256
-    :cond_14ab
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_tab_class_wall_item_invite is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2013
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_14c2
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2014
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_14d1
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2015
-    :cond_14d1
-    const-string v1, "layout/fragment_tab_class_wall_item_demo_empty_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_14df
-
-    .line 2016
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentTabClassWallItemDemoEmptyBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTabClassWallItemDemoEmptyBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2018
-    :cond_14df
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_tab_class_wall_item_demo_empty is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 522
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_14f6
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 523
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_1505
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 524
-    :cond_1505
-    const-string v1, "layout/fragment_tab_class_wall_item_compose_large_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_1513
-
-    .line 525
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentTabClassWallItemComposeLargeBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTabClassWallItemComposeLargeBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 527
-    :cond_1513
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_tab_class_wall_item_compose_large is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 540
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_152a
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 541
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_1539
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 542
-    :cond_1539
-    const-string v1, "layout/fragment_tab_class_wall_item_compose_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_1547
-
-    .line 543
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentTabClassWallItemComposeBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTabClassWallItemComposeBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 545
-    :cond_1547
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_tab_class_wall_item_compose is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1689
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_155e
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1690
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_156d
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1691
-    :cond_156d
-    const-string v1, "layout/fragment_student_report_selector_item_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_157b
-
-    .line 1692
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentReportSelectorItemBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentReportSelectorItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1694
-    :cond_157b
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_student_report_selector_item is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1554
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_1592
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1555
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_15a1
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1556
-    :cond_15a1
-    const-string v1, "layout/fragment_student_report_list_item_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_15af
-
-    .line 1557
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentReportListItemBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentReportListItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1559
-    :cond_15af
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_student_report_list_item is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 405
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_15c6
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 406
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_15d5
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 407
-    :cond_15d5
-    const-string v1, "layout/fragment_student_report_list_dialog_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_15e3
-
-    .line 408
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentReportListDialogBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentReportListDialogBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 410
-    :cond_15e3
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_student_report_list_dialog is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 270
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_15fa
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 271
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_1609
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 272
-    :cond_1609
-    const-string v1, "layout/fragment_student_report_item_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_1617
-
-    .line 273
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentReportItemBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentReportItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 275
-    :cond_1617
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_student_report_item is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 261
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_162e
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 262
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_163d
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 263
-    :cond_163d
-    const-string v1, "layout/fragment_student_report_charts_item_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_164b
-
-    .line 264
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentReportChartsItemBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentReportChartsItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 266
-    :cond_164b
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_student_report_charts_item is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 594
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_1662
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 595
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_1671
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 596
-    :cond_1671
-    const-string v1, "layout/fragment_student_report_add_note_item_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_167f
-
-    .line 597
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentReportAddNoteItemBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentReportAddNoteItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 599
-    :cond_167f
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_student_report_add_note_item is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 288
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_1696
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 289
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_16a5
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 290
-    :cond_16a5
-    const-string v1, "layout/fragment_student_report_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_16b3
-
-    .line 291
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentReportBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentReportBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 293
-    :cond_16b3
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_student_report is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 324
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_16ca
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 325
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_16d9
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 326
-    :cond_16d9
-    const-string v1, "layout/fragment_student_relation_item_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_16e7
-
-    .line 327
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentRelationItemBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentRelationItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 329
-    :cond_16e7
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_student_relation_item is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1908
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_16fe
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1909
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_170d
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1910
-    :cond_170d
-    const-string v1, "layout/fragment_student_registration_form_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_171b
-
-    .line 1911
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentRegistrationFormBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentRegistrationFormBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1913
-    :cond_171b
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_student_registration_form is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1581
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_1732
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1582
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_1741
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1583
-    :cond_1741
-    const-string v1, "layout/fragment_student_profile_date_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_174f
-
-    .line 1584
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentProfileDateBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentProfileDateBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1586
-    :cond_174f
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_student_profile_date is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2067
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_1766
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2068
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_1775
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2069
-    :cond_1775
-    const-string v1, "layout/fragment_student_login_list_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_1783
-
-    .line 2070
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentLoginListBindingImpl;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentLoginListBindingImpl;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2072
-    :cond_1783
-    const-string v1, "layout-sw600dp/fragment_student_login_list_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_1791
-
-    .line 2073
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentLoginListBindingSw600dpImpl;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentLoginListBindingSw600dpImpl;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2075
-    :cond_1791
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_student_login_list is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 57
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_17a8
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 58
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_17b7
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 59
-    :cond_17b7
-    const-string v1, "layout/fragment_student_drawing_tool_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_17c5
-
-    .line 60
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentDrawingToolBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentDrawingToolBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 62
-    :cond_17c5
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_student_drawing_tool is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 786
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_17dc
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 787
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_17eb
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 788
-    :cond_17eb
-    const-string v1, "layout/fragment_student_connections_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_17f9
-
-    .line 789
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentConnectionsBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentConnectionsBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 791
-    :cond_17f9
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_student_connections is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2484
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_1810
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2485
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_181f
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2486
-    :cond_181f
-    const-string v1, "layout/fragment_student_codes_item_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_182d
-
-    .line 2487
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentCodesItemBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentCodesItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2489
-    :cond_182d
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_student_codes_item is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1707
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_1844
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1708
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_1853
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1709
-    :cond_1853
-    const-string v1, "layout/fragment_student_codes_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_1861
-
-    .line 1710
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentCodesBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentCodesBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1712
-    :cond_1861
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_student_codes is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 684
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_1878
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 685
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_1887
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 686
-    :cond_1887
-    const-string v1, "layout/fragment_student_code_form_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_1895
-
-    .line 687
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentCodeFormBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentCodeFormBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 689
-    :cond_1895
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_student_code_form is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 459
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_18ac
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 460
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_18bb
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 461
-    :cond_18bb
-    const-string v1, "layout/fragment_student_capture_student_list_item_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_18c9
-
-    .line 462
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentCaptureStudentListItemBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentCaptureStudentListItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 464
-    :cond_18c9
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_student_capture_student_list_item is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1332
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_18e0
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1333
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_18ef
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1334
-    :cond_18ef
-    const-string v1, "layout/fragment_student_capture_student_list_home_item_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_18fd
-
-    .line 1335
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentCaptureStudentListHomeItemBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentCaptureStudentListHomeItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1337
-    :cond_18fd
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_student_capture_student_list_home_item is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2631
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_1914
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2632
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_1923
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2633
-    :cond_1923
-    const-string v1, "layout/fragment_student_capture_story_feed_item_participant_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_1931
-
-    .line 2634
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentCaptureStoryFeedItemParticipantBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentCaptureStoryFeedItemParticipantBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2636
-    :cond_1931
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_student_capture_story_feed_item_participant is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1188
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_1948
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1189
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_1957
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1190
-    :cond_1957
-    const-string v1, "layout/fragment_student_capture_story_feed_item_content_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_1965
-
-    .line 1191
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentCaptureStoryFeedItemContentBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentCaptureStoryFeedItemContentBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1193
-    :cond_1965
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_student_capture_story_feed_item_content is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 693
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_197c
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 694
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_198b
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 695
-    :cond_198b
-    const-string v1, "layout-sw600dp-land/fragment_student_capture_story_feed_item_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_1999
-
-    .line 696
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentCaptureStoryFeedItemBindingSw600dpLandImpl;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentCaptureStoryFeedItemBindingSw600dpLandImpl;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 698
-    :cond_1999
-    const-string v1, "layout/fragment_student_capture_story_feed_item_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_19a7
-
-    .line 699
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentCaptureStoryFeedItemBindingImpl;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentCaptureStoryFeedItemBindingImpl;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 701
-    :cond_19a7
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_student_capture_story_feed_item is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 120
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_19be
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 121
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_19cd
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 122
-    :cond_19cd
-    const-string v1, "layout-sw600dp/fragment_student_capture_preview_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_19db
-
-    .line 123
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentCapturePreviewBindingSw600dpImpl;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentCapturePreviewBindingSw600dpImpl;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 125
-    :cond_19db
-    const-string v1, "layout/fragment_student_capture_preview_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_19e9
-
-    .line 126
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentCapturePreviewBindingImpl;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentCapturePreviewBindingImpl;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 128
-    :cond_19e9
-    const-string v1, "layout-sw600dp-land/fragment_student_capture_preview_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_19f7
-
-    .line 129
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentCapturePreviewBindingSw600dpLandImpl;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentCapturePreviewBindingSw600dpLandImpl;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 131
-    :cond_19f7
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_student_capture_preview is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 423
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_1a0e
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 424
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_1a1d
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 425
-    :cond_1a1d
-    const-string v1, "layout/fragment_student_capture_mark_students_marked_item_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_1a2b
-
-    .line 426
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentCaptureMarkStudentsMarkedItemBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentCaptureMarkStudentsMarkedItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 428
-    :cond_1a2b
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_student_capture_mark_students_marked_item is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 297
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_1a42
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 298
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_1a51
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 299
-    :cond_1a51
-    const-string v1, "layout/fragment_student_capture_mark_students_item_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_1a5f
-
-    .line 300
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentCaptureMarkStudentsItemBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentCaptureMarkStudentsItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 302
-    :cond_1a5f
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_student_capture_mark_students_item is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1671
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_1a76
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1672
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_1a85
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1673
-    :cond_1a85
-    const-string v1, "layout/fragment_student_capture_home_student_list_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_1a93
-
-    .line 1674
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentCaptureHomeStudentListBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentCaptureHomeStudentListBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1676
-    :cond_1a93
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_student_capture_home_student_list is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2601
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_1aaa
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2602
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_1ab9
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2603
-    :cond_1ab9
-    const-string v1, "layout/fragment_student_capture_home_story_feed_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_1ac7
-
-    .line 2604
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentCaptureHomeStoryFeedBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentCaptureHomeStoryFeedBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2606
-    :cond_1ac7
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_student_capture_home_story_feed is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1854
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_1ade
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1855
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_1aed
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1856
-    :cond_1aed
-    const-string v1, "layout/fragment_student_avatar_editor_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_1afb
-
-    .line 1857
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentAvatarEditorBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentAvatarEditorBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1859
-    :cond_1afb
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_student_avatar_editor is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1323
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_1b12
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1324
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_1b21
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1325
-    :cond_1b21
-    const-string v1, "layout/fragment_story_share_to_student_header_item_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_1b2f
-
-    .line 1326
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentStoryShareToStudentHeaderItemBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStoryShareToStudentHeaderItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1328
-    :cond_1b2f
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_story_share_to_student_header_item is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 252
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_1b46
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 253
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_1b55
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 254
-    :cond_1b55
-    const-string v1, "layout/fragment_story_share_to_item_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_1b63
-
-    .line 255
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentStoryShareToItemBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStoryShareToItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 257
-    :cond_1b63
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_story_share_to_item is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1563
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_1b7a
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1564
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_1b89
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1565
-    :cond_1b89
-    const-string v1, "layout/fragment_story_share_to_class_header_item_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_1b97
-
-    .line 1566
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentStoryShareToClassHeaderItemBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStoryShareToClassHeaderItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1568
-    :cond_1b97
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_story_share_to_class_header_item is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1491
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_1bae
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1492
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_1bbd
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1493
-    :cond_1bbd
-    const-string v1, "layout/fragment_story_share_to_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_1bcb
-
-    .line 1494
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentStoryShareToBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStoryShareToBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1496
-    :cond_1bcb
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_story_share_to is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 576
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_1be2
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 577
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_1bf1
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 578
-    :cond_1bf1
-    const-string v1, "layout/fragment_single_notification_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_1bff
-
-    .line 579
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentSingleNotificationBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentSingleNotificationBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 581
-    :cond_1bff
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_single_notification is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1035
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_1c16
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1036
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_1c25
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1037
-    :cond_1c25
-    const-string v1, "layout/fragment_setup_skills_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_1c33
-
-    .line 1038
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentSetupSkillsBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentSetupSkillsBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1040
-    :cond_1c33
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_setup_skills is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 432
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_1c4a
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 433
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_1c59
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 434
-    :cond_1c59
-    const-string v1, "layout/fragment_seen_by_item_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_1c67
-
-    .line 435
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentSeenByItemBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentSeenByItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 437
-    :cond_1c67
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_seen_by_item is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1014
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_1c7e
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1015
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_1c8d
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1016
-    :cond_1c8d
-    const-string v1, "layout/fragment_seen_by_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_1c9b
-
-    .line 1017
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentSeenByBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentSeenByBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1019
-    :cond_1c9b
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_seen_by is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2196
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_1cb2
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2197
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_1cc1
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2198
-    :cond_1cc1
-    const-string v1, "layout/fragment_school_search_item_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_1ccf
-
-    .line 2199
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentSchoolSearchItemBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentSchoolSearchItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2201
-    :cond_1ccf
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_school_search_item is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2376
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_1ce6
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2377
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_1cf5
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2378
-    :cond_1cf5
-    const-string v1, "layout/fragment_school_search_adapter_footer_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_1d03
-
-    .line 2379
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentSchoolSearchAdapterFooterBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentSchoolSearchAdapterFooterBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2381
-    :cond_1d03
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_school_search_adapter_footer is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 144
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_1d1a
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 145
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_1d29
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 146
-    :cond_1d29
-    const-string v1, "layout/fragment_school_search_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_1d37
-
-    .line 147
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentSchoolSearchBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentSchoolSearchBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 149
-    :cond_1d37
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_school_search is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 414
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_1d4e
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 415
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_1d5d
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 416
-    :cond_1d5d
-    const-string v1, "layout/fragment_school_null_state_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_1d6b
-
-    .line 417
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentSchoolNullStateBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentSchoolNullStateBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 419
-    :cond_1d6b
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_school_null_state is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 198
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_1d82
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 199
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_1d91
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 200
-    :cond_1d91
-    const-string v1, "layout/fragment_school_directory_item_welcome_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_1d9f
-
-    .line 201
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentSchoolDirectoryItemWelcomeBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentSchoolDirectoryItemWelcomeBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 203
-    :cond_1d9f
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_school_directory_item_welcome is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1734
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_1db6
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1735
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_1dc5
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1736
-    :cond_1dc5
-    const-string v1, "layout/fragment_school_directory_item_teacher_request_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_1dd3
-
-    .line 1737
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentSchoolDirectoryItemTeacherRequestBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentSchoolDirectoryItemTeacherRequestBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1739
-    :cond_1dd3
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_school_directory_item_teacher_request is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 378
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_1dea
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 379
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_1df9
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 380
-    :cond_1df9
-    const-string v1, "layout/fragment_school_directory_item_teacher_pending_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_1e07
-
-    .line 381
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentSchoolDirectoryItemTeacherPendingBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentSchoolDirectoryItemTeacherPendingBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 383
-    :cond_1e07
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_school_directory_item_teacher_pending is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2331
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_1e1e
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2332
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_1e2d
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2333
-    :cond_1e2d
-    const-string v1, "layout/fragment_school_directory_item_teacher_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_1e3b
-
-    .line 2334
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentSchoolDirectoryItemTeacherBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentSchoolDirectoryItemTeacherBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2336
-    :cond_1e3b
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_school_directory_item_teacher is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2448
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_1e52
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2449
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_1e61
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2450
-    :cond_1e61
-    const-string v1, "layout/fragment_school_directory_item_student_parent_circle_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_1e6f
-
-    .line 2451
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentSchoolDirectoryItemStudentParentCircleBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentSchoolDirectoryItemStudentParentCircleBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2453
-    :cond_1e6f
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_school_directory_item_student_parent_circle is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1152
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_1e86
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1153
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_1e95
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1154
-    :cond_1e95
-    const-string v1, "layout/fragment_school_directory_item_student_add_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_1ea3
-
-    .line 1155
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentSchoolDirectoryItemStudentAddBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentSchoolDirectoryItemStudentAddBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1157
-    :cond_1ea3
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_school_directory_item_student_add is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2313
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_1eba
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2314
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_1ec9
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2315
-    :cond_1ec9
-    const-string v1, "layout/fragment_school_directory_item_student_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_1ed7
-
-    .line 2316
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentSchoolDirectoryItemStudentBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentSchoolDirectoryItemStudentBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2318
-    :cond_1ed7
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_school_directory_item_student is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1716
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_1eee
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1717
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_1efd
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1718
-    :cond_1efd
-    const-string v1, "layout/fragment_school_directory_item_header_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_1f0b
-
-    .line 1719
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentSchoolDirectoryItemHeaderBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentSchoolDirectoryItemHeaderBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1721
-    :cond_1f0b
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_school_directory_item_header is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2622
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_1f22
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2623
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_1f31
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2624
-    :cond_1f31
-    const-string v1, "layout/fragment_school_directory_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_1f3f
-
-    .line 2625
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentSchoolDirectoryBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentSchoolDirectoryBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2627
-    :cond_1f3f
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_school_directory is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 558
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_1f56
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 559
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_1f65
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 560
-    :cond_1f65
-    const-string v1, "layout/fragment_school_detail_teacher_item_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_1f73
-
-    .line 561
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentSchoolDetailTeacherItemBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentSchoolDetailTeacherItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 563
-    :cond_1f73
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_school_detail_teacher_item is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1134
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_1f8a
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1135
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_1f99
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1136
-    :cond_1f99
-    const-string v1, "layout/fragment_school_detail_header_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_1fa7
-
-    .line 1137
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentSchoolDetailHeaderBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentSchoolDetailHeaderBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1139
-    :cond_1fa7
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_school_detail_header is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2142
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_1fbe
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2143
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_1fcd
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2144
-    :cond_1fcd
-    const-string v1, "layout/fragment_scheduled_messages_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_1fdb
-
-    .line 2145
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentScheduledMessagesBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentScheduledMessagesBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2147
-    :cond_1fdb
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_scheduled_messages is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2367
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_1ff2
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2368
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_2001
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2369
-    :cond_2001
-    const-string v1, "layout/fragment_scheduled_message_item_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_200f
-
-    .line 2370
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentScheduledMessageItemBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentScheduledMessageItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2372
-    :cond_200f
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_scheduled_message_item is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2268
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_2026
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2269
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_2035
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2270
-    :cond_2035
-    const-string v1, "layout/fragment_push_notifications_settings_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_2043
-
-    .line 2271
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentPushNotificationsSettingsBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentPushNotificationsSettingsBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2273
-    :cond_2043
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_push_notifications_settings is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2439
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_205a
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2440
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_2069
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2441
-    :cond_2069
-    const-string v1, "layout/fragment_push_notifications_quiet_hours_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_2077
-
-    .line 2442
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentPushNotificationsQuietHoursBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentPushNotificationsQuietHoursBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2444
-    :cond_2077
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_push_notifications_quiet_hours is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 879
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_208e
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 880
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_209d
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 881
-    :cond_209d
-    const-string v1, "layout/fragment_profile_photo_item_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_20ab
-
-    .line 882
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentProfilePhotoItemBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentProfilePhotoItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 884
-    :cond_20ab
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_profile_photo_item is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 861
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_20c2
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 862
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_20d1
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 863
-    :cond_20d1
-    const-string v1, "layout/fragment_preview_message_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_20df
-
-    .line 864
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentPreviewMessageBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentPreviewMessageBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 866
-    :cond_20df
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_preview_message is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 102
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_20f6
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 103
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_2105
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 104
-    :cond_2105
-    const-string v1, "layout/fragment_photo_preview_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_2113
-
-    .line 105
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentPhotoPreviewBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentPhotoPreviewBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 107
-    :cond_2113
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_photo_preview is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 162
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_212a
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 163
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_2139
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 164
-    :cond_2139
-    const-string v1, "layout/fragment_parent_teacher_search_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_2147
-
-    .line 165
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentParentTeacherSearchBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentParentTeacherSearchBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 167
-    :cond_2147
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_parent_teacher_search is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 675
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_215e
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 676
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_216d
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 677
-    :cond_216d
-    const-string v1, "layout/fragment_parent_sign_up_credentials_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_217b
-
-    .line 678
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentParentSignUpCredentialsBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentParentSignUpCredentialsBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 680
-    :cond_217b
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_parent_sign_up_credentials is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2058
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_2192
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2059
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_21a1
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2060
-    :cond_21a1
-    const-string v1, "layout/fragment_parent_setup_student_account_qr_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_21af
-
-    .line 2061
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentParentSetupStudentAccountQrBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentParentSetupStudentAccountQrBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2063
-    :cond_21af
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_parent_setup_student_account_qr is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2583
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_21c6
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2584
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_21d5
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2585
-    :cond_21d5
-    const-string v1, "layout/fragment_parent_setup_student_account_ack_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_21e3
-
-    .line 2586
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentParentSetupStudentAccountAckBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentParentSetupStudentAccountAckBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2588
-    :cond_21e3
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_parent_setup_student_account_ack is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1482
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_21fa
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1483
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_2209
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1484
-    :cond_2209
-    const-string v1, "layout/fragment_parent_school_search_item_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_2217
-
-    .line 1485
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentParentSchoolSearchItemBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentParentSchoolSearchItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1487
-    :cond_2217
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_parent_school_search_item is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 852
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_222e
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 853
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_223d
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 854
-    :cond_223d
-    const-string v1, "layout/fragment_parent_school_search_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_224b
-
-    .line 855
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentParentSchoolSearchBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentParentSchoolSearchBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 857
-    :cond_224b
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_parent_school_search is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2340
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_2262
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2341
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_2271
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2342
-    :cond_2271
-    const-string v1, "layout/fragment_parent_connections_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_227f
-
-    .line 2343
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentParentConnectionsBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentParentConnectionsBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2345
-    :cond_227f
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_parent_connections is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1269
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_2296
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1270
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_22a5
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1271
-    :cond_22a5
-    const-string v1, "layout/fragment_parent_connection_request_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_22b3
-
-    .line 1272
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentParentConnectionRequestBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentParentConnectionRequestBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1274
-    :cond_22b3
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_parent_connection_request is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1053
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_22ca
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1054
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_22d9
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1055
-    :cond_22d9
-    const-string v1, "layout/fragment_parent_checklist_invite_family_item_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_22e7
-
-    .line 1056
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentParentChecklistInviteFamilyItemBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentParentChecklistInviteFamilyItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1058
-    :cond_22e7
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_parent_checklist_invite_family_item is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 531
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_22fe
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 532
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_230d
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 533
-    :cond_230d
-    const-string v1, "layout/fragment_parent_checklist_birthday_capture_item_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_231b
-
-    .line 534
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentParentChecklistBirthdayCaptureItemBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentParentChecklistBirthdayCaptureItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 536
-    :cond_231b
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_parent_checklist_birthday_capture_item is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2169
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_2332
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2170
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_2341
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2171
-    :cond_2341
-    const-string v1, "layout/fragment_parent_channel_list_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_234f
-
-    .line 2172
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentParentChannelListBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentParentChannelListBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2174
-    :cond_234f
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_parent_channel_list is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1437
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_2366
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1438
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_2375
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1439
-    :cond_2375
-    const-string v1, "layout/fragment_parent_add_class_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_2383
-
-    .line 1440
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentParentAddClassBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentParentAddClassBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1442
-    :cond_2383
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_parent_add_class is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2079
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_239a
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2080
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_23a9
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2081
-    :cond_23a9
-    const-string v1, "layout/fragment_parent_account_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_23b7
-
-    .line 2082
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentParentAccountBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentParentAccountBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2084
-    :cond_23b7
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_parent_account is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2457
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_23ce
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2458
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_23dd
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2459
-    :cond_23dd
-    const-string v1, "layout/fragment_onboarding_student_avatar_editor_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_23eb
-
-    .line 2460
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentOnboardingStudentAvatarEditorBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentOnboardingStudentAvatarEditorBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2462
-    :cond_23eb
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_onboarding_student_avatar_editor is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 342
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_2402
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 343
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_2411
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 344
-    :cond_2411
-    const-string v1, "layout/fragment_onboarding_splash_user_role_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_241f
-
-    .line 345
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentOnboardingSplashUserRoleBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentOnboardingSplashUserRoleBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 347
-    :cond_241f
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_onboarding_splash_user_role is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2115
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_2436
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2116
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_2445
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2117
-    :cond_2445
-    const-string v1, "layout/fragment_onboarding_sign_up_title_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_2453
-
-    .line 2118
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentOnboardingSignUpTitleBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentOnboardingSignUpTitleBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2120
-    :cond_2453
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_onboarding_sign_up_title is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1464
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_246a
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1465
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_2479
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1466
-    :cond_2479
-    const-string v1, "layout/fragment_onboarding_sign_up_parent_anti_abuse_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_2487
-
-    .line 1467
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentOnboardingSignUpParentAntiAbuseBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentOnboardingSignUpParentAntiAbuseBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1469
-    :cond_2487
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_onboarding_sign_up_parent_anti_abuse is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 759
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_249e
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 760
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_24ad
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 761
-    :cond_24ad
-    const-string v1, "layout/fragment_onboarding_sign_up_email_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_24bb
-
-    .line 762
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentOnboardingSignUpEmailBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentOnboardingSignUpEmailBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 764
-    :cond_24bb
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_onboarding_sign_up_email is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 111
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_24d2
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 112
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_24e1
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 113
-    :cond_24e1
-    const-string v1, "layout/fragment_onboarding_sign_up_details_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_24ef
-
-    .line 114
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentOnboardingSignUpDetailsBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentOnboardingSignUpDetailsBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 116
-    :cond_24ef
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_onboarding_sign_up_details is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 477
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_2506
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 478
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_2515
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 479
-    :cond_2515
-    const-string v1, "layout/fragment_onboarding_enter_code_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_2523
-
-    .line 480
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentOnboardingEnterCodeBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentOnboardingEnterCodeBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 482
-    :cond_2523
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_onboarding_enter_code is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1608
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_253a
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1609
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_2549
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1610
-    :cond_2549
-    const-string v1, "layout/fragment_onboarding_enable_camera_primer_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_2557
-
-    .line 1611
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentOnboardingEnableCameraPrimerBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentOnboardingEnableCameraPrimerBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1613
-    :cond_2557
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_onboarding_enable_camera_primer is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 612
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_256e
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 613
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_257d
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 614
-    :cond_257d
-    const-string v1, "layout/fragment_message_recipients_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_258b
-
-    .line 615
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentMessageRecipientsBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentMessageRecipientsBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 617
-    :cond_258b
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_message_recipients is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2205
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_25a2
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2206
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_25b1
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2207
-    :cond_25b1
-    const-string v1, "layout/fragment_meet_teacher_item_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_25bf
-
-    .line 2208
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentMeetTeacherItemBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentMeetTeacherItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2210
-    :cond_25bf
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_meet_teacher_item is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1023
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_25d6
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1024
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_25e5
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1025
-    :cond_25e5
-    const-string v1, "layout-sw600dp/fragment_mark_students_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_25f3
-
-    .line 1026
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentMarkStudentsBindingSw600dpImpl;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentMarkStudentsBindingSw600dpImpl;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1028
-    :cond_25f3
-    const-string v1, "layout/fragment_mark_students_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_2601
-
-    .line 1029
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentMarkStudentsBindingImpl;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentMarkStudentsBindingImpl;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1031
-    :cond_2601
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_mark_students is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 189
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_2618
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 190
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_2627
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 191
-    :cond_2627
-    const-string v1, "layout/fragment_login_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_2635
-
-    .line 192
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentLoginBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentLoginBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 194
-    :cond_2635
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_login is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2277
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_264c
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2278
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_265b
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2279
-    :cond_265b
-    const-string v1, "layout/fragment_leader_sign_up_role_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_2669
-
-    .line 2280
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentLeaderSignUpRoleBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentLeaderSignUpRoleBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2282
-    :cond_2669
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_leader_sign_up_role is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1626
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_2680
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1627
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_268f
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1628
-    :cond_268f
-    const-string v1, "layout/fragment_kids_list_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_269d
-
-    .line 1629
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentKidsListBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentKidsListBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1631
-    :cond_269d
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_kids_list is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2232
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_26b4
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2233
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_26c3
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2234
-    :cond_26c3
-    const-string v1, "layout/fragment_invite_item_header_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_26d1
-
-    .line 2235
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentInviteItemHeaderBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentInviteItemHeaderBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2237
-    :cond_26d1
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_invite_item_header is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 897
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_26e8
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 898
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_26f7
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 899
-    :cond_26f7
-    const-string v1, "layout/fragment_hold_tight_item_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_2705
-
-    .line 900
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentHoldTightItemBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentHoldTightItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 902
-    :cond_2705
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_hold_tight_item is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2403
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_271c
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2404
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_272b
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2405
-    :cond_272b
-    const-string v1, "layout/fragment_forgot_password_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_2739
-
-    .line 2406
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentForgotPasswordBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentForgotPasswordBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2408
-    :cond_2739
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_forgot_password is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2565
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_2750
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2566
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_275f
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2567
-    :cond_275f
-    const-string v1, "layout/fragment_enter_student_mode_qr_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_276d
-
-    .line 2568
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentEnterStudentModeQrBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentEnterStudentModeQrBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2570
-    :cond_276d
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_enter_student_mode_qr is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1107
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_2784
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1108
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_2793
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1109
-    :cond_2793
-    const-string v1, "layout/fragment_edit_students_item_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_27a1
-
-    .line 1110
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentEditStudentsItemBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentEditStudentsItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1112
-    :cond_27a1
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_edit_students_item is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1725
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_27b8
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1726
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_27c7
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1727
-    :cond_27c7
-    const-string v1, "layout/fragment_edit_students_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_27d5
-
-    .line 1728
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentEditStudentsBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentEditStudentsBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1730
-    :cond_27d5
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_edit_students is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1350
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_27ec
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1351
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_27fb
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1352
-    :cond_27fb
-    const-string v1, "layout/fragment_edit_behaviours_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_2809
-
-    .line 1353
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentEditBehavioursBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentEditBehavioursBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1355
-    :cond_2809
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_edit_behaviours is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1089
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_2820
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1090
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_282f
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1091
-    :cond_282f
-    const-string v1, "layout/fragment_dojo_photo_preview_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_283d
-
-    .line 1092
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentDojoPhotoPreviewBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentDojoPhotoPreviewBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1094
-    :cond_283d
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_dojo_photo_preview is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 171
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_2854
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 172
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_2863
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 173
-    :cond_2863
-    const-string v1, "layout/fragment_dojo_camera_tooltip_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_2871
-
-    .line 174
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentDojoCameraTooltipBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentDojoCameraTooltipBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 176
-    :cond_2871
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_dojo_camera_tooltip is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 360
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_2888
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 361
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_2897
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 362
-    :cond_2897
-    const-string v1, "layout-sw600dp/fragment_dojo_camera_controls_90_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_28a5
-
-    .line 363
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentDojoCameraControls90Binding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentDojoCameraControls90Binding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 365
-    :cond_28a5
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_dojo_camera_controls_90 is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1179
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_28bc
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1180
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_28cb
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1181
-    :cond_28cb
-    const-string v1, "layout-sw600dp/fragment_dojo_camera_controls_270_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_28d9
-
-    .line 1182
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentDojoCameraControls270Binding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentDojoCameraControls270Binding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1184
-    :cond_28d9
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_dojo_camera_controls_270 is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1956
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_28f0
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1957
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_28ff
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1958
-    :cond_28ff
-    const-string v1, "layout-sw600dp/fragment_dojo_camera_controls_180_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_290d
-
-    .line 1959
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentDojoCameraControls180Binding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentDojoCameraControls180Binding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1961
-    :cond_290d
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_dojo_camera_controls_180 is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2001
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_2924
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2002
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_2933
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2003
-    :cond_2933
-    const-string v1, "layout-sw600dp/fragment_dojo_camera_controls_0_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_2941
-
-    .line 2004
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentDojoCameraControls0BindingSw600dpImpl;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentDojoCameraControls0BindingSw600dpImpl;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2006
-    :cond_2941
-    const-string v1, "layout/fragment_dojo_camera_controls_0_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_294f
-
-    .line 2007
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentDojoCameraControls0BindingImpl;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentDojoCameraControls0BindingImpl;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2009
-    :cond_294f
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_dojo_camera_controls_0 is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2040
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_2966
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2041
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_2975
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2042
-    :cond_2975
-    const-string v1, "layout/fragment_dojo_camera_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_2983
-
-    .line 2043
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentDojoCameraBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentDojoCameraBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2045
-    :cond_2983
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_dojo_camera is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2160
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_299a
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2161
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_29a9
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2162
-    :cond_29a9
-    const-string v1, "layout/fragment_create_school_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_29b7
-
-    .line 2163
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentCreateSchoolBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentCreateSchoolBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2165
-    :cond_29b7
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_create_school is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1992
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_29ce
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1993
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_29dd
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1994
-    :cond_29dd
-    const-string v1, "layout/fragment_create_account_splash_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_29eb
-
-    .line 1995
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentCreateAccountSplashBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentCreateAccountSplashBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1997
-    :cond_29eb
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_create_account_splash is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 39
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_2a02
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 40
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_2a11
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 41
-    :cond_2a11
-    const-string v1, "layout/fragment_combined_fullscreen_photo_preview_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_2a1f
-
-    .line 42
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentCombinedFullscreenPhotoPreviewBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentCombinedFullscreenPhotoPreviewBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 44
-    :cond_2a1f
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_combined_fullscreen_photo_preview is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 870
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_2a36
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 871
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_2a45
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 872
-    :cond_2a45
-    const-string v1, "layout/fragment_combined_drawing_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_2a53
-
-    .line 873
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentCombinedDrawingBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentCombinedDrawingBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 875
-    :cond_2a53
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_combined_drawing is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1590
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_2a6a
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1591
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_2a79
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1592
-    :cond_2a79
-    const-string v1, "layout/fragment_combined_camera_preview_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_2a87
-
-    .line 1593
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentCombinedCameraPreviewBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentCombinedCameraPreviewBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1595
-    :cond_2a87
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_combined_camera_preview is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 732
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_2a9e
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 733
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_2aad
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 734
-    :cond_2aad
-    const-string v1, "layout/fragment_combined_camera_controls_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_2abb
-
-    .line 735
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentCombinedCameraControlsBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentCombinedCameraControlsBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 737
-    :cond_2abb
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_combined_camera_controls is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 933
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_2ad2
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 934
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_2ae1
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 935
-    :cond_2ae1
-    const-string v1, "layout/fragment_combined_camera_compose_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_2aef
-
-    .line 936
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentCombinedCameraComposeBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentCombinedCameraComposeBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 938
-    :cond_2aef
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_combined_camera_compose is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1761
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_2b06
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1762
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_2b15
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1763
-    :cond_2b15
-    const-string v1, "layout/fragment_combined_camera_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_2b23
-
-    .line 1764
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentCombinedCameraBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentCombinedCameraBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1766
-    :cond_2b23
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_combined_camera is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 66
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_2b3a
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 67
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_2b49
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 68
-    :cond_2b49
-    const-string v1, "layout/fragment_classroom_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_2b57
-
-    .line 69
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentClassroomBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentClassroomBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 71
-    :cond_2b57
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_classroom is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 21
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_2b6e
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 22
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_2b7d
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 23
-    :cond_2b7d
-    const-string v1, "layout/fragment_class_wall_settings_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_2b8b
-
-    .line 24
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentClassWallSettingsBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentClassWallSettingsBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 26
-    :cond_2b8b
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_class_wall_settings is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 666
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_2ba2
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 667
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_2bb1
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 668
-    :cond_2bb1
-    const-string v1, "layout/fragment_class_wall_compose_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_2bbf
-
-    .line 669
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentClassWallComposeBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentClassWallComposeBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 671
-    :cond_2bbf
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_class_wall_compose is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1404
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_2bd6
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1405
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_2be5
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1406
-    :cond_2be5
-    const-string v1, "layout/fragment_class_list_item_teacher_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_2bf3
-
-    .line 1407
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentClassListItemTeacherBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentClassListItemTeacherBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1409
-    :cond_2bf3
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_class_list_item_teacher is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1653
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_2c0a
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1654
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_2c19
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1655
-    :cond_2c19
-    const-string v1, "layout/fragment_class_list_item_school_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_2c27
-
-    .line 1656
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentClassListItemSchoolBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentClassListItemSchoolBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1658
-    :cond_2c27
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_class_list_item_school is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 135
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_2c3e
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 136
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_2c4d
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 137
-    :cond_2c4d
-    const-string v1, "layout/fragment_class_list_item_class_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_2c5b
-
-    .line 138
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentClassListItemClassBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentClassListItemClassBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 140
-    :cond_2c5b
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_class_list_item_class is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1947
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_2c72
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1948
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_2c81
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1949
-    :cond_2c81
-    const-string v1, "layout/fragment_class_list_item_add_class_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_2c8f
-
-    .line 1950
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentClassListItemAddClassBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentClassListItemAddClassBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1952
-    :cond_2c8f
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_class_list_item_add_class is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 234
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_2ca6
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 235
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_2cb5
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 236
-    :cond_2cb5
-    const-string v1, "layout/fragment_class_code_student_select_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_2cc3
-
-    .line 237
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentClassCodeStudentSelectBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentClassCodeStudentSelectBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 239
-    :cond_2cc3
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_class_code_student_select is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2547
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_2cda
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2548
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_2ce9
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2549
-    :cond_2ce9
-    const-string v1, "layout/fragment_chat_item_sticker_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_2cf7
-
-    .line 2550
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentChatItemStickerBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentChatItemStickerBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2552
-    :cond_2cf7
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_chat_item_sticker is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1080
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_2d0e
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1081
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_2d1d
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1082
-    :cond_2d1d
-    const-string v1, "layout/fragment_chat_empty_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_2d2b
-
-    .line 1083
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentChatEmptyBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentChatEmptyBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1085
-    :cond_2d2b
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_chat_empty is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1536
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_2d42
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1537
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_2d51
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1538
-    :cond_2d51
-    const-string v1, "layout/fragment_chat_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_2d5f
-
-    .line 1539
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentChatBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentChatBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1541
-    :cond_2d5f
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_chat is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1278
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_2d76
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1279
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_2d85
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1280
-    :cond_2d85
-    const-string v1, "layout/fragment_change_password_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_2d93
-
-    .line 1281
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentChangePasswordBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentChangePasswordBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1283
-    :cond_2d93
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_change_password is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2394
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_2daa
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2395
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_2db9
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2396
-    :cond_2db9
-    const-string v1, "layout/fragment_award_pager_dialog_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_2dc7
-
-    .line 2397
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentAwardPagerDialogBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentAwardPagerDialogBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2399
-    :cond_2dc7
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_award_pager_dialog is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 969
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_2dde
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 970
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_2ded
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 971
-    :cond_2ded
-    const-string v1, "layout/fragment_award_grid_item_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_2dfb
-
-    .line 972
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentAwardGridItemBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentAwardGridItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 974
-    :cond_2dfb
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_award_grid_item is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1662
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_2e12
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1663
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_2e21
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1664
-    :cond_2e21
-    const-string v1, "layout/fragment_award_grid_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_2e2f
-
-    .line 1665
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentAwardGridBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentAwardGridBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1667
-    :cond_2e2f
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_award_grid is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1500
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_2e46
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1501
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_2e55
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1502
-    :cond_2e55
-    const-string v1, "layout/fragment_audience_selector_item_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_2e63
-
-    .line 1503
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentAudienceSelectorItemBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentAudienceSelectorItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1505
-    :cond_2e63
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_audience_selector_item is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2430
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_2e7a
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2431
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_2e89
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2432
-    :cond_2e89
-    const-string v1, "layout/fragment_attendance_item_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_2e97
-
-    .line 2433
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentAttendanceItemBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentAttendanceItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2435
-    :cond_2e97
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_attendance_item is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 996
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_2eae
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 997
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_2ebd
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 998
-    :cond_2ebd
-    const-string v1, "layout/fragment_attendance_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_2ecb
-
-    .line 999
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentAttendanceBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentAttendanceBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1001
-    :cond_2ecb
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_attendance is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 75
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_2ee2
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 76
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_2ef1
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 77
-    :cond_2ef1
-    const-string v1, "layout/fragment_add_school_student_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_2eff
-
-    .line 78
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentAddSchoolStudentBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentAddSchoolStudentBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 80
-    :cond_2eff
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_add_school_student is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2295
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_2f16
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2296
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_2f25
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2297
-    :cond_2f25
-    const-string v1, "layout/fragment_add_edit_student_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_2f33
-
-    .line 2298
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentAddEditStudentBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentAddEditStudentBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2300
-    :cond_2f33
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_add_edit_student is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2556
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_2f4a
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2557
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_2f59
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2558
-    :cond_2f59
-    const-string v1, "layout/fragment_add_edit_group_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_2f67
-
-    .line 2559
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentAddEditGroupBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentAddEditGroupBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2561
-    :cond_2f67
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_add_edit_group is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1005
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_2f7e
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1006
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_2f8d
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1007
-    :cond_2f8d
-    const-string v1, "layout/fragment_add_edit_class_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_2f9b
-
-    .line 1008
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentAddEditClassBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentAddEditClassBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1010
-    :cond_2f9b
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_add_edit_class is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 243
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_2fb2
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 244
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_2fc1
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 245
-    :cond_2fc1
-    const-string v1, "layout/fragment_add_edit_behaviours_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_2fcf
-
-    .line 246
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentAddEditBehavioursBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentAddEditBehavioursBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 248
-    :cond_2fcf
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_add_edit_behaviours is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 834
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_2fe6
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 835
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_2ff5
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 836
-    :cond_2ff5
-    const-string v1, "layout/fragment_add_coteacher_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_3003
-
-    .line 837
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentAddCoteacherBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentAddCoteacherBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 839
-    :cond_3003
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_add_coteacher is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1413
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_301a
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1414
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_3029
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1415
-    :cond_3029
-    const-string v1, "layout-land/fragment_add_class_poster_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_3037
-
-    .line 1416
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentAddClassPosterBindingLandImpl;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentAddClassPosterBindingLandImpl;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1418
-    :cond_3037
-    const-string v1, "layout/fragment_add_class_poster_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_3045
-
-    .line 1419
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentAddClassPosterBindingImpl;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentAddClassPosterBindingImpl;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1421
-    :cond_3045
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_add_class_poster is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1116
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_305c
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1117
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_306b
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1118
-    :cond_306b
-    const-string v1, "layout/fragment_add_class_invite_code_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_3079
-
-    .line 1119
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentAddClassInviteCodeBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentAddClassInviteCodeBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1121
-    :cond_3079
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_add_class_invite_code is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1983
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_3090
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1984
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_309f
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1985
-    :cond_309f
-    const-string v1, "layout/fragment_add_class_invite_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_30ad
-
-    .line 1986
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentAddClassInviteBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentAddClassInviteBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1988
-    :cond_30ad
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_add_class_invite is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2592
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_30c4
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2593
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_30d3
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2594
-    :cond_30d3
-    const-string v1, "layout/fragment_account_switcher_item_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_30e1
-
-    .line 2595
-    new-instance v1, Lcom/classdojo/android/databinding/FragmentAccountSwitcherItemBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentAccountSwitcherItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2597
-    :cond_30e1
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for fragment_account_switcher_item is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2031
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_30f8
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2032
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_3107
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2033
-    :cond_3107
-    const-string v1, "layout/dialog_unsupported_class_code_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_3115
-
-    .line 2034
-    new-instance v1, Lcom/classdojo/android/databinding/DialogUnsupportedClassCodeBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/DialogUnsupportedClassCodeBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2036
-    :cond_3115
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for dialog_unsupported_class_code is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 387
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_312c
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 388
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_313b
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 389
-    :cond_313b
-    const-string v1, "layout/dialog_turn_on_password_lock_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_3149
-
-    .line 390
-    new-instance v1, Lcom/classdojo/android/databinding/DialogTurnOnPasswordLockBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/DialogTurnOnPasswordLockBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 392
-    :cond_3149
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for dialog_turn_on_password_lock is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 513
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_3160
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 514
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_316f
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 515
-    :cond_316f
-    const-string v1, "layout/dialog_teacher_student_consent_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_317d
-
-    .line 516
-    new-instance v1, Lcom/classdojo/android/databinding/DialogTeacherStudentConsentBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/DialogTeacherStudentConsentBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 518
-    :cond_317d
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for dialog_teacher_student_consent is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1341
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_3194
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1342
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_31a3
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1343
-    :cond_31a3
-    const-string v1, "layout/dialog_teacher_new_class_success_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_31b1
-
-    .line 1344
-    new-instance v1, Lcom/classdojo/android/databinding/DialogTeacherNewClassSuccessBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/DialogTeacherNewClassSuccessBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1346
-    :cond_31b1
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for dialog_teacher_new_class_success is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2322
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_31c8
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2323
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_31d7
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2324
-    :cond_31d7
-    const-string v1, "layout/dialog_teacher_invitation_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_31e5
-
-    .line 2325
-    new-instance v1, Lcom/classdojo/android/databinding/DialogTeacherInvitationBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/DialogTeacherInvitationBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2327
-    :cond_31e5
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for dialog_teacher_invitation is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2133
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_31fc
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2134
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_320b
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2135
-    :cond_320b
-    const-string v1, "layout/dialog_student_list_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_3219
-
-    .line 2136
-    new-instance v1, Lcom/classdojo/android/databinding/DialogStudentListBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/DialogStudentListBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2138
-    :cond_3219
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for dialog_student_list is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 84
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_3230
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 85
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_323f
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 86
-    :cond_323f
-    const-string v1, "layout/dialog_student_capture_student_list_item_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_324d
-
-    .line 87
-    new-instance v1, Lcom/classdojo/android/databinding/DialogStudentCaptureStudentListItemBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/DialogStudentCaptureStudentListItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 89
-    :cond_324d
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for dialog_student_capture_student_list_item is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 225
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_3264
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 226
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_3273
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 227
-    :cond_3273
-    const-string v1, "layout/dialog_student_age_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_3281
-
-    .line 228
-    new-instance v1, Lcom/classdojo/android/databinding/DialogStudentAgeBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/DialogStudentAgeBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 230
-    :cond_3281
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for dialog_student_age is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1359
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_3298
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1360
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_32a7
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1361
-    :cond_32a7
-    const-string v1, "layout/dialog_schedule_message_time_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_32b5
-
-    .line 1362
-    new-instance v1, Lcom/classdojo/android/databinding/DialogScheduleMessageTimeBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/DialogScheduleMessageTimeBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1364
-    :cond_32b5
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for dialog_schedule_message_time is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 630
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_32cc
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 631
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_32db
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 632
-    :cond_32db
-    const-string v1, "layout/dialog_password_changed_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_32e9
-
-    .line 633
-    new-instance v1, Lcom/classdojo/android/databinding/DialogPasswordChangedBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/DialogPasswordChangedBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 635
-    :cond_32e9
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for dialog_password_changed is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1296
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_3300
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1297
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_330f
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1298
-    :cond_330f
-    const-string v1, "layout/dialog_parent_teacher_invitation_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_331d
-
-    .line 1299
-    new-instance v1, Lcom/classdojo/android/databinding/DialogParentTeacherInvitationBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/DialogParentTeacherInvitationBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1301
-    :cond_331d
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for dialog_parent_teacher_invitation is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2187
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_3334
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2188
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_3343
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2189
-    :cond_3343
-    const-string v1, "layout/dialog_parent_invitation_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_3351
-
-    .line 2190
-    new-instance v1, Lcom/classdojo/android/databinding/DialogParentInvitationBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/DialogParentInvitationBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2192
-    :cond_3351
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for dialog_parent_invitation is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1881
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_3368
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1882
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_3377
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1883
-    :cond_3377
-    const-string v1, "layout/dialog_parent_delete_connection_request_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_3385
-
-    .line 1884
-    new-instance v1, Lcom/classdojo/android/databinding/DialogParentDeleteConnectionRequestBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/DialogParentDeleteConnectionRequestBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1886
-    :cond_3385
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for dialog_parent_delete_connection_request is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2097
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_339c
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2098
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_33ab
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2099
-    :cond_33ab
-    const-string v1, "layout/dialog_invite_student_code_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_33b9
-
-    .line 2100
-    new-instance v1, Lcom/classdojo/android/databinding/DialogInviteStudentCodeBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/DialogInviteStudentCodeBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2102
-    :cond_33b9
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for dialog_invite_student_code is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2304
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_33d0
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2305
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_33df
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2306
-    :cond_33df
-    const-string v1, "layout/dialog_exit_student_mode_password_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_33ed
-
-    .line 2307
-    new-instance v1, Lcom/classdojo/android/databinding/DialogExitStudentModePasswordBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/DialogExitStudentModePasswordBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2309
-    :cond_33ed
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for dialog_exit_student_mode_password is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 549
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_3404
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 550
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_3413
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 551
-    :cond_3413
-    const-string v1, "layout/dialog_enter_student_mode_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_3421
-
-    .line 552
-    new-instance v1, Lcom/classdojo/android/databinding/DialogEnterStudentModeBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/DialogEnterStudentModeBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 554
-    :cond_3421
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for dialog_enter_student_mode is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2022
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_3438
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2023
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_3447
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2024
-    :cond_3447
-    const-string v1, "layout/dialog_disconnect_student_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_3455
-
-    .line 2025
-    new-instance v1, Lcom/classdojo/android/databinding/DialogDisconnectStudentBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/DialogDisconnectStudentBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2027
-    :cond_3455
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for dialog_disconnect_student is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1071
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_346c
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1072
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_347b
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1073
-    :cond_347b
-    const-string v1, "layout/dialog_class_code_student_select_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_3489
-
-    .line 1074
-    new-instance v1, Lcom/classdojo/android/databinding/DialogClassCodeStudentSelectBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/DialogClassCodeStudentSelectBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1076
-    :cond_3489
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for dialog_class_code_student_select is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1917
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_34a0
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1918
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_34af
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1919
-    :cond_34af
-    const-string v1, "layout/dialog_class_code_student_blocker_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_34bd
-
-    .line 1920
-    new-instance v1, Lcom/classdojo/android/databinding/DialogClassCodeStudentBlockerBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/DialogClassCodeStudentBlockerBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1922
-    :cond_34bd
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for dialog_class_code_student_blocker is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1314
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_34d4
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1315
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_34e3
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1316
-    :cond_34e3
-    const-string v1, "layout/dialog_change_name_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_34f1
-
-    .line 1317
-    new-instance v1, Lcom/classdojo/android/databinding/DialogChangeNameBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/DialogChangeNameBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1319
-    :cond_34f1
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for dialog_change_name is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 639
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_3508
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 640
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_3517
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 641
-    :cond_3517
-    const-string v1, "layout/dialog_base_layout_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_3525
-
-    .line 642
-    new-instance v1, Lcom/classdojo/android/databinding/DialogBaseLayoutBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/DialogBaseLayoutBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 644
-    :cond_3525
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for dialog_base_layout is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 12
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_353c
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 13
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_354b
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 14
-    :cond_354b
-    const-string v1, "layout/dialog_avatar_grid_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_3559
-
-    .line 15
-    new-instance v1, Lcom/classdojo/android/databinding/DialogAvatarGridBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/DialogAvatarGridBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 17
-    :cond_3559
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for dialog_avatar_grid is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1233
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_3570
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1234
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_357f
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1235
-    :cond_357f
-    const-string v1, "layout/dialog_add_student_find_teacher_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_358d
-
-    .line 1236
-    new-instance v1, Lcom/classdojo/android/databinding/DialogAddStudentFindTeacherBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/DialogAddStudentFindTeacherBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1238
-    :cond_358d
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for dialog_add_student_find_teacher is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1788
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_35a4
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1789
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_35b3
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1790
-    :cond_35b3
-    const-string v1, "layout/dialog_add_note_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_35c1
-
-    .line 1791
-    new-instance v1, Lcom/classdojo/android/databinding/DialogAddNoteBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/DialogAddNoteBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1793
-    :cond_35c1
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for dialog_add_note is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2412
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_35d8
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2413
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_35e7
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2414
-    :cond_35e7
-    const-string v1, "layout/connection_type_header_item_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_35f5
-
-    .line 2415
-    new-instance v1, Lcom/classdojo/android/databinding/ConnectionTypeHeaderItemBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ConnectionTypeHeaderItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2417
-    :cond_35f5
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for connection_type_header_item is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 705
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_360c
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 706
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_361b
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 707
-    :cond_361b
-    const-string v1, "layout/combined_compose_audience_student_item_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_3629
-
-    .line 708
-    new-instance v1, Lcom/classdojo/android/databinding/CombinedComposeAudienceStudentItemBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/CombinedComposeAudienceStudentItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 710
-    :cond_3629
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for combined_compose_audience_student_item is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1206
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_3640
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1207
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_364f
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1208
-    :cond_364f
-    const-string v1, "layout/combined_compose_audience_group_item_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_365d
-
-    .line 1209
-    new-instance v1, Lcom/classdojo/android/databinding/CombinedComposeAudienceGroupItemBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/CombinedComposeAudienceGroupItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1211
-    :cond_365d
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for combined_compose_audience_group_item is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1062
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_3674
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1063
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_3683
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1064
-    :cond_3683
-    const-string v1, "layout/class_students_item_header_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_3691
-
-    .line 1065
-    new-instance v1, Lcom/classdojo/android/databinding/ClassStudentsItemHeaderBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ClassStudentsItemHeaderBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1067
-    :cond_3691
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for class_students_item_header is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 987
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_36a8
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 988
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_36b7
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 989
-    :cond_36b7
-    const-string v1, "layout/class_students_item_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_36c5
-
-    .line 990
-    new-instance v1, Lcom/classdojo/android/databinding/ClassStudentsItemBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ClassStudentsItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 992
-    :cond_36c5
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for class_students_item is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 396
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_36dc
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 397
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_36eb
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 398
-    :cond_36eb
-    const-string v1, "layout/binding_variable_placeholder_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_36f9
-
-    .line 399
-    new-instance v1, Lcz/kinst/jakub/viewmodelbinding/databinding/BindingVariablePlaceholderBinding;
-
-    invoke-direct {v1, p1, p2}, Lcz/kinst/jakub/viewmodelbinding/databinding/BindingVariablePlaceholderBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 401
-    :cond_36f9
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for binding_variable_placeholder is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 621
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_3710
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 622
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_371f
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 623
-    :cond_371f
-    const-string v1, "layout/add_note_undo_popup_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_372d
-
-    .line 624
-    new-instance v1, Lcom/classdojo/android/databinding/AddNoteUndoPopupBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/AddNoteUndoPopupBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 626
-    :cond_372d
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for add_note_undo_popup is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 657
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_3744
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 658
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_3753
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 659
-    :cond_3753
-    const-string v1, "layout/activity_teacher_onboarding_check_email_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_3761
-
-    .line 660
-    new-instance v1, Lcom/classdojo/android/databinding/ActivityTeacherOnboardingCheckEmailBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityTeacherOnboardingCheckEmailBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 662
-    :cond_3761
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for activity_teacher_onboarding_check_email is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1872
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_3778
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1873
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_3787
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1874
-    :cond_3787
-    const-string v1, "layout/activity_teacher_home_null_state_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_3795
-
-    .line 1875
-    new-instance v1, Lcom/classdojo/android/databinding/ActivityTeacherHomeNullStateBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityTeacherHomeNullStateBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1877
-    :cond_3795
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for activity_teacher_home_null_state is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 777
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_37ac
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 778
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_37bb
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 779
-    :cond_37bb
-    const-string v1, "layout/activity_teacher_home_drawer_header_light_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_37c9
-
-    .line 780
-    new-instance v1, Lcom/classdojo/android/databinding/ActivityTeacherHomeDrawerHeaderLightBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityTeacherHomeDrawerHeaderLightBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 782
-    :cond_37c9
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for activity_teacher_home_drawer_header_light is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 369
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_37e0
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 370
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_37ef
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 371
-    :cond_37ef
-    const-string v1, "layout/activity_teacher_home_drawer_header_dark_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_37fd
-
-    .line 372
-    new-instance v1, Lcom/classdojo/android/databinding/ActivityTeacherHomeDrawerHeaderDarkBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityTeacherHomeDrawerHeaderDarkBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 374
-    :cond_37fd
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for activity_teacher_home_drawer_header_dark is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 813
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_3814
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 814
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_3823
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 815
-    :cond_3823
-    const-string v1, "layout-sw600dp-land/activity_teacher_home_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_3831
-
-    .line 816
-    new-instance v1, Lcom/classdojo/android/databinding/ActivityTeacherHomeBindingSw600dpLandImpl;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityTeacherHomeBindingSw600dpLandImpl;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 818
-    :cond_3831
-    const-string v1, "layout/activity_teacher_home_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_383f
-
-    .line 819
-    new-instance v1, Lcom/classdojo/android/databinding/ActivityTeacherHomeBindingImpl;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityTeacherHomeBindingImpl;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 821
-    :cond_383f
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for activity_teacher_home is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1125
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_3856
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1126
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_3865
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1127
-    :cond_3865
-    const-string v1, "layout/activity_teacher_behavior_controller_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_3873
-
-    .line 1128
-    new-instance v1, Lcom/classdojo/android/databinding/ActivityTeacherBehaviorControllerBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityTeacherBehaviorControllerBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1130
-    :cond_3873
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for activity_teacher_behavior_controller is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 741
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_388a
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 742
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_3899
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 743
-    :cond_3899
-    const-string v1, "layout/activity_student_settings_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_38a7
-
-    .line 744
-    new-instance v1, Lcom/classdojo/android/databinding/ActivityStudentSettingsBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityStudentSettingsBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 746
-    :cond_38a7
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for activity_student_settings is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1527
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_38be
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1528
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_38cd
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1529
-    :cond_38cd
-    const-string v1, "layout/activity_student_search_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_38db
-
-    .line 1530
-    new-instance v1, Lcom/classdojo/android/databinding/ActivityStudentSearchBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityStudentSearchBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1532
-    :cond_38db
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for activity_student_search is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1305
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_38f2
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1306
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_3901
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1307
-    :cond_3901
-    const-string v1, "layout/activity_share_media_content_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_390f
-
-    .line 1308
-    new-instance v1, Lcom/classdojo/android/databinding/ActivityShareMediaContentBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityShareMediaContentBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1310
-    :cond_390f
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for activity_share_media_content is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 768
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_3926
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 769
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_3935
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 770
-    :cond_3935
-    const-string v1, "layout/activity_share_media_audience_selector_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_3943
-
-    .line 771
-    new-instance v1, Lcom/classdojo/android/databinding/ActivityShareMediaAudienceSelectorBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityShareMediaAudienceSelectorBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 773
-    :cond_3943
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for activity_share_media_audience_selector is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 279
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_395a
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 280
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_3969
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 281
-    :cond_3969
-    const-string v1, "layout/activity_share_media_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_3977
-
-    .line 282
-    new-instance v1, Lcom/classdojo/android/databinding/ActivityShareMediaBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityShareMediaBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 284
-    :cond_3977
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for activity_share_media is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2151
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_398e
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2152
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_399d
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2153
-    :cond_399d
-    const-string v1, "layout/activity_setup_skills_sharing_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_39ab
-
-    .line 2154
-    new-instance v1, Lcom/classdojo/android/databinding/ActivitySetupSkillsSharingBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivitySetupSkillsSharingBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2156
-    :cond_39ab
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for activity_setup_skills_sharing is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 48
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_39c2
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 49
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_39d1
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 50
-    :cond_39d1
-    const-string v1, "layout/activity_setup_skills_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_39df
-
-    .line 51
-    new-instance v1, Lcom/classdojo/android/databinding/ActivitySetupSkillsBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivitySetupSkillsBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 53
-    :cond_39df
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for activity_setup_skills is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 906
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_39f6
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 907
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_3a05
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 908
-    :cond_3a05
-    const-string v1, "layout/activity_onboarding_teacher_sign_up_flow_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_3a13
-
-    .line 909
-    new-instance v1, Lcom/classdojo/android/databinding/ActivityOnboardingTeacherSignUpFlowBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityOnboardingTeacherSignUpFlowBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 911
-    :cond_3a13
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for activity_onboarding_teacher_sign_up_flow is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2466
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_3a2a
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2467
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_3a39
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2468
-    :cond_3a39
-    const-string v1, "layout/activity_onboarding_parent_sign_up_flow_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_3a47
-
-    .line 2469
-    new-instance v1, Lcom/classdojo/android/databinding/ActivityOnboardingParentSignUpFlowBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityOnboardingParentSignUpFlowBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2471
-    :cond_3a47
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for activity_onboarding_parent_sign_up_flow is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 915
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_3a5e
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 916
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_3a6d
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 917
-    :cond_3a6d
-    const-string v1, "layout/activity_dojo_camera_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_3a7b
-
-    .line 918
-    new-instance v1, Lcom/classdojo/android/databinding/ActivityDojoCameraBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityDojoCameraBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 920
-    :cond_3a7b
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for activity_dojo_camera is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1242
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_3a92
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1243
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_3aa1
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1244
-    :cond_3aa1
-    const-string v1, "layout/activity_debug_urls_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_3aaf
-
-    .line 1245
-    new-instance v1, Lcom/classdojo/android/databinding/ActivityDebugUrlsBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityDebugUrlsBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1247
-    :cond_3aaf
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for activity_debug_urls is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 951
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_3ac6
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 952
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_3ad5
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 953
-    :cond_3ad5
-    const-string v1, "layout/activity_debug_deeplinks_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_3ae3
-
-    .line 954
-    new-instance v1, Lcom/classdojo/android/databinding/ActivityDebugDeeplinksBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityDebugDeeplinksBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 956
-    :cond_3ae3
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for activity_debug_deeplinks is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2223
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_3afa
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 2224
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_3b09
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 2225
-    :cond_3b09
-    const-string v1, "layout/activity_debug_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_3b17
-
-    .line 2226
-    new-instance v1, Lcom/classdojo/android/databinding/ActivityDebugBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityDebugBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 2228
-    :cond_3b17
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for activity_debug is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 306
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_3b2e
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 307
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_3b3d
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 308
-    :cond_3b3d
-    const-string v1, "layout/activity_connection_requests_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_3b4b
-
-    .line 309
-    new-instance v1, Lcom/classdojo/android/databinding/ActivityConnectionRequestsBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityConnectionRequestsBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 311
-    :cond_3b4b
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for activity_connection_requests is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 486
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_3b62
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 487
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_3b71
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 488
-    :cond_3b71
-    const-string v1, "layout/activity_connection_reqeusts_item_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_3b7f
-
-    .line 489
-    new-instance v1, Lcom/classdojo/android/databinding/ActivityConnectionReqeustsItemBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityConnectionReqeustsItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 491
-    :cond_3b7f
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for activity_connection_reqeusts_item is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1974
-    .end local v0    # "tag":Ljava/lang/Object;
-    :pswitch_3b96
-    invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
-    move-result-object v0
-
-    .line 1975
-    .restart local v0    # "tag":Ljava/lang/Object;
-    if-nez v0, :cond_3ba5
-
-    new-instance v1, Ljava/lang/RuntimeException;
-
-    const-string v2, "view must have a tag"
-
-    invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    .line 1976
-    :cond_3ba5
-    const-string v1, "layout/activity_combined_camera_text_post_0"
-
-    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v1
-
-    if-eqz v1, :cond_3bb3
-
-    .line 1977
-    new-instance v1, Lcom/classdojo/android/databinding/ActivityCombinedCameraTextPostBinding;
-
-    invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityCombinedCameraTextPostBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
-    return-object v1
-
-    .line 1979
-    :cond_3bb3
-    new-instance v1, Ljava/lang/IllegalArgumentException;
-
-    new-instance v2, Ljava/lang/StringBuilder;
-
-    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
-    const-string v3, "The tag for activity_combined_camera_text_post is invalid. Received: "
-
-    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
-    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
-    move-result-object v2
-
-    invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
-    throw v1
-
-    nop
-
-    :pswitch_data_3bcc
-    .packed-switch 0x7f0c002a
-        :pswitch_3b96
-        :pswitch_3b62
-        :pswitch_3b2e
-    .end packed-switch
-
-    :pswitch_data_3bd6
-    .packed-switch 0x7f0c0031
-        :pswitch_3afa
-        :pswitch_3ac6
-        :pswitch_3a92
-        :pswitch_3a5e
-    .end packed-switch
-
-    :pswitch_data_3be2
-    .packed-switch 0x7f0c0041
-        :pswitch_3a2a
-        :pswitch_39f6
-    .end packed-switch
-
-    :pswitch_data_3bea
-    .packed-switch 0x7f0c0057
-        :pswitch_39c2
-        :pswitch_398e
-        :pswitch_395a
-        :pswitch_3926
-        :pswitch_38f2
-    .end packed-switch
-
-    :pswitch_data_3bf8
-    .packed-switch 0x7f0c0067
-        :pswitch_38be
-        :pswitch_388a
-    .end packed-switch
-
-    :pswitch_data_3c00
-    .packed-switch 0x7f0c006a
-        :pswitch_3856
-        :pswitch_3814
-        :pswitch_37e0
-        :pswitch_37ac
-        :pswitch_3778
-        :pswitch_3744
-    .end packed-switch
-
-    :pswitch_data_3c10
-    .packed-switch 0x7f0c0076
-        :pswitch_3710
-        :pswitch_36dc
-    .end packed-switch
-
-    :pswitch_data_3c18
-    .packed-switch 0x7f0c0084
-        :pswitch_36a8
-        :pswitch_3674
-        :pswitch_3640
-    .end packed-switch
-
-    :pswitch_data_3c22
-    .packed-switch 0x7f0c0088
-        :pswitch_360c
-        :pswitch_35d8
-    .end packed-switch
-
-    :pswitch_data_3c2a
-    .packed-switch 0x7f0c00a3
-        :pswitch_35a4
-        :pswitch_3570
-    .end packed-switch
-
-    :pswitch_data_3c32
-    .packed-switch 0x7f0c00a6
-        :pswitch_353c
-        :pswitch_3508
-        :pswitch_34d4
-        :pswitch_34a0
-        :pswitch_346c
-    .end packed-switch
-
-    :pswitch_data_3c40
-    .packed-switch 0x7f0c00ac
-        :pswitch_3438
-        :pswitch_3404
-        :pswitch_33d0
-        :pswitch_339c
-    .end packed-switch
-
-    :pswitch_data_3c4c
-    .packed-switch 0x7f0c00b1
-        :pswitch_3368
-        :pswitch_3334
-        :pswitch_3300
-        :pswitch_32cc
-    .end packed-switch
-
-    :pswitch_data_3c58
-    .packed-switch 0x7f0c00b8
-        :pswitch_3298
-        :pswitch_3264
-        :pswitch_3230
-    .end packed-switch
-
-    :pswitch_data_3c62
-    .packed-switch 0x7f0c00bc
-        :pswitch_31fc
-        :pswitch_31c8
-        :pswitch_3194
-        :pswitch_3160
-        :pswitch_312c
-        :pswitch_30f8
-    .end packed-switch
-
-    :pswitch_data_3c72
-    .packed-switch 0x7f0c00cb
-        :pswitch_30c4
-        :pswitch_3090
-        :pswitch_305c
-        :pswitch_301a
-        :pswitch_2fe6
-        :pswitch_2fb2
-        :pswitch_2f7e
-        :pswitch_2f4a
-        :pswitch_2f16
-        :pswitch_2ee2
-    .end packed-switch
-
-    :pswitch_data_3c8a
-    .packed-switch 0x7f0c00d6
-        :pswitch_2eae
-        :pswitch_2e7a
-        :pswitch_2e46
-        :pswitch_2e12
-        :pswitch_2dde
-        :pswitch_2daa
-        :pswitch_2d76
-        :pswitch_2d42
-        :pswitch_2d0e
-        :pswitch_2cda
-        :pswitch_2ca6
-        :pswitch_2c72
-        :pswitch_2c3e
-        :pswitch_2c0a
-        :pswitch_2bd6
-        :pswitch_2ba2
-        :pswitch_2b6e
-        :pswitch_2b3a
-        :pswitch_2b06
-        :pswitch_2ad2
-        :pswitch_2a9e
-        :pswitch_2a6a
-        :pswitch_2a36
-        :pswitch_2a02
-        :pswitch_29ce
-        :pswitch_299a
-        :pswitch_2966
-        :pswitch_2924
-        :pswitch_28f0
-        :pswitch_28bc
-        :pswitch_2888
-        :pswitch_2854
-        :pswitch_2820
-        :pswitch_27ec
-    .end packed-switch
-
-    :pswitch_data_3cd2
-    .packed-switch 0x7f0c00f9
-        :pswitch_27b8
-        :pswitch_2784
-        :pswitch_2750
-        :pswitch_271c
-    .end packed-switch
-
-    :pswitch_data_3cde
-    .packed-switch 0x7f0c0100
-        :pswitch_26e8
-        :pswitch_26b4
-        :pswitch_2680
-        :pswitch_264c
-        :pswitch_2618
-        :pswitch_25d6
-        :pswitch_25a2
-        :pswitch_256e
-        :pswitch_253a
-        :pswitch_2506
-        :pswitch_24d2
-        :pswitch_249e
-        :pswitch_246a
-        :pswitch_2436
-        :pswitch_2402
-        :pswitch_23ce
-        :pswitch_239a
-        :pswitch_2366
-        :pswitch_2332
-        :pswitch_22fe
-        :pswitch_22ca
-        :pswitch_2296
-        :pswitch_2262
-        :pswitch_222e
-        :pswitch_21fa
-        :pswitch_21c6
-        :pswitch_2192
-        :pswitch_215e
-        :pswitch_212a
-        :pswitch_20f6
-        :pswitch_20c2
-        :pswitch_208e
-        :pswitch_205a
-        :pswitch_2026
-        :pswitch_1ff2
-        :pswitch_1fbe
-    .end packed-switch
-
-    :pswitch_data_3d2a
-    .packed-switch 0x7f0c0127
-        :pswitch_1f8a
-        :pswitch_1f56
-        :pswitch_1f22
-        :pswitch_1eee
-        :pswitch_1eba
-        :pswitch_1e86
-        :pswitch_1e52
-        :pswitch_1e1e
-        :pswitch_1dea
-        :pswitch_1db6
-        :pswitch_1d82
-        :pswitch_1d4e
-        :pswitch_1d1a
-        :pswitch_1ce6
-        :pswitch_1cb2
-        :pswitch_1c7e
-        :pswitch_1c4a
-        :pswitch_1c16
-        :pswitch_1be2
-        :pswitch_1bae
-        :pswitch_1b7a
-        :pswitch_1b46
-        :pswitch_1b12
-        :pswitch_1ade
-        :pswitch_1aaa
-        :pswitch_1a76
-        :pswitch_1a42
-        :pswitch_1a0e
-        :pswitch_19be
-        :pswitch_197c
-        :pswitch_1948
-        :pswitch_1914
-        :pswitch_18e0
-        :pswitch_18ac
-        :pswitch_1878
-        :pswitch_1844
-        :pswitch_1810
-        :pswitch_17dc
-        :pswitch_17a8
-        :pswitch_1766
-        :pswitch_1732
-        :pswitch_16fe
-        :pswitch_16ca
-        :pswitch_1696
-        :pswitch_1662
-        :pswitch_162e
-        :pswitch_15fa
-        :pswitch_15c6
-        :pswitch_1592
-        :pswitch_155e
-    .end packed-switch
-
-    :pswitch_data_3d92
-    .packed-switch 0x7f0c015f
-        :pswitch_152a
-        :pswitch_14f6
-    .end packed-switch
-
-    :pswitch_data_3d9a
-    .packed-switch 0x7f0c0162
-        :pswitch_14c2
-        :pswitch_148e
-        :pswitch_145a
-        :pswitch_1426
-        :pswitch_13f2
-    .end packed-switch
-
-    :pswitch_data_3da8
-    .packed-switch 0x7f0c016e
-        :pswitch_13be
-        :pswitch_138a
-        :pswitch_1356
-    .end packed-switch
-
-    :pswitch_data_3db2
-    .packed-switch 0x7f0c0174
-        :pswitch_1322
-        :pswitch_12ee
-        :pswitch_12ba
-        :pswitch_1286
-        :pswitch_1252
-        :pswitch_121e
-        :pswitch_11dc
-        :pswitch_11a8
-        :pswitch_1174
-        :pswitch_1140
-        :pswitch_110c
-        :pswitch_10d8
-        :pswitch_10a4
-        :pswitch_1070
-    .end packed-switch
-
-    :pswitch_data_3dd2
-    .packed-switch 0x7f0c0183
-        :pswitch_103c
-        :pswitch_1008
-        :pswitch_fd4
-        :pswitch_fa0
-        :pswitch_f6c
-        :pswitch_f38
-        :pswitch_f04
-        :pswitch_ed0
-    .end packed-switch
-
-    :pswitch_data_3de6
-    .packed-switch 0x7f0c018f
-        :pswitch_e9c
-        :pswitch_e68
-        :pswitch_e34
-        :pswitch_e00
-    .end packed-switch
-
-    :pswitch_data_3df2
-    .packed-switch 0x7f0c019b
-        :pswitch_dcc
-        :pswitch_d98
-        :pswitch_d64
-    .end packed-switch
-
-    :pswitch_data_3dfc
-    .packed-switch 0x7f0c01a6
-        :pswitch_d30
-        :pswitch_cfc
-        :pswitch_cc8
-        :pswitch_c94
-    .end packed-switch
-
-    :pswitch_data_3e08
-    .packed-switch 0x7f0c01ab
-        :pswitch_c60
-        :pswitch_c2c
-        :pswitch_bf8
-    .end packed-switch
-
-    :pswitch_data_3e12
-    .packed-switch 0x7f0c01af
-        :pswitch_bc4
-        :pswitch_b90
-        :pswitch_b5c
-        :pswitch_b28
-        :pswitch_af4
-    .end packed-switch
-
-    :pswitch_data_3e20
-    .packed-switch 0x7f0c01de
-        :pswitch_ac0
-        :pswitch_a8c
-        :pswitch_a58
-    .end packed-switch
-
-    :pswitch_data_3e2a
-    .packed-switch 0x7f0c01f8
-        :pswitch_a24
-        :pswitch_9e2
-        :pswitch_9ae
-    .end packed-switch
-
-    :pswitch_data_3e34
-    .packed-switch 0x7f0c0208
-        :pswitch_97a
-        :pswitch_946
-        :pswitch_912
-        :pswitch_8de
-        :pswitch_8aa
-    .end packed-switch
-
-    :pswitch_data_3e42
-    .packed-switch 0x7f0c0210
-        :pswitch_868
-        :pswitch_834
-        :pswitch_800
-        :pswitch_7cc
-        :pswitch_798
-        :pswitch_764
-    .end packed-switch
-
-    :pswitch_data_3e52
-    .packed-switch 0x7f0c0218
-        :pswitch_730
-        :pswitch_6fc
-        :pswitch_6c8
-    .end packed-switch
-
-    :sswitch_data_3e5c
-    .sparse-switch
-        0x7f0c001d -> :sswitch_694
-        0x7f0c0026 -> :sswitch_660
-        0x7f0c0037 -> :sswitch_62c
-        0x7f0c0046 -> :sswitch_5f8
-        0x7f0c0048 -> :sswitch_5c4
-        0x7f0c004b -> :sswitch_590
-        0x7f0c004d -> :sswitch_55c
-        0x7f0c0052 -> :sswitch_528
-        0x7f0c0054 -> :sswitch_4f4
-        0x7f0c005f -> :sswitch_4b2
-        0x7f0c007f -> :sswitch_47e
-        0x7f0c0090 -> :sswitch_44a
-        0x7f0c00c9 -> :sswitch_416
-        0x7f0c00fe -> :sswitch_3e2
-        0x7f0c0125 -> :sswitch_3ae
-        0x7f0c015a -> :sswitch_37a
-        0x7f0c016b -> :sswitch_346
-        0x7f0c018c -> :sswitch_312
-        0x7f0c0195 -> :sswitch_2de
-        0x7f0c019f -> :sswitch_2aa
-        0x7f0c01a2 -> :sswitch_276
-        0x7f0c01a4 -> :sswitch_242
-        0x7f0c01e5 -> :sswitch_20e
-        0x7f0c01e7 -> :sswitch_1da
-        0x7f0c01e9 -> :sswitch_1a6
-        0x7f0c01f3 -> :sswitch_172
-        0x7f0c01f6 -> :sswitch_13e
-        0x7f0c01fe -> :sswitch_10a
-        0x7f0c0200 -> :sswitch_d6
-        0x7f0c0202 -> :sswitch_a2
-        0x7f0c0205 -> :sswitch_6e
-    .end sparse-switch
-.end method
-
-.method public getDataBinder(Landroid/databinding/DataBindingComponent;[Landroid/view/View;I)Landroid/databinding/ViewDataBinding;
-    .registers 5
-    .param p1, "bindingComponent"    # Landroid/databinding/DataBindingComponent;
-    .param p2, "views"    # [Landroid/view/View;
-    .param p3, "layoutId"    # I
-
-    .line 2652
-    nop
-
-    .line 2654
-    const/4 v0, 0x0
-
-    return-object v0
-.end method
-
-.method public getLayoutId(Ljava/lang/String;)I
-    .registers 15
-    .param p1, "tag"    # Ljava/lang/String;
-
-    .line 2658
-    const/4 v0, 0x0
-
-    if-nez p1, :cond_4
-
-    .line 2659
-    return v0
-
-    .line 2661
-    :cond_4
-    invoke-virtual {p1}, Ljava/lang/String;->hashCode()I
-
-    move-result v1
-
-    .line 2662
-    .local v1, "code":I
-    const v2, 0x7f0c0144
-
-    const v3, 0x7f0c0105
-
-    const v4, 0x7f0c00ce
-
-    const v5, 0x7f0c014e
-
-    const v6, 0x7f0c006b
-
-    const v7, 0x7f0c0210
-
-    const v8, 0x7f0c01f9
-
-    const v9, 0x7f0c017a
-
-    const v10, 0x7f0c005f
-
-    const v11, 0x7f0c00f1
-
-    const v12, 0x7f0c0143
-
-    sparse-switch v1, :sswitch_data_e06
-
-    goto/16 :goto_e05
-
-    .line 3798
-    :sswitch_2e
-    const-string v2, "layout/fragment_student_capture_home_student_list_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3799
-    const v0, 0x7f0c0140
-
-    return v0
-
-    .line 2670
-    :sswitch_3a
-    const-string v2, "layout/fragment_class_wall_settings_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 2671
-    const v0, 0x7f0c00e6
-
-    return v0
-
-    .line 4410
-    :sswitch_46
-    const-string v2, "layout/fragment_enter_student_mode_qr_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4411
-    const v0, 0x7f0c00fb
-
-    return v0
-
-    .line 4104
-    :sswitch_52
-    const-string v2, "layout/item_file_attachment_view_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4105
-    const v0, 0x7f0c0191
-
-    return v0
-
-    .line 3768
-    :sswitch_5e
-    const-string v2, "layout/fragment_kids_list_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3769
-    const v0, 0x7f0c0102
-
-    return v0
-
-    .line 3432
-    :sswitch_6a
-    const-string v2, "layout/fragment_school_detail_header_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3433
-    const v0, 0x7f0c0127
-
-    return v0
-
-    .line 2718
-    :sswitch_76
-    const-string v2, "layout/fragment_tab_notification_pending_posts_item_thumbnail_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 2719
-    const v0, 0x7f0c0179
-
-    return v0
-
-    .line 2982
-    :sswitch_82
-    const-string v2, "layout/fragment_onboarding_enter_code_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 2983
-    const v0, 0x7f0c0109
-
-    return v0
-
-    .line 3750
-    :sswitch_8e
-    const-string v2, "layout/view_drawing_tool_sticker_drawer_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3751
-    const v0, 0x7f0c0212
-
-    return v0
-
-    .line 3024
-    :sswitch_9a
-    const-string v2, "layout/fragment_tab_class_wall_item_compose_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3025
-    const v0, 0x7f0c015f
-
-    return v0
-
-    .line 3006
-    :sswitch_a6
-    const-string v2, "layout/dialog_teacher_student_consent_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3007
-    const v0, 0x7f0c00bf
-
-    return v0
-
-    .line 4374
-    :sswitch_b2
-    const-string v2, "layout/fragment_teacher_student_connection_class_code_qr_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4375
-    const v0, 0x7f0c0184
-
-    return v0
-
-    .line 4008
-    :sswitch_be
-    const-string v2, "layout/activity_combined_camera_text_post_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4009
-    const v0, 0x7f0c002a
-
-    return v0
-
-    .line 3018
-    :sswitch_ca
-    const-string v2, "layout/fragment_parent_checklist_birthday_capture_item_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3019
-    const v0, 0x7f0c0113
-
-    return v0
-
-    .line 4332
-    :sswitch_d6
-    const-string v2, "layout/fragment_school_directory_item_student_parent_circle_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4333
-    const v0, 0x7f0c012d
-
-    return v0
-
-    .line 3384
-    :sswitch_e2
-    const-string v2, "layout/class_students_item_header_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3385
-    const v0, 0x7f0c0085
-
-    return v0
-
-    .line 2922
-    :sswitch_ee
-    const-string v2, "layout/dialog_turn_on_password_lock_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 2923
-    const v0, 0x7f0c00c0
-
-    return v0
-
-    .line 4026
-    :sswitch_fa
-    const-string v2, "layout-sw600dp/fragment_dojo_camera_controls_0_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4027
-    return v11
-
-    .line 3762
-    :sswitch_103
-    const-string v2, "layout/webview_fragment_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3763
-    const v0, 0x7f0c021a
-
-    return v0
-
-    .line 3222
-    :sswitch_10f
-    const-string v2, "layout/toolbar_gray_layout_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3223
-    const v0, 0x7f0c0202
-
-    return v0
-
-    .line 3402
-    :sswitch_11b
-    const-string v2, "layout/fragment_dojo_photo_preview_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3403
-    const v0, 0x7f0c00f6
-
-    return v0
-
-    .line 4320
-    :sswitch_127
-    const-string v2, "layout/fragment_attendance_item_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4321
-    const v0, 0x7f0c00d7
-
-    return v0
-
-    .line 4050
-    :sswitch_133
-    const-string v2, "layout/dialog_unsupported_class_code_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4051
-    const v0, 0x7f0c00c1
-
-    return v0
-
-    .line 3330
-    :sswitch_13f
-    const-string v2, "layout/class_students_item_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3331
-    const v0, 0x7f0c0084
-
-    return v0
-
-    .line 4338
-    :sswitch_14b
-    const-string v2, "layout/fragment_onboarding_student_avatar_editor_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4339
-    const v0, 0x7f0c010f
-
-    return v0
-
-    .line 4128
-    :sswitch_157
-    const-string v2, "layout/fragment_scheduled_messages_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4129
-    const v0, 0x7f0c0123
-
-    return v0
-
-    .line 3258
-    :sswitch_163
-    const-string v2, "layout/fragment_profile_photo_item_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3259
-    const v0, 0x7f0c011f
-
-    return v0
-
-    .line 3534
-    :sswitch_16f
-    const-string v2, "layout/fragment_tab_class_wall_item_student_avatar_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3535
-    const v0, 0x7f0c016b
-
-    return v0
-
-    .line 4464
-    :sswitch_17b
-    const-string v2, "layout/layout_parent_connections_initial_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4465
-    const v0, 0x7f0c01ab
-
-    return v0
-
-    .line 3936
-    :sswitch_187
-    const-string v2, "layout/activity_teacher_home_null_state_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3937
-    const v0, 0x7f0c006e
-
-    return v0
-
-    .line 3396
-    :sswitch_193
-    const-string v2, "layout/fragment_chat_empty_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3397
-    const v0, 0x7f0c00de
-
-    return v0
-
-    .line 4002
-    :sswitch_19f
-    const-string v2, "layout/item_teacher_student_text_code_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4003
-    const v0, 0x7f0c01a6
-
-    return v0
-
-    .line 4272
-    :sswitch_1ab
-    const-string v2, "layout/layout_progress_footer_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4273
-    const v0, 0x7f0c01af
-
-    return v0
-
-    .line 4200
-    :sswitch_1b7
-    const-string v2, "layout/view_parent_pending_connection_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4201
-    const v0, 0x7f0c0215
-
-    return v0
-
-    .line 4140
-    :sswitch_1c3
-    const-string v2, "layout/fragment_create_school_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4141
-    const v0, 0x7f0c00ef
-
-    return v0
-
-    .line 3522
-    :sswitch_1cf
-    const-string v2, "layout/fragment_parent_connection_request_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3523
-    const v0, 0x7f0c0115
-
-    return v0
-
-    .line 3576
-    :sswitch_1db
-    const-string v2, "layout/fragment_edit_behaviours_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3577
-    const v0, 0x7f0c00f7
-
-    return v0
-
-    .line 3390
-    :sswitch_1e7
-    const-string v2, "layout/dialog_class_code_student_select_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3391
-    const v0, 0x7f0c00aa
-
-    return v0
-
-    .line 3516
-    :sswitch_1f3
-    const-string v2, "layout/fragment_teacher_channel_list_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3517
-    const v0, 0x7f0c017e
-
-    return v0
-
-    .line 3264
-    :sswitch_1ff
-    const-string v2, "layout/fragment_tab_class_wall_item_parent_empty_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3265
-    const v0, 0x7f0c0165
-
-    return v0
-
-    .line 3894
-    :sswitch_20b
-    const-string v2, "layout/fragment_group_students_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3895
-    const v0, 0x7f0c00fe
-
-    return v0
-
-    .line 2886
-    :sswitch_217
-    const-string v2, "layout/activity_passwordless_login_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 2887
-    const v0, 0x7f0c004d
-
-    return v0
-
-    .line 2832
-    :sswitch_223
-    const-string v2, "layout/fragment_story_share_to_item_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 2833
-    const v0, 0x7f0c013c
-
-    return v0
-
-    .line 3990
-    :sswitch_22f
-    const-string v2, "layout/fragment_class_list_item_add_class_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3991
-    const v0, 0x7f0c00e1
-
-    return v0
-
-    .line 3606
-    :sswitch_23b
-    const-string v2, "layout/layout_student_connections_invite_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3607
-    const v0, 0x7f0c01b1
-
-    return v0
-
-    .line 4098
-    :sswitch_247
-    const-string v2, "layout/dialog_invite_student_code_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4099
-    const v0, 0x7f0c00af
-
-    return v0
-
-    .line 4032
-    :sswitch_253
-    const-string v2, "layout/fragment_dojo_camera_controls_0_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4033
-    return v11
-
-    .line 3288
-    :sswitch_25c
-    const-string v2, "layout/toolbar_teacher_home_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3289
-    const v0, 0x7f0c0209
-
-    return v0
-
-    .line 3834
-    :sswitch_268
-    const-string v2, "layout/fragment_edit_students_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3835
-    const v0, 0x7f0c00f9
-
-    return v0
-
-    .line 2856
-    :sswitch_274
-    const-string v2, "layout/fragment_student_report_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 2857
-    const v0, 0x7f0c0152
-
-    return v0
-
-    .line 3582
-    :sswitch_280
-    const-string v2, "layout/dialog_schedule_message_time_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3583
-    const v0, 0x7f0c00b8
-
-    return v0
-
-    .line 4290
-    :sswitch_28c
-    const-string v2, "layout/fragment_teacher_settings_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4291
-    const v0, 0x7f0c0181
-
-    return v0
-
-    .line 4398
-    :sswitch_298
-    const-string v2, "layout/fragment_chat_item_sticker_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4399
-    const v0, 0x7f0c00df
-
-    return v0
-
-    .line 2724
-    :sswitch_2a4
-    const-string v2, "layout/fragment_photo_preview_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 2725
-    const v0, 0x7f0c011d
-
-    return v0
-
-    .line 4386
-    :sswitch_2b0
-    const-string v2, "layout/fragment_teacher_approval_feed_item_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4387
-    const v0, 0x7f0c017c
-
-    return v0
-
-    .line 3102
-    :sswitch_2bc
-    const-string v2, "layout/activity_teacher_onboarding_check_email_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3103
-    const v0, 0x7f0c006f
-
-    return v0
-
-    .line 2730
-    :sswitch_2c8
-    const-string v2, "layout/fragment_onboarding_sign_up_details_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 2731
-    const v0, 0x7f0c010a
-
-    return v0
-
-    .line 4176
-    :sswitch_2d4
-    const-string v2, "layout/layout_student_connections_list_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4177
-    const v0, 0x7f0c01b2
-
-    return v0
-
-    .line 3666
-    :sswitch_2e0
-    const-string v2, "layout/item_teacher_add_coteacher_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3667
-    const v0, 0x7f0c01a4
-
-    return v0
-
-    .line 2946
-    :sswitch_2ec
-    const-string v2, "layout/fragment_student_capture_mark_students_marked_item_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 2947
-    const v0, 0x7f0c0142
-
-    return v0
-
-    .line 3240
-    :sswitch_2f8
-    const-string v2, "layout/fragment_parent_school_search_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3241
-    const v0, 0x7f0c0117
-
-    return v0
-
-    .line 3540
-    :sswitch_304
-    const-string v2, "layout/dialog_parent_teacher_invitation_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3541
-    const v0, 0x7f0c00b3
-
-    return v0
-
-    .line 4116
-    :sswitch_310
-    const-string v2, "layout/student_connections_individual_codes_invite_section_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4117
-    const v0, 0x7f0c01f8
-
-    return v0
-
-    .line 3696
-    :sswitch_31c
-    const-string v2, "layout/popup_item_copy_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3697
-    const v0, 0x7f0c01e9
-
-    return v0
-
-    .line 3858
-    :sswitch_328
-    const-string v2, "layout/fragment_combined_camera_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3859
-    const v0, 0x7f0c00e8
-
-    return v0
-
-    .line 4134
-    :sswitch_334
-    const-string v2, "layout/activity_setup_skills_sharing_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4135
-    const v0, 0x7f0c0058
-
-    return v0
-
-    .line 3630
-    :sswitch_340
-    const-string v2, "layout-sw600dp-land/activity_student_capture_home_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3631
-    return v10
-
-    .line 2754
-    :sswitch_349
-    const-string v2, "layout/fragment_class_list_item_class_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 2755
-    const v0, 0x7f0c00e2
-
-    return v0
-
-    .line 3312
-    :sswitch_355
-    const-string v2, "layout/activity_parent_setup_student_account_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3313
-    const v0, 0x7f0c004b
-
-    return v0
-
-    .line 4182
-    :sswitch_361
-    const-string v2, "layout/activity_debug_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4183
-    const v0, 0x7f0c0031
-
-    return v0
-
-    .line 3564
-    :sswitch_36d
-    const-string v2, "layout/fragment_student_capture_student_list_home_item_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3565
-    const v0, 0x7f0c0147
-
-    return v0
-
-    .line 3054
-    :sswitch_379
-    const-string v2, "layout/placeholder_offline_with_refresh_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3055
-    const v0, 0x7f0c01e7
-
-    return v0
-
-    .line 3684
-    :sswitch_385
-    const-string v2, "layout/fragment_audience_selector_item_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3685
-    const v0, 0x7f0c00d8
-
-    return v0
-
-    .line 3732
-    :sswitch_391
-    const-string v2, "layout/activity_parent_home_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3733
-    const v0, 0x7f0c0048
-
-    return v0
-
-    .line 4356
-    :sswitch_39d
-    const-string v2, "layout/fragment_student_codes_item_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4357
-    const v0, 0x7f0c014b
-
-    return v0
-
-    .line 3654
-    :sswitch_3a9
-    const-string v2, "layout/fragment_tab_notification_list_item_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3655
-    const v0, 0x7f0c0175
-
-    return v0
-
-    .line 3282
-    :sswitch_3b5
-    const-string v2, "layout/activity_dojo_camera_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3283
-    const v0, 0x7f0c0034
-
-    return v0
-
-    .line 3978
-    :sswitch_3c1
-    const-string v2, "layout-sw600dp-land/fragment_tab_story_feed_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3979
-    return v9
-
-    .line 4044
-    :sswitch_3ca
-    const-string v2, "layout/dialog_disconnect_student_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4045
-    const v0, 0x7f0c00ac
-
-    return v0
-
-    .line 3912
-    :sswitch_3d6
-    const-string v2, "layout-sw600dp/student_login_list_item_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3913
-    return v8
-
-    .line 2970
-    :sswitch_3df
-    const-string v2, "layout/fragment_student_capture_student_list_item_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 2971
-    const v0, 0x7f0c0148
-
-    return v0
-
-    .line 3036
-    :sswitch_3eb
-    const-string v2, "layout/fragment_school_detail_teacher_item_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3037
-    const v0, 0x7f0c0128
-
-    return v0
-
-    .line 3468
-    :sswitch_3f7
-    const-string v2, "layout/fragment_student_capture_story_feed_item_content_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3469
-    const v0, 0x7f0c0145
-
-    return v0
-
-    .line 3876
-    :sswitch_403
-    const-string v2, "layout/dialog_add_note_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3877
-    const v0, 0x7f0c00a3
-
-    return v0
-
-    .line 3372
-    :sswitch_40f
-    const-string v2, "layout/item_image_resource_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3373
-    const v0, 0x7f0c0195
-
-    return v0
-
-    .line 4230
-    :sswitch_41b
-    const-string v2, "layout/fragment_add_edit_student_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4231
-    const v0, 0x7f0c00d3
-
-    return v0
-
-    .line 3060
-    :sswitch_427
-    const-string v2, "layout/fragment_student_report_add_note_item_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3061
-    const v0, 0x7f0c0153
-
-    return v0
-
-    .line 2682
-    :sswitch_433
-    const-string v2, "layout/fragment_combined_fullscreen_photo_preview_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 2683
-    const v0, 0x7f0c00ed
-
-    return v0
-
-    .line 3108
-    :sswitch_43f
-    const-string v2, "layout/fragment_class_wall_compose_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3109
-    const v0, 0x7f0c00e5
-
-    return v0
-
-    .line 3966
-    :sswitch_44b
-    const-string v2, "layout/dialog_class_code_student_blocker_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3967
-    const v0, 0x7f0c00a9
-
-    return v0
-
-    .line 2868
-    :sswitch_457
-    const-string v2, "layout/activity_connection_requests_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 2869
-    const v0, 0x7f0c002c
-
-    return v0
-
-    .line 2988
-    :sswitch_463
-    const-string v2, "layout/activity_connection_reqeusts_item_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 2989
-    const v0, 0x7f0c002b
-
-    return v0
-
-    .line 2796
-    :sswitch_46f
-    const-string v2, "layout/fragment_school_directory_item_welcome_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 2797
-    const v0, 0x7f0c0131
-
-    return v0
-
-    .line 3726
-    :sswitch_47b
-    const-string v2, "layout/fragment_story_share_to_class_header_item_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3727
-    const v0, 0x7f0c013b
-
-    return v0
-
-    .line 3888
-    :sswitch_487
-    const-string v2, "layout/fragment_tab_class_wall_item_parent_empty_checklist_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3889
-    const v0, 0x7f0c0166
-
-    return v0
-
-    .line 4254
-    :sswitch_493
-    const-string v2, "layout/fragment_school_directory_item_teacher_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4255
-    const v0, 0x7f0c012e
-
-    return v0
-
-    .line 2772
-    :sswitch_49f
-    const-string v2, "layout/fragment_parent_teacher_search_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 2773
-    const v0, 0x7f0c011c
-
-    return v0
-
-    .line 3450
-    :sswitch_4ab
-    const-string v2, "layout/item_parent_list_new_message_invite_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3451
-    const v0, 0x7f0c019f
-
-    return v0
-
-    .line 3426
-    :sswitch_4b7
-    const-string v2, "layout/activity_teacher_behavior_controller_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3427
-    const v0, 0x7f0c006a
-
-    return v0
-
-    .line 3090
-    :sswitch_4c3
-    const-string v2, "layout/dialog_base_layout_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3091
-    const v0, 0x7f0c00a7
-
-    return v0
-
-    .line 3276
-    :sswitch_4cf
-    const-string v2, "layout/activity_onboarding_teacher_sign_up_flow_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3277
-    const v0, 0x7f0c0042
-
-    return v0
-
-    .line 2712
-    :sswitch_4db
-    const-string v2, "layout/dialog_student_capture_student_list_item_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 2713
-    const v0, 0x7f0c00ba
-
-    return v0
-
-    .line 2700
-    :sswitch_4e7
-    const-string v2, "layout/fragment_classroom_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 2701
-    const v0, 0x7f0c00e7
-
-    return v0
-
-    .line 3096
-    :sswitch_4f3
-    const-string v2, "layout/fragment_school_detail_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3097
-    const v0, 0x7f0c0125
-
-    return v0
-
-    .line 3066
-    :sswitch_4ff
-    const-string v2, "layout/layout_create_account_splash_page_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3067
-    const v0, 0x7f0c01a7
-
-    return v0
-
-    .line 3588
-    :sswitch_50b
-    const-string v2, "layout/story_post_created_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3589
-    const v0, 0x7f0c01f6
-
-    return v0
-
-    .line 2736
-    :sswitch_517
-    const-string v2, "layout-sw600dp/fragment_student_capture_preview_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 2737
-    return v12
-
-    .line 3864
-    :sswitch_520
-    const-string v2, "layout/item_class_code_header_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3865
-    const v0, 0x7f0c018f
-
-    return v0
-
-    .line 2706
-    :sswitch_52c
-    const-string v2, "layout/fragment_add_school_student_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 2707
-    const v0, 0x7f0c00d4
-
-    return v0
-
-    .line 3162
-    :sswitch_538
-    const-string v2, "layout/activity_student_settings_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3163
-    const v0, 0x7f0c0068
-
-    return v0
-
-    .line 3930
-    :sswitch_544
-    const-string v2, "layout/item_add_student_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3931
-    const v0, 0x7f0c018c
-
-    return v0
-
-    .line 3504
-    :sswitch_550
-    const-string v2, "layout/activity_debug_urls_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3505
-    const v0, 0x7f0c0033
-
-    return v0
-
-    .line 3456
-    :sswitch_55c
-    const-string v2, "layout/layout_student_connections_initial_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3457
-    const v0, 0x7f0c01b0
-
-    return v0
-
-    .line 3744
-    :sswitch_568
-    const-string v2, "layout/fragment_combined_camera_preview_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3745
-    const v0, 0x7f0c00eb
-
-    return v0
-
-    .line 3252
-    :sswitch_574
-    const-string v2, "layout/fragment_combined_drawing_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3253
-    const v0, 0x7f0c00ec
-
-    return v0
-
-    .line 3000
-    :sswitch_580
-    const-string v2, "layout/fragment_teacher_connection_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3001
-    const v0, 0x7f0c017f
-
-    return v0
-
-    .line 2760
-    :sswitch_58c
-    const-string v2, "layout/fragment_school_search_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 2761
-    const v0, 0x7f0c0133
-
-    return v0
-
-    .line 4380
-    :sswitch_598
-    const-string v2, "layout/activity_email_verified_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4381
-    const v0, 0x7f0c0037
-
-    return v0
-
-    .line 4248
-    :sswitch_5a4
-    const-string v2, "layout/dialog_teacher_invitation_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4249
-    const v0, 0x7f0c00bd
-
-    return v0
-
-    .line 4440
-    :sswitch_5b0
-    const-string v2, "layout/view_drawer_item_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4441
-    return v7
-
-    .line 3084
-    :sswitch_5b9
-    const-string v2, "layout/dialog_password_changed_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3085
-    const v0, 0x7f0c00b4
-
-    return v0
-
-    .line 3636
-    :sswitch_5c5
-    const-string v2, "layout/activity_student_capture_home_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3637
-    return v10
-
-    .line 4188
-    :sswitch_5ce
-    const-string v2, "layout/fragment_invite_item_header_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4189
-    const v0, 0x7f0c0101
-
-    return v0
-
-    .line 4422
-    :sswitch_5da
-    const-string v2, "layout/fragment_parent_setup_student_account_ack_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4423
-    const v0, 0x7f0c0119
-
-    return v0
-
-    .line 3972
-    :sswitch_5e6
-    const-string v2, "layout/fragment_teacher_story_feed_approval_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3973
-    const v0, 0x7f0c0183
-
-    return v0
-
-    .line 3786
-    :sswitch_5f2
-    const-string v2, "layout/fragment_class_list_item_school_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3787
-    const v0, 0x7f0c00e3
-
-    return v0
-
-    .line 3570
-    :sswitch_5fe
-    const-string v2, "layout/dialog_teacher_new_class_success_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3571
-    const v0, 0x7f0c00be
-
-    return v0
-
-    .line 3546
-    :sswitch_60a
-    const-string v2, "layout/activity_share_media_content_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3547
-    const v0, 0x7f0c005b
-
-    return v0
-
-    .line 4314
-    :sswitch_616
-    const-string v2, "layout/fragment_tab_notification_pending_posts_item_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4315
-    const v0, 0x7f0c0178
-
-    return v0
-
-    .line 3210
-    :sswitch_622
-    const-string v2, "layout-sw600dp-land/activity_teacher_home_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3211
-    return v6
-
-    .line 4110
-    :sswitch_62b
-    const-string v2, "layout/fragment_onboarding_sign_up_title_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4111
-    const v0, 0x7f0c010d
-
-    return v0
-
-    .line 3204
-    :sswitch_637
-    const-string v2, "layout/fragment_tab_class_wall_item_invite_card_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3205
-    const v0, 0x7f0c0164
-
-    return v0
-
-    .line 2838
-    :sswitch_643
-    const-string v2, "layout/fragment_student_report_charts_item_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 2839
-    const v0, 0x7f0c0154
-
-    return v0
-
-    .line 4080
-    :sswitch_64f
-    const-string v2, "layout-sw600dp/fragment_student_login_list_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4081
-    return v5
-
-    .line 4224
-    :sswitch_658
-    const-string v2, "layout/toolbar_text_post_layout_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4225
-    const v0, 0x7f0c020c
-
-    return v0
-
-    .line 3186
-    :sswitch_664
-    const-string v2, "layout/activity_teacher_home_drawer_header_light_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3187
-    const v0, 0x7f0c006d
-
-    return v0
-
-    .line 3156
-    :sswitch_670
-    const-string v2, "layout/fragment_combined_camera_controls_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3157
-    const v0, 0x7f0c00ea
-
-    return v0
-
-    .line 2928
-    :sswitch_67c
-    const-string v2, "layout/binding_variable_placeholder_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 2929
-    const v0, 0x7f0c0077
-
-    return v0
-
-    .line 3078
-    :sswitch_688
-    const-string v2, "layout/add_note_undo_popup_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3079
-    const v0, 0x7f0c0076
-
-    return v0
-
-    .line 3804
-    :sswitch_694
-    const-string v2, "layout/item_student_drawing_tool_sticker_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3805
-    const v0, 0x7f0c01a2
-
-    return v0
-
-    .line 4344
-    :sswitch_6a0
-    const-string v2, "layout/activity_onboarding_parent_sign_up_flow_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4345
-    const v0, 0x7f0c0041
-
-    return v0
-
-    .line 3228
-    :sswitch_6ac
-    const-string v2, "layout/fragment_add_coteacher_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3229
-    const v0, 0x7f0c00cf
-
-    return v0
-
-    .line 3954
-    :sswitch_6b8
-    const-string v2, "layout/fragment_teacher_search_item_empty_teacher_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3955
-    const v0, 0x7f0c0180
-
-    return v0
-
-    .line 4446
-    :sswitch_6c4
-    const-string v2, "layout-sw600dp-land/view_drawer_item_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4447
-    return v7
-
-    .line 3462
-    :sswitch_6cd
-    const-string v2, "layout-sw600dp/fragment_dojo_camera_controls_270_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3463
-    const v0, 0x7f0c00f3
-
-    return v0
-
-    .line 3996
-    :sswitch_6d9
-    const-string v2, "layout-sw600dp/fragment_dojo_camera_controls_180_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3997
-    const v0, 0x7f0c00f2
-
-    return v0
-
-    .line 3114
-    :sswitch_6e5
-    const-string v2, "layout/fragment_parent_sign_up_credentials_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3115
-    const v0, 0x7f0c011b
-
-    return v0
-
-    .line 3924
-    :sswitch_6f1
-    const-string v2, "layout/fragment_student_avatar_editor_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3925
-    const v0, 0x7f0c013e
-
-    return v0
-
-    .line 4092
-    :sswitch_6fd
-    const-string v2, "layout/fragment_teacher_welcome_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4093
-    const v0, 0x7f0c0186
-
-    return v0
-
-    .line 3408
-    :sswitch_709
-    const-string v2, "layout/fragment_teacher_student_connection_text_codes_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3409
-    const v0, 0x7f0c0185
-
-    return v0
-
-    .line 4458
-    :sswitch_715
-    const-string v2, "layout/fragment_student_capture_story_feed_item_participant_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4459
-    const v0, 0x7f0c0146
-
-    return v0
-
-    .line 2880
-    :sswitch_721
-    const-string v2, "layout/fragment_student_relation_item_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 2881
-    const v0, 0x7f0c0151
-
-    return v0
-
-    .line 3270
-    :sswitch_72d
-    const-string v2, "layout/fragment_hold_tight_item_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3271
-    const v0, 0x7f0c0100
-
-    return v0
-
-    .line 2976
-    :sswitch_739
-    const-string v2, "layout/layout_parent_connections_invite_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 2977
-    const v0, 0x7f0c01ac
-
-    return v0
-
-    .line 4152
-    :sswitch_745
-    const-string v2, "layout/layout_legacy_video_view_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4153
-    const v0, 0x7f0c01a9
-
-    return v0
-
-    .line 3294
-    :sswitch_751
-    const-string v2, "layout/fragment_combined_camera_compose_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3295
-    const v0, 0x7f0c00e9
-
-    return v0
-
-    .line 2874
-    :sswitch_75d
-    const-string v2, "layout/setup_skills_list_item_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 2875
-    const v0, 0x7f0c01f3
-
-    return v0
-
-    .line 3174
-    :sswitch_769
-    const-string v2, "layout/fragment_onboarding_sign_up_email_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3175
-    const v0, 0x7f0c010b
-
-    return v0
-
-    .line 3138
-    :sswitch_775
-    const-string v2, "layout/combined_compose_audience_student_item_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3139
-    const v0, 0x7f0c0088
-
-    return v0
-
-    .line 3498
-    :sswitch_781
-    const-string v2, "layout/dialog_add_student_find_teacher_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3499
-    const v0, 0x7f0c00a4
-
-    return v0
-
-    .line 3246
-    :sswitch_78d
-    const-string v2, "layout/fragment_preview_message_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3247
-    const v0, 0x7f0c011e
-
-    return v0
-
-    .line 3048
-    :sswitch_799
-    const-string v2, "layout/fragment_single_notification_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3049
-    const v0, 0x7f0c0139
-
-    return v0
-
-    .line 3414
-    :sswitch_7a5
-    const-string v2, "layout/fragment_edit_students_item_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3415
-    const v0, 0x7f0c00fa
-
-    return v0
-
-    .line 3012
-    :sswitch_7b1
-    const-string v2, "layout/fragment_tab_class_wall_item_compose_large_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3013
-    const v0, 0x7f0c0160
-
-    return v0
-
-    .line 4218
-    :sswitch_7bd
-    const-string v2, "layout/fragment_leader_sign_up_role_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4219
-    const v0, 0x7f0c0103
-
-    return v0
-
-    .line 2820
-    :sswitch_7c9
-    const-string v2, "layout/fragment_class_code_student_select_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 2821
-    const v0, 0x7f0c00e0
-
-    return v0
-
-    .line 4164
-    :sswitch_7d5
-    const-string v2, "layout/fragment_school_search_item_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4165
-    const v0, 0x7f0c0135
-
-    return v0
-
-    .line 3900
-    :sswitch_7e1
-    const-string v2, "layout/toolbar_teacher_onboarding_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3901
-    const v0, 0x7f0c020a
-
-    return v0
-
-    .line 3828
-    :sswitch_7ed
-    const-string v2, "layout/fragment_school_directory_item_header_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3829
-    const v0, 0x7f0c012a
-
-    return v0
-
-    .line 2748
-    :sswitch_7f9
-    const-string v2, "layout-sw600dp-land/fragment_student_capture_preview_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 2749
-    return v12
-
-    .line 4068
-    :sswitch_802
-    const-string v2, "layout/fragment_parent_setup_student_account_qr_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4069
-    const v0, 0x7f0c011a
-
-    return v0
-
-    .line 3960
-    :sswitch_80e
-    const-string v2, "layout/fragment_student_registration_form_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3961
-    const v0, 0x7f0c0150
-
-    return v0
-
-    .line 2688
-    :sswitch_81a
-    const-string v2, "layout/activity_setup_skills_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 2689
-    const v0, 0x7f0c0057
-
-    return v0
-
-    .line 4236
-    :sswitch_826
-    const-string v2, "layout/dialog_exit_student_mode_password_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4237
-    const v0, 0x7f0c00ae
-
-    return v0
-
-    .line 3678
-    :sswitch_832
-    const-string v2, "layout/fragment_story_share_to_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3679
-    const v0, 0x7f0c013a
-
-    return v0
-
-    .line 3348
-    :sswitch_83e
-    const-string v2, "layout/fragment_seen_by_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3349
-    const v0, 0x7f0c0136
-
-    return v0
-
-    .line 2826
-    :sswitch_84a
-    const-string v2, "layout/fragment_add_edit_behaviours_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 2827
-    const v0, 0x7f0c00d0
-
-    return v0
-
-    .line 3558
-    :sswitch_856
-    const-string v2, "layout/fragment_story_share_to_student_header_item_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3559
-    const v0, 0x7f0c013d
-
-    return v0
-
-    .line 3366
-    :sswitch_862
-    const-string v2, "layout/fragment_setup_skills_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3367
-    const v0, 0x7f0c0138
-
-    return v0
-
-    .line 2778
-    :sswitch_86e
-    const-string v2, "layout/fragment_dojo_camera_tooltip_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 2779
-    const v0, 0x7f0c00f5
-
-    return v0
-
-    .line 4284
-    :sswitch_87a
-    const-string v2, "layout/fragment_school_search_adapter_footer_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4285
-    const v0, 0x7f0c0134
-
-    return v0
-
-    .line 3042
-    :sswitch_886
-    const-string v2, "layout/fragment_account_switcher_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3043
-    const v0, 0x7f0c00c9
-
-    return v0
-
-    .line 2850
-    :sswitch_892
-    const-string v2, "layout/activity_share_media_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 2851
-    const v0, 0x7f0c0059
-
-    return v0
-
-    .line 4434
-    :sswitch_89e
-    const-string v2, "layout/fragment_student_capture_home_story_feed_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4435
-    const v0, 0x7f0c013f
-
-    return v0
-
-    .line 4308
-    :sswitch_8aa
-    const-string v2, "layout/connection_type_header_item_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4309
-    const v0, 0x7f0c0089
-
-    return v0
-
-    .line 2904
-    :sswitch_8b6
-    const-string v2, "layout-sw600dp/fragment_dojo_camera_controls_90_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 2905
-    const v0, 0x7f0c00f4
-
-    return v0
-
-    .line 3030
-    :sswitch_8c2
-    const-string v2, "layout/dialog_enter_student_mode_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3031
-    const v0, 0x7f0c00ad
-
-    return v0
-
-    .line 3324
-    :sswitch_8ce
-    const-string v2, "layout/debug_feature_list_item_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3325
-    const v0, 0x7f0c0090
-
-    return v0
-
-    .line 3342
-    :sswitch_8da
-    const-string v2, "layout/fragment_add_edit_class_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3343
-    const v0, 0x7f0c00d1
-
-    return v0
-
-    .line 4212
-    :sswitch_8e6
-    const-string v2, "layout/fragment_push_notifications_settings_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4213
-    const v0, 0x7f0c0121
-
-    return v0
-
-    .line 4278
-    :sswitch_8f2
-    const-string v2, "layout/fragment_scheduled_message_item_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4279
-    const v0, 0x7f0c0122
-
-    return v0
-
-    .line 3618
-    :sswitch_8fe
-    const-string v2, "layout-land/fragment_add_class_poster_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3619
-    return v4
-
-    .line 3354
-    :sswitch_907
-    const-string v2, "layout-sw600dp/fragment_mark_students_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3355
-    return v3
-
-    .line 3600
-    :sswitch_910
-    const-string v2, "layout/fragment_tab_class_wall_item_student_report_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3601
-    const v0, 0x7f0c016f
-
-    return v0
-
-    .line 3510
-    :sswitch_91c
-    const-string v2, "layout/fragment_tab_class_wall_item_invite_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3511
-    const v0, 0x7f0c0163
-
-    return v0
-
-    .line 2862
-    :sswitch_928
-    const-string v2, "layout/fragment_student_capture_mark_students_item_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 2863
-    const v0, 0x7f0c0141
-
-    return v0
-
-    .line 2952
-    :sswitch_934
-    const-string v2, "layout/fragment_seen_by_item_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 2953
-    const v0, 0x7f0c0137
-
-    return v0
-
-    .line 3882
-    :sswitch_940
-    const-string v2, "layout/activity_class_link_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3883
-    const v0, 0x7f0c0026
-
-    return v0
-
-    .line 2742
-    :sswitch_94c
-    const-string v2, "layout/fragment_student_capture_preview_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 2743
-    return v12
-
-    .line 3132
-    :sswitch_955
-    const-string v3, "layout/fragment_student_capture_story_feed_item_0"
-
-    invoke-virtual {p1, v3}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v3
-
-    if-eqz v3, :cond_e05
-
-    .line 3133
-    return v2
-
-    .line 2916
-    :sswitch_95e
-    const-string v2, "layout/fragment_school_directory_item_teacher_pending_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 2917
-    const v0, 0x7f0c012f
-
-    return v0
-
-    .line 3192
-    :sswitch_96a
-    const-string v2, "layout/fragment_student_connections_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3193
-    const v0, 0x7f0c014c
-
-    return v0
-
-    .line 2784
-    :sswitch_976
-    const-string v2, "layout/activity_add_edit_class_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 2785
-    const v0, 0x7f0c001d
-
-    return v0
-
-    .line 3624
-    :sswitch_982
-    const-string v2, "layout/fragment_add_class_poster_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3625
-    return v4
-
-    .line 4242
-    :sswitch_98b
-    const-string v2, "layout/fragment_school_directory_item_student_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4243
-    const v0, 0x7f0c012b
-
-    return v0
-
-    .line 4368
-    :sswitch_997
-    const-string v2, "layout/item_class_code_student_select_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4369
-    const v0, 0x7f0c0190
-
-    return v0
-
-    .line 2814
-    :sswitch_9a3
-    const-string v2, "layout/dialog_student_age_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 2815
-    const v0, 0x7f0c00b9
-
-    return v0
-
-    .line 3150
-    :sswitch_9af
-    const-string v2, "layout/layout_dojo_video_view_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3151
-    const v0, 0x7f0c01a8
-
-    return v0
-
-    .line 3948
-    :sswitch_9bb
-    const-string v2, "layout/layout_student_list_empty_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3949
-    const v0, 0x7f0c01b3
-
-    return v0
-
-    .line 3810
-    :sswitch_9c7
-    const-string v2, "layout/fragment_student_report_selector_item_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3811
-    const v0, 0x7f0c0158
-
-    return v0
-
-    .line 4158
-    :sswitch_9d3
-    const-string v2, "layout/dialog_parent_invitation_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4159
-    const v0, 0x7f0c00b2
-
-    return v0
-
-    .line 4452
-    :sswitch_9df
-    const-string v2, "layout/fragment_school_directory_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4453
-    const v0, 0x7f0c0129
-
-    return v0
-
-    .line 2790
-    :sswitch_9eb
-    const-string v2, "layout/fragment_login_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 2791
-    const v0, 0x7f0c0104
-
-    return v0
-
-    .line 3984
-    :sswitch_9f7
-    const-string v2, "layout/fragment_tab_story_feed_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3985
-    return v9
-
-    .line 4014
-    :sswitch_a00
-    const-string v2, "layout/fragment_add_class_invite_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4015
-    const v0, 0x7f0c00cc
-
-    return v0
-
-    .line 4350
-    :sswitch_a0c
-    const-string v2, "layout/item_parent_checklist_complete_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4351
-    const v0, 0x7f0c019d
-
-    return v0
-
-    .line 2808
-    :sswitch_a18
-    const-string v2, "layout/parent_checklist_success_overlay_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 2809
-    const v0, 0x7f0c01de
-
-    return v0
-
-    .line 3690
-    :sswitch_a24
-    const-string v2, "layout/invite_parent_list_item_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3691
-    const v0, 0x7f0c018a
-
-    return v0
-
-    .line 3318
-    :sswitch_a30
-    const-string v2, "layout/fragment_award_grid_item_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3319
-    const v0, 0x7f0c00da
-
-    return v0
-
-    .line 2766
-    :sswitch_a3c
-    const-string v2, "layout/fragment_tab_class_wall_item_webview_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 2767
-    const v0, 0x7f0c0170
-
-    return v0
-
-    .line 3198
-    :sswitch_a48
-    const-string v2, "layout/placeholder_empty_with_refresh_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3199
-    const v0, 0x7f0c01e5
-
-    return v0
-
-    .line 4428
-    :sswitch_a54
-    const-string v2, "layout/fragment_account_switcher_item_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4429
-    const v0, 0x7f0c00cb
-
-    return v0
-
-    .line 2664
-    :sswitch_a60
-    const-string v2, "layout/dialog_avatar_grid_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 2665
-    const v0, 0x7f0c00a6
-
-    return v0
-
-    .line 2958
-    :sswitch_a6c
-    const-string v2, "layout/toolbar_text_layout_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 2959
-    const v0, 0x7f0c020b
-
-    return v0
-
-    .line 4404
-    :sswitch_a78
-    const-string v2, "layout/fragment_add_edit_group_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4405
-    const v0, 0x7f0c00d2
-
-    return v0
-
-    .line 2940
-    :sswitch_a84
-    const-string v2, "layout/fragment_school_null_state_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 2941
-    const v0, 0x7f0c0132
-
-    return v0
-
-    .line 4020
-    :sswitch_a90
-    const-string v2, "layout/fragment_create_account_splash_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4021
-    const v0, 0x7f0c00ee
-
-    return v0
-
-    .line 3756
-    :sswitch_a9c
-    const-string v2, "layout/fragment_onboarding_enable_camera_primer_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3757
-    const v0, 0x7f0c0108
-
-    return v0
-
-    .line 3528
-    :sswitch_aa8
-    const-string v2, "layout/fragment_change_password_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3529
-    const v0, 0x7f0c00dc
-
-    return v0
-
-    .line 3660
-    :sswitch_ab4
-    const-string v2, "layout/fragment_onboarding_sign_up_parent_anti_abuse_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3661
-    const v0, 0x7f0c010c
-
-    return v0
-
-    .line 3486
-    :sswitch_ac0
-    const-string v2, "layout/layout_parent_connections_list_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3487
-    const v0, 0x7f0c01ad
-
-    return v0
-
-    .line 4362
-    :sswitch_acc
-    const-string v2, "layout/fragment_tab_student_list_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4363
-    const v0, 0x7f0c017b
-
-    return v0
-
-    .line 4170
-    :sswitch_ad8
-    const-string v2, "layout/fragment_meet_teacher_item_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4171
-    const v0, 0x7f0c0106
-
-    return v0
-
-    .line 2898
-    :sswitch_ae4
-    const-string v2, "layout/fragment_tab_class_wall_generic_button_icon_text_item_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 2899
-    const v0, 0x7f0c015a
-
-    return v0
-
-    .line 3714
-    :sswitch_af0
-    const-string v2, "layout/item_parent_checklist_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3715
-    const v0, 0x7f0c019c
-
-    return v0
-
-    .line 3594
-    :sswitch_afc
-    const-string v2, "layout/toolbar_teacher_approval_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3595
-    const v0, 0x7f0c0208
-
-    return v0
-
-    .line 3840
-    :sswitch_b08
-    const-string v2, "layout/fragment_school_directory_item_teacher_request_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3841
-    const v0, 0x7f0c0130
-
-    return v0
-
-    .line 3708
-    :sswitch_b14
-    const-string v2, "layout/fragment_chat_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3709
-    const v0, 0x7f0c00dd
-
-    return v0
-
-    .line 3438
-    :sswitch_b20
-    const-string v2, "layout/fragment_tab_notification_list_pending_requests_item_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3439
-    const v0, 0x7f0c0177
-
-    return v0
-
-    .line 3552
-    :sswitch_b2c
-    const-string v2, "layout/dialog_change_name_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3553
-    const v0, 0x7f0c00a8
-
-    return v0
-
-    .line 2844
-    :sswitch_b38
-    const-string v2, "layout/fragment_student_report_item_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 2845
-    const v0, 0x7f0c0155
-
-    return v0
-
-    .line 4296
-    :sswitch_b44
-    const-string v2, "layout/fragment_award_pager_dialog_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4297
-    const v0, 0x7f0c00db
-
-    return v0
-
-    .line 3216
-    :sswitch_b50
-    const-string v2, "layout/activity_teacher_home_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3217
-    return v6
-
-    .line 3780
-    :sswitch_b59
-    const-string v2, "layout/chat_empty_broadcasts_view_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3781
-    const v0, 0x7f0c007f
-
-    return v0
-
-    .line 2910
-    :sswitch_b65
-    const-string v2, "layout/activity_teacher_home_drawer_header_dark_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 2911
-    const v0, 0x7f0c006c
-
-    return v0
-
-    .line 3738
-    :sswitch_b71
-    const-string v2, "layout/fragment_student_profile_date_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3739
-    const v0, 0x7f0c014f
-
-    return v0
-
-    .line 3822
-    :sswitch_b7d
-    const-string v2, "layout/fragment_student_codes_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3823
-    const v0, 0x7f0c014a
-
-    return v0
-
-    .line 4146
-    :sswitch_b89
-    const-string v2, "layout/fragment_parent_channel_list_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4147
-    const v0, 0x7f0c0112
-
-    return v0
-
-    .line 2892
-    :sswitch_b95
-    const-string v2, "layout/fragment_onboarding_splash_user_role_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 2893
-    const v0, 0x7f0c010e
-
-    return v0
-
-    .line 4326
-    :sswitch_ba1
-    const-string v2, "layout/fragment_push_notifications_quiet_hours_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4327
-    const v0, 0x7f0c0120
-
-    return v0
-
-    .line 3612
-    :sswitch_bad
-    const-string v2, "layout/fragment_class_list_item_teacher_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3613
-    const v0, 0x7f0c00e4
-
-    return v0
-
-    .line 3168
-    :sswitch_bb9
-    const-string v2, "layout/fragment_tab_notification_list_item_header_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3169
-    const v0, 0x7f0c0176
-
-    return v0
-
-    .line 4062
-    :sswitch_bc5
-    const-string v2, "layout/view_list_header_limit_width_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4063
-    const v0, 0x7f0c0214
-
-    return v0
-
-    .line 2994
-    :sswitch_bd1
-    const-string v2, "layout/activity_qrcode_scan_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 2995
-    const v0, 0x7f0c0052
-
-    return v0
-
-    .line 3180
-    :sswitch_bdd
-    const-string v2, "layout/activity_share_media_audience_selector_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3181
-    const v0, 0x7f0c005a
-
-    return v0
-
-    .line 3720
-    :sswitch_be9
-    const-string v2, "layout/fragment_student_report_list_item_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3721
-    const v0, 0x7f0c0157
-
-    return v0
-
-    .line 3918
-    :sswitch_bf5
-    const-string v2, "layout/student_login_list_item_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3919
-    return v8
-
-    .line 4266
-    :sswitch_bfe
-    const-string v2, "layout/activity_school_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4267
-    const v0, 0x7f0c0054
-
-    return v0
-
-    .line 3672
-    :sswitch_c0a
-    const-string v2, "layout/fragment_parent_school_search_item_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3673
-    const v0, 0x7f0c0118
-
-    return v0
-
-    .line 4074
-    :sswitch_c16
-    const-string v2, "layout/fragment_student_login_list_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4075
-    return v5
-
-    .line 4260
-    :sswitch_c1f
-    const-string v2, "layout/fragment_parent_connections_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4261
-    const v0, 0x7f0c0116
-
-    return v0
-
-    .line 4086
-    :sswitch_c2b
-    const-string v2, "layout/fragment_parent_account_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4087
-    const v0, 0x7f0c0110
-
-    return v0
-
-    .line 3234
-    :sswitch_c37
-    const-string v2, "layout/fragment_teacher_approval_feed_item_text_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3235
-    const v0, 0x7f0c017d
-
-    return v0
-
-    .line 3126
-    :sswitch_c43
-    const-string v3, "layout-sw600dp-land/fragment_student_capture_story_feed_item_0"
-
-    invoke-virtual {p1, v3}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v3
-
-    if-eqz v3, :cond_e05
-
-    .line 3127
-    return v2
-
-    .line 2694
-    :sswitch_c4c
-    const-string v2, "layout/fragment_student_drawing_tool_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 2695
-    const v0, 0x7f0c014d
-
-    return v0
-
-    .line 3492
-    :sswitch_c58
-    const-string v2, "layout/parent_connections_single_code_invite_section_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3493
-    const v0, 0x7f0c01e0
-
-    return v0
-
-    .line 4038
-    :sswitch_c64
-    const-string v2, "layout/fragment_tab_class_wall_item_demo_empty_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4039
-    const v0, 0x7f0c0162
-
-    return v0
-
-    .line 3300
-    :sswitch_c70
-    const-string v2, "layout/toolbar_base_layout_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3301
-    const v0, 0x7f0c0200
-
-    return v0
-
-    .line 3792
-    :sswitch_c7c
-    const-string v2, "layout/fragment_award_grid_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3793
-    const v0, 0x7f0c00d9
-
-    return v0
-
-    .line 4122
-    :sswitch_c88
-    const-string v2, "layout/dialog_student_list_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4123
-    const v0, 0x7f0c00bc
-
-    return v0
-
-    .line 4392
-    :sswitch_c94
-    const-string v2, "layout/view_drawing_tool_discard_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4393
-    const v0, 0x7f0c0211
-
-    return v0
-
-    .line 3648
-    :sswitch_ca0
-    const-string v2, "layout/fragment_tab_class_wall_item_student_permission_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3649
-    const v0, 0x7f0c016e
-
-    return v0
-
-    .line 3642
-    :sswitch_cac
-    const-string v2, "layout/fragment_parent_add_class_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3643
-    const v0, 0x7f0c0111
-
-    return v0
-
-    .line 3306
-    :sswitch_cb8
-    const-string v2, "layout/activity_debug_deeplinks_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3307
-    const v0, 0x7f0c0032
-
-    return v0
-
-    .line 3378
-    :sswitch_cc4
-    const-string v2, "layout/fragment_parent_checklist_invite_family_item_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3379
-    const v0, 0x7f0c0114
-
-    return v0
-
-    .line 3444
-    :sswitch_cd0
-    const-string v2, "layout/fragment_school_directory_item_student_add_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3445
-    const v0, 0x7f0c012c
-
-    return v0
-
-    .line 3870
-    :sswitch_cdc
-    const-string v2, "layout/toolbar_onboarding_progress_layout_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3871
-    const v0, 0x7f0c0205
-
-    return v0
-
-    .line 3852
-    :sswitch_ce8
-    const-string v2, "layout/fragment_tab_notification_list_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3853
-    const v0, 0x7f0c0174
-
-    return v0
-
-    .line 2964
-    :sswitch_cf4
-    const-string v2, "layout/invite_list_item_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 2965
-    const v0, 0x7f0c0189
-
-    return v0
-
-    .line 3360
-    :sswitch_d00
-    const-string v2, "layout/fragment_mark_students_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3361
-    return v3
-
-    .line 4416
-    :sswitch_d09
-    const-string v2, "layout/fragment_video_preview_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4417
-    const v0, 0x7f0c0187
-
-    return v0
-
-    .line 3906
-    :sswitch_d15
-    const-string v2, "layout/parent_connections_individual_codes_invite_section_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3907
-    const v0, 0x7f0c01df
-
-    return v0
-
-    .line 2934
-    :sswitch_d21
-    const-string v2, "layout/fragment_student_report_list_dialog_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 2935
-    const v0, 0x7f0c0156
-
-    return v0
-
-    .line 3942
-    :sswitch_d2d
-    const-string v2, "layout/dialog_parent_delete_connection_request_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3943
-    const v0, 0x7f0c00b1
-
-    return v0
-
-    .line 4056
-    :sswitch_d39
-    const-string v2, "layout/fragment_dojo_camera_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4057
-    const v0, 0x7f0c00f0
-
-    return v0
-
-    .line 3480
-    :sswitch_d45
-    const-string v2, "layout/combined_compose_audience_group_item_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3481
-    const v0, 0x7f0c0086
-
-    return v0
-
-    .line 3474
-    :sswitch_d51
-    const-string v2, "layout/item_grid_teacher_title_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3475
-    const v0, 0x7f0c0192
-
-    return v0
-
-    .line 3816
-    :sswitch_d5d
-    const-string v2, "layout/student_login_list_not_my_class_item_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3817
-    const v0, 0x7f0c01fa
-
-    return v0
-
-    .line 3702
-    :sswitch_d69
-    const-string v2, "layout/activity_student_search_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3703
-    const v0, 0x7f0c0067
-
-    return v0
-
-    .line 4302
-    :sswitch_d75
-    const-string v2, "layout/fragment_forgot_password_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4303
-    const v0, 0x7f0c00fc
-
-    return v0
-
-    .line 3846
-    :sswitch_d81
-    const-string v2, "layout/view_students_moved_tooltip_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3847
-    const v0, 0x7f0c0218
-
-    return v0
-
-    .line 3120
-    :sswitch_d8d
-    const-string v2, "layout/fragment_student_code_form_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3121
-    const v0, 0x7f0c0149
-
-    return v0
-
-    .line 3072
-    :sswitch_d99
-    const-string v2, "layout/fragment_message_recipients_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3073
-    const v0, 0x7f0c0107
-
-    return v0
-
-    .line 3336
-    :sswitch_da5
-    const-string v2, "layout/fragment_attendance_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3337
-    const v0, 0x7f0c00d6
-
-    return v0
-
-    .line 4194
-    :sswitch_db1
-    const-string v2, "layout/fragment_web_view_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4195
-    const v0, 0x7f0c0188
-
-    return v0
-
-    .line 2676
-    :sswitch_dbd
-    const-string v2, "layout/view_teacher_student_connection_text_codes_instructions_header_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 2677
-    const v0, 0x7f0c0219
-
-    return v0
-
-    .line 2802
-    :sswitch_dc9
-    const-string v2, "layout/view_list_header_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 2803
-    const v0, 0x7f0c0213
-
-    return v0
-
-    .line 3774
-    :sswitch_dd5
-    const-string v2, "layout/activity_parent_checklist_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3775
-    const v0, 0x7f0c0046
-
-    return v0
-
-    .line 4206
-    :sswitch_de1
-    const-string v2, "layout/thumbnail_item_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 4207
-    const v0, 0x7f0c01fe
-
-    return v0
-
-    .line 3420
-    :sswitch_ded
-    const-string v2, "layout/fragment_add_class_invite_code_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3421
-    const v0, 0x7f0c00cd
-
-    return v0
-
-    .line 3144
-    :sswitch_df9
-    const-string v2, "layout/item_onboarding_class_code_header_0"
-
-    invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
-    move-result v2
-
-    if-eqz v2, :cond_e05
-
-    .line 3145
-    const v0, 0x7f0c019b
-
-    return v0
-
-    .line 4470
-    :cond_e05
-    :goto_e05
-    return v0
-
-    :sswitch_data_e06
-    .sparse-switch
-        -0x7ff1b754 -> :sswitch_df9
-        -0x7f0c897b -> :sswitch_ded
-        -0x7d0aa704 -> :sswitch_de1
-        -0x7c6be673 -> :sswitch_dd5
-        -0x7c3fe396 -> :sswitch_dc9
-        -0x7becf608 -> :sswitch_dbd
-        -0x7b0a44b5 -> :sswitch_db1
-        -0x797d3b3c -> :sswitch_da5
-        -0x787ac9b3 -> :sswitch_d99
-        -0x770745a7 -> :sswitch_d8d
-        -0x7647340a -> :sswitch_d81
-        -0x75d10002 -> :sswitch_d75
-        -0x753a0a98 -> :sswitch_d69
-        -0x74899310 -> :sswitch_d5d
-        -0x73a86b46 -> :sswitch_d51
-        -0x73629603 -> :sswitch_d45
-        -0x70a04545 -> :sswitch_d39
-        -0x70067ff0 -> :sswitch_d2d
-        -0x6fff2663 -> :sswitch_d21
-        -0x6c14d67b -> :sswitch_d15
-        -0x6b962df5 -> :sswitch_d09
-        -0x6b5b74af -> :sswitch_d00
-        -0x6b5a686c -> :sswitch_cf4
-        -0x6ae98fb1 -> :sswitch_ce8
-        -0x6a5398ee -> :sswitch_cdc
-        -0x69baa2cb -> :sswitch_cd0
-        -0x68770d73 -> :sswitch_cc4
-        -0x67f67859 -> :sswitch_cb8
-        -0x67a2ada0 -> :sswitch_cac
-        -0x6629c3ca -> :sswitch_ca0
-        -0x660dcd62 -> :sswitch_c94
-        -0x660a05fb -> :sswitch_c88
-        -0x619ba5fd -> :sswitch_c7c
-        -0x5fe088e0 -> :sswitch_c70
-        -0x5fdd67ac -> :sswitch_c64
-        -0x5f10a74b -> :sswitch_c58
-        -0x5b084708 -> :sswitch_c4c
-        -0x5ad2035f -> :sswitch_c43
-        -0x59e896a2 -> :sswitch_c37
-        -0x596de34d -> :sswitch_c2b
-        -0x59554ca5 -> :sswitch_c1f
-        -0x5868dbad -> :sswitch_c16
-        -0x581e0245 -> :sswitch_c0a
-        -0x57f09e50 -> :sswitch_bfe
-        -0x578acaba -> :sswitch_bf5
-        -0x57679658 -> :sswitch_be9
-        -0x56d6ec3b -> :sswitch_bdd
-        -0x547e23ec -> :sswitch_bd1
-        -0x53bb8353 -> :sswitch_bc5
-        -0x528bcbb7 -> :sswitch_bb9
-        -0x524316c9 -> :sswitch_bad
-        -0x5207f75d -> :sswitch_ba1
-        -0x51b92ac3 -> :sswitch_b95
-        -0x513d656a -> :sswitch_b89
-        -0x50e9d457 -> :sswitch_b7d
-        -0x5077865d -> :sswitch_b71
-        -0x501cc71d -> :sswitch_b65
-        -0x4fb86b71 -> :sswitch_b59
-        -0x4e4358e8 -> :sswitch_b50
-        -0x4e1aab7f -> :sswitch_b44
-        -0x4ded10bf -> :sswitch_b38
-        -0x4ca00607 -> :sswitch_b2c
-        -0x4c1d08ea -> :sswitch_b20
-        -0x4b74d30d -> :sswitch_b14
-        -0x4b6090f6 -> :sswitch_b08
-        -0x4b532106 -> :sswitch_afc
-        -0x48d78f77 -> :sswitch_af0
-        -0x476c2da5 -> :sswitch_ae4
-        -0x473cf7b1 -> :sswitch_ad8
-        -0x470ff9d9 -> :sswitch_acc
-        -0x464a89e2 -> :sswitch_ac0
-        -0x4645e18d -> :sswitch_ab4
-        -0x44ce1aaf -> :sswitch_aa8
-        -0x43e66da4 -> :sswitch_a9c
-        -0x4373979d -> :sswitch_a90
-        -0x4362a775 -> :sswitch_a84
-        -0x4350d07d -> :sswitch_a78
-        -0x431e5fbc -> :sswitch_a6c
-        -0x4265e5d5 -> :sswitch_a60
-        -0x4116179a -> :sswitch_a54
-        -0x40f419aa -> :sswitch_a48
-        -0x3ec87248 -> :sswitch_a3c
-        -0x3ec71fef -> :sswitch_a30
-        -0x3d93bcff -> :sswitch_a24
-        -0x3c7a38a4 -> :sswitch_a18
-        -0x3b64498f -> :sswitch_a0c
-        -0x3b4ec057 -> :sswitch_a00
-        -0x3afafbd3 -> :sswitch_9f7
-        -0x3acbc1d0 -> :sswitch_9eb
-        -0x3a661c83 -> :sswitch_9df
-        -0x3a3c34f3 -> :sswitch_9d3
-        -0x39befe39 -> :sswitch_9c7
-        -0x392524cf -> :sswitch_9bb
-        -0x3848bc67 -> :sswitch_9af
-        -0x35732b06 -> :sswitch_9a3
-        -0x348d9d2b -> :sswitch_997
-        -0x3406792d -> :sswitch_98b
-        -0x33ca7313 -> :sswitch_982
-        -0x337c52a3 -> :sswitch_976
-        -0x2f89dc68 -> :sswitch_96a
-        -0x2f689bee -> :sswitch_95e
-        -0x2b6cfc6c -> :sswitch_955
-        -0x2aed7d6e -> :sswitch_94c
-        -0x297fd423 -> :sswitch_940
-        -0x28b29bee -> :sswitch_934
-        -0x27f3f1a0 -> :sswitch_928
-        -0x266d0594 -> :sswitch_91c
-        -0x24f9cea5 -> :sswitch_910
-        -0x24dcc0a0 -> :sswitch_907
-        -0x2401f98f -> :sswitch_8fe
-        -0x22c17f88 -> :sswitch_8f2
-        -0x22582ada -> :sswitch_8e6
-        -0x21ecf7c4 -> :sswitch_8da
-        -0x21b5e195 -> :sswitch_8ce
-        -0x218e1b6f -> :sswitch_8c2
-        -0x2120b3b5 -> :sswitch_8b6
-        -0x20672573 -> :sswitch_8aa
-        -0x1f9a342e -> :sswitch_89e
-        -0x1f934e76 -> :sswitch_892
-        -0x1d954f72 -> :sswitch_886
-        -0x1d93b6ae -> :sswitch_87a
-        -0x1d7a1981 -> :sswitch_86e
-        -0x1bdf8f21 -> :sswitch_862
-        -0x1b42ca7e -> :sswitch_856
-        -0x1b020fac -> :sswitch_84a
-        -0x19e4669e -> :sswitch_83e
-        -0x196ed340 -> :sswitch_832
-        -0x18f62b4b -> :sswitch_826
-        -0x18f615c0 -> :sswitch_81a
-        -0x187e6ff3 -> :sswitch_80e
-        -0x1837990b -> :sswitch_802
-        -0x18162761 -> :sswitch_7f9
-        -0x1711ad89 -> :sswitch_7ed
-        -0x16e040ae -> :sswitch_7e1
-        -0x166f92a6 -> :sswitch_7d5
-        -0x14d1edee -> :sswitch_7c9
-        -0x12830e6b -> :sswitch_7bd
-        -0x126b47b3 -> :sswitch_7b1
-        -0x11ae6340 -> :sswitch_7a5
-        -0x11a7be77 -> :sswitch_799
-        -0xf41cfe9 -> :sswitch_78d
-        -0xf27cc5f -> :sswitch_781
-        -0xed1377f -> :sswitch_775
-        -0xe96e4cf -> :sswitch_769
-        -0xdf0c371 -> :sswitch_75d
-        -0xa513a07 -> :sswitch_751
-        -0x8dc7480 -> :sswitch_745
-        -0x86611f7 -> :sswitch_739
-        -0x6f11a65 -> :sswitch_72d
-        -0x609d307 -> :sswitch_721
-        -0x5abf878 -> :sswitch_715
-        -0x5a60405 -> :sswitch_709
-        -0x5058fb4 -> :sswitch_6fd
-        -0x46586aa -> :sswitch_6f1
-        -0x394ee20 -> :sswitch_6e5
-        -0x3638689 -> :sswitch_6d9
-        -0x355e367 -> :sswitch_6cd
-        -0x27153f6 -> :sswitch_6c4
-        -0x2417edb -> :sswitch_6b8
-        -0x1a6bb21 -> :sswitch_6ac
-        -0xa7e8e3 -> :sswitch_6a0
-        -0x9f812d -> :sswitch_694
-        -0x25f114 -> :sswitch_688
-        0x532a60 -> :sswitch_67c
-        0x8dbe71 -> :sswitch_670
-        0xc0778b -> :sswitch_664
-        0xc87ed1 -> :sswitch_658
-        0x1c1a1a4 -> :sswitch_64f
-        0x1effd51 -> :sswitch_643
-        0x2180e05 -> :sswitch_637
-        0x52032ed -> :sswitch_62b
-        0x97e972b -> :sswitch_622
-        0xa18dd18 -> :sswitch_616
-        0xcf6bd44 -> :sswitch_60a
-        0xdddeeff -> :sswitch_5fe
-        0xeff0381 -> :sswitch_5f2
-        0xf5a5f64 -> :sswitch_5e6
-        0x105c60f7 -> :sswitch_5da
-        0x10a25a5e -> :sswitch_5ce
-        0x11b526b8 -> :sswitch_5c5
-        0x11fbb273 -> :sswitch_5b9
-        0x13379bfd -> :sswitch_5b0
-        0x14318b79 -> :sswitch_5a4
-        0x156bd587 -> :sswitch_598
-        0x1659e31a -> :sswitch_58c
-        0x16ddaab6 -> :sswitch_580
-        0x16f2887f -> :sswitch_574
-        0x177c82af -> :sswitch_568
-        0x18fd59f7 -> :sswitch_55c
-        0x1a0ec90c -> :sswitch_550
-        0x1b06fbe7 -> :sswitch_544
-        0x1b375163 -> :sswitch_538
-        0x1bdc8269 -> :sswitch_52c
-        0x1c98d2a2 -> :sswitch_520
-        0x1d26afe1 -> :sswitch_517
-        0x1dc31e09 -> :sswitch_50b
-        0x1dce4e53 -> :sswitch_4ff
-        0x1fa78f83 -> :sswitch_4f3
-        0x206b4f9a -> :sswitch_4e7
-        0x20f0f2d2 -> :sswitch_4db
-        0x21e07af7 -> :sswitch_4cf
-        0x22e0b117 -> :sswitch_4c3
-        0x23e149d2 -> :sswitch_4b7
-        0x255cf0a4 -> :sswitch_4ab
-        0x264fdb61 -> :sswitch_49f
-        0x268102ba -> :sswitch_493
-        0x27c27982 -> :sswitch_487
-        0x294451ff -> :sswitch_47b
-        0x2998f23a -> :sswitch_46f
-        0x29fcb069 -> :sswitch_463
-        0x2a7bdccb -> :sswitch_457
-        0x2b45262e -> :sswitch_44b
-        0x2c7f409f -> :sswitch_43f
-        0x2f1d48f8 -> :sswitch_433
-        0x2fff07b6 -> :sswitch_427
-        0x3068c37f -> :sswitch_41b
-        0x307f0c2a -> :sswitch_40f
-        0x30f5c833 -> :sswitch_403
-        0x3157654e -> :sswitch_3f7
-        0x317dac8e -> :sswitch_3eb
-        0x31c9069a -> :sswitch_3df
-        0x31cd0317 -> :sswitch_3d6
-        0x340a387b -> :sswitch_3ca
-        0x340b3b80 -> :sswitch_3c1
-        0x34a1113a -> :sswitch_3b5
-        0x3614d945 -> :sswitch_3a9
-        0x3746262b -> :sswitch_39d
-        0x3781fd5a -> :sswitch_391
-        0x37ba2393 -> :sswitch_385
-        0x37f13ec0 -> :sswitch_379
-        0x3851a28e -> :sswitch_36d
-        0x3958b459 -> :sswitch_361
-        0x3b02790e -> :sswitch_355
-        0x3cf1f24d -> :sswitch_349
-        0x419b53cb -> :sswitch_340
-        0x41bf0f9d -> :sswitch_334
-        0x41d8fb66 -> :sswitch_328
-        0x42bf1dda -> :sswitch_31c
-        0x4340426c -> :sswitch_310
-        0x43e2954a -> :sswitch_304
-        0x4435da19 -> :sswitch_2f8
-        0x44c6cd9b -> :sswitch_2ec
-        0x456fd6c5 -> :sswitch_2e0
-        0x4785240d -> :sswitch_2d4
-        0x478d8757 -> :sswitch_2c8
-        0x48aa013a -> :sswitch_2bc
-        0x4a437870 -> :sswitch_2b0
-        0x4a718302 -> :sswitch_2a4
-        0x4b329b9f -> :sswitch_298
-        0x4b53687b -> :sswitch_28c
-        0x4c1d1eac -> :sswitch_280
-        0x4de98cd3 -> :sswitch_274
-        0x4e062bf4 -> :sswitch_268
-        0x4e2b0996 -> :sswitch_25c
-        0x4f2fbb6d -> :sswitch_253
-        0x4fbe49e6 -> :sswitch_247
-        0x5035dc38 -> :sswitch_23b
-        0x50baaeaf -> :sswitch_22f
-        0x50c33b74 -> :sswitch_223
-        0x51e01d5a -> :sswitch_217
-        0x53571c73 -> :sswitch_20b
-        0x5375779b -> :sswitch_1ff
-        0x563e8572 -> :sswitch_1f3
-        0x5741b64a -> :sswitch_1e7
-        0x5982ef72 -> :sswitch_1db
-        0x5983052a -> :sswitch_1cf
-        0x59d8095e -> :sswitch_1c3
-        0x5a510cd7 -> :sswitch_1b7
-        0x5b6fb1ce -> :sswitch_1ab
-        0x5bbea4e8 -> :sswitch_19f
-        0x5d0fc041 -> :sswitch_193
-        0x5d2e5d62 -> :sswitch_187
-        0x5e1b8246 -> :sswitch_17b
-        0x5f022840 -> :sswitch_16f
-        0x62f04df1 -> :sswitch_163
-        0x63632339 -> :sswitch_157
-        0x636426c6 -> :sswitch_14b
-        0x65ba7c9f -> :sswitch_13f
-        0x65e59901 -> :sswitch_133
-        0x66e405f0 -> :sswitch_127
-        0x68fafae7 -> :sswitch_11b
-        0x6922d7ce -> :sswitch_10f
-        0x6a47f10c -> :sswitch_103
-        0x6a49283e -> :sswitch_fa
-        0x6c302670 -> :sswitch_ee
-        0x6eeaf7af -> :sswitch_e2
-        0x70a4c9d9 -> :sswitch_d6
-        0x71503e9b -> :sswitch_ca
-        0x71fd7398 -> :sswitch_be
-        0x751e9427 -> :sswitch_b2
-        0x751fff38 -> :sswitch_a6
-        0x76acc111 -> :sswitch_9a
-        0x78b8a475 -> :sswitch_8e
-        0x79e74a9f -> :sswitch_82
-        0x79f5ac85 -> :sswitch_76
-        0x7a119c4b -> :sswitch_6a
-        0x7af58937 -> :sswitch_5e
-        0x7b2fc0f6 -> :sswitch_52
-        0x7bb64959 -> :sswitch_46
-        0x7d9266b8 -> :sswitch_3a
-        0x7f3d788c -> :sswitch_2e
-    .end sparse-switch
-.end method
diff --git a/src/test/smali/self-is-catch-block/SelfIsCatchBlock.smali b/src/test/smali/self-is-catch-block/SelfIsCatchBlock.smali
deleted file mode 100644
index 04f0cf1..0000000
--- a/src/test/smali/self-is-catch-block/SelfIsCatchBlock.smali
+++ /dev/null
@@ -1,43 +0,0 @@
-# Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-.class public LTest;
-
-.super Ljava/lang/Object;
-
-.method private static throwOnPositive(I)V
-    .registers 2
-    if-lez v1, :cond_nothrow
-    new-instance v0, Ljava/lang/RuntimeException;
-    invoke-direct {v0}, Ljava/lang/RuntimeException;-><init>()V
-    throw v0
-    :cond_nothrow
-    return-void
-.end method
-
-# Tests the flow of values in the pathological case that the block is its own catch handler.
-# This tests that the register allocator does not insert moves at the end of the throwing
-# block since in the case of a throw the block does not actually complete.
-.method static loopWhileThrow(I)I
-    .registers 4
-    :catchall_0
-    move v0, p0
-    add-int/lit8 p0, p0, -0x1
-    :try_start_6
-    invoke-static {v0}, LTest;->throwOnPositive(I)V
-    :try_end_9
-    .catchall {:try_start_6 .. :try_end_9} :catchall_0
-    return p0
-.end method
-
-.method public static main([Ljava/lang/String;)V
-    .registers 2
-    const v0, 0x64
-    sget-object v1, Ljava/lang/System;->out:Ljava/io/PrintStream;
-    invoke-virtual {v1, v0}, Ljava/io/PrintStream;->println(I)V
-    invoke-static {v0}, LTest;->loopWhileThrow(I)I
-    move-result v0
-    invoke-virtual {v1, v0}, Ljava/io/PrintStream;->println(I)V
-    return-void
-.end method
diff --git a/src/test/smali/sparse-switch/SparseSwitch.smali b/src/test/smali/sparse-switch/SparseSwitch.smali
deleted file mode 100644
index 908220e..0000000
--- a/src/test/smali/sparse-switch/SparseSwitch.smali
+++ /dev/null
@@ -1,106 +0,0 @@
-# Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-.class public LTest;
-
-.super Ljava/lang/Object;
-
-# Empty sparse switch
-.method public static test1(I)I
-  .registers 1
-  sparse-switch v0, :sparse_switch_data
-  const/4 v0, 0x1
-  return v0
-
-  :sparse_switch_data
-  .sparse-switch
-  .end sparse-switch
-.end method
-
-# Empty sparse switch after data
-.method public static test2(I)I
-  .registers 1
-
-  goto :sparse_switch
-
-  :sparse_switch_data
-  .sparse-switch
-  .end sparse-switch
-
-  :sparse_switch
-  sparse-switch v0, :sparse_switch_data
-  const/4 v0, 0x2
-  return v0
-.end method
-
-# Sparse switch after data
-.method public static test3(I)I
-  .registers 1
-
-  goto :sparse_switch
-
-  :case_2
-  const/4 v0, 0x3
-  goto :return
-
-  :sparse_switch_data
-  .sparse-switch
-    0x2 -> :case_2
-    0x4 -> :case_4
-  .end sparse-switch
-
-  :sparse_switch
-  sparse-switch v0, :sparse_switch_data
-  const/4 v0, 0x5
-  goto :return
-
-  :case_4
-  const/4 v0, 0x4
-
-  :return
-  return v0
-.end method
-
-.method public static main([Ljava/lang/String;)V
-    .locals 2
-
-    sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
-
-    const/4 v1, 0x0
-    invoke-static {v1}, LTest;->test1(I)I
-    move-result v1
-    invoke-static {v1}, Ljava/lang/Integer;->toString(I)Ljava/lang/String;
-    move-result-object v1
-    invoke-virtual {v0, v1}, Ljava/io/PrintStream;->print(Ljava/lang/Object;)V
-
-    const/4 v1, 0x0
-    invoke-static {v1}, LTest;->test2(I)I
-    move-result v1
-    invoke-static {v1}, Ljava/lang/Integer;->toString(I)Ljava/lang/String;
-    move-result-object v1
-    invoke-virtual {v0, v1}, Ljava/io/PrintStream;->print(Ljava/lang/Object;)V
-
-    const/4 v1, 0x2
-    invoke-static {v1}, LTest;->test3(I)I
-    move-result v1
-    invoke-static {v1}, Ljava/lang/Integer;->toString(I)Ljava/lang/String;
-    move-result-object v1
-    invoke-virtual {v0, v1}, Ljava/io/PrintStream;->print(Ljava/lang/Object;)V
-
-    const/4 v1, 0x4
-    invoke-static {v1}, LTest;->test3(I)I
-    move-result v1
-    invoke-static {v1}, Ljava/lang/Integer;->toString(I)Ljava/lang/String;
-    move-result-object v1
-    invoke-virtual {v0, v1}, Ljava/io/PrintStream;->print(Ljava/lang/Object;)V
-
-    const/4 v1, 0x6
-    invoke-static {v1}, LTest;->test3(I)I
-    move-result v1
-    invoke-static {v1}, Ljava/lang/Integer;->toString(I)Ljava/lang/String;
-    move-result-object v1
-    invoke-virtual {v0, v1}, Ljava/io/PrintStream;->print(Ljava/lang/Object;)V
-
-    return-void
-.end method
diff --git a/src/test/smali/try-catch/TryCatch.smali b/src/test/smali/try-catch/TryCatch.smali
deleted file mode 100644
index 8e06c5a..0000000
--- a/src/test/smali/try-catch/TryCatch.smali
+++ /dev/null
@@ -1,90 +0,0 @@
-# Copyright (c) 2017, the R8 project authors. Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-.class LTest;
-.super Ljava/lang/Object;
-
-# Fall through to catch block.
-.method public test1()V
-    .registers 1
-    :try_start
-    monitor-enter p0
-    monitor-exit  p0
-    :try_end
-    return-void
-    .catchall {:try_start .. :try_end} :try_end
-.end method
-
-.method public static test2()I
-    .locals 1
-    const v0, 0
-    :try_start
-    const v0, 1
-    goto :return
-    :try_end
-    .catch Ljava/lang/Exception; {:try_start .. :try_end} :return
-    .catch Ljava/lang/Throwable; {:try_start .. :try_end} :error
-    :error
-    move-exception v0
-    const v0, 2
-    :return
-    return v0
-.end method
-
-.method public static test2_throw()I
-    .locals 1
-    const v0, 1
-    :try_start
-    invoke-static {}, Ltest/X;->f()V
-    const v0, 0
-    goto :return
-    :try_end
-    .catch Ljava/lang/Exception; {:try_start .. :try_end} :return
-    .catch Ljava/lang/Throwable; {:try_start .. :try_end} :error
-    :error
-    move-exception v0
-    throw v0
-    :return
-    return v0
-.end method
-
-# Dead catch block.
-.method public test3()I
-    .locals 1
-    const v0, 0
-    return v0
-    :start
-    nop
-    :end
-    .catchall {:start .. :end} :catch
-    nop
-    :catch
-    nop
-.end method
-
-.method public static main([Ljava/lang/String;)V
-    .locals 0
-    return-void
-.end method
-
-.method public test4(I)V
-    .locals 1
-    const/4 v0, 0
-    if-nez p0, :not_zero
-    const/4 v0, 1
-    goto :try_end
-    :not_zero
-    const/4 v0, 2
-    :try_start
-    invoke-static {}, Ltest/X;->f()V
-    const/4 v0, 3
-    :try_end
-    return-void
-    .catchall {:try_start .. :try_end} :try_end
-.end method
-
-.method public f()V
-    .locals 0
-    return-void
-.end method
diff --git a/src/test/smali/type-confusion-regression/Test.java b/src/test/smali/type-confusion-regression/Test.java
deleted file mode 100644
index ef41f6b..0000000
--- a/src/test/smali/type-confusion-regression/Test.java
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class Test extends Throwable {
-  public long[] al = { 1, 2, 3 };
-  public int[] ai = null;
-  public boolean b = false;
-  public List a = new ArrayList();
-  public long l = 1 << 53;
-  public int i = 32;
-  public double d = 0.123;
-  public Test h = null;
-
-  public Test(int i) {
-    throw new RuntimeException("Test(i)");
-  }
-
-  public Test(int i, int j) {
-    throw new RuntimeException("Test.<init>(II)");
-  }
-
-  public Test(String s) {
-    throw new RuntimeException("Test.<init>(Ljava/lang/String;)");
-  }
-
-  public Test() {
-    throw new RuntimeException("Test.<init>()");
-  }
-
-  public static int a(Test t) {
-    throw new RuntimeException("Test.a(Test)");
-  }
-
-  public Test e() {
-    throw new RuntimeException("Test.e()");
-  }
-
-  public static void main(String[] args) {
-    try {
-      TestObject.a(new Test(), new Test(), new Test(), new Test());
-    } catch (RuntimeException e) {
-      System.out.println(e);
-    }
-  }
-}
diff --git a/src/test/smali/type-confusion-regression/TestObject.java b/src/test/smali/type-confusion-regression/TestObject.java
deleted file mode 100644
index ee66c35..0000000
--- a/src/test/smali/type-confusion-regression/TestObject.java
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-public class TestObject {
-  public static void a(Test a, Test b, Test c, Test d) {
-  }
-}
diff --git a/src/test/smali/type-confusion-regression/TestObject.smali b/src/test/smali/type-confusion-regression/TestObject.smali
deleted file mode 100644
index 832cab9..0000000
--- a/src/test/smali/type-confusion-regression/TestObject.smali
+++ /dev/null
@@ -1,385 +0,0 @@
-# Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-.class public final LTestObject;
-.super Ljava/lang/Object;
-
-.method public static a(LTest;LTest;LTest;LTest;)V
-    .registers 40
-    .prologue
-    invoke-virtual/range {p2 .. p2}, LTest;->e()LTest;
-    move-result-object v2
-    iget-wide v0, v2, LTest;->l:J
-    move-wide/from16 v22, v0
-    invoke-virtual/range {p2 .. p2}, LTest;->e()LTest;
-    move-result-object v2
-    iget-wide v2, v2, LTest;->l:J
-    const-wide/16 v4, 0x3e8
-    mul-long/2addr v2, v4
-    const-wide/16 v4, 0x3e8
-    mul-long/2addr v2, v4
-    div-long v2, v2, v22
-    move-object/from16 v0, p0
-    iput-wide v2, v0, LTest;->l:J
-    invoke-virtual/range {p1 .. p1}, LTest;->e()LTest;
-    move-result-object v2
-    iget-wide v4, v2, LTest;->d:D
-    double-to-int v3, v4
-    move-object/from16 v0, p0
-    iput v3, v0, LTest;->i:I
-    iget-wide v4, v2, LTest;->d:D
-    double-to-int v3, v4
-    move-object/from16 v0, p0
-    iput v3, v0, LTest;->i:I
-    iget-object v2, v2, LTest;->h:LTest;
-    invoke-static {v2}, LTest;->a(LTest;)I
-    move-result v2
-    move-object/from16 v0, p0
-    iput v2, v0, LTest;->i:I
-    const/4 v3, 0x0
-    invoke-virtual/range {p3 .. p3}, LTest;->e()LTest;
-    move-result-object v2
-    if-eqz v2, :cond_59
-    invoke-virtual/range {p3 .. p3}, LTest;->e()LTest;
-    move-result-object v2
-    iget-object v2, v2, LTest;->a:Ljava/util/List;
-    invoke-interface {v2}, Ljava/util/List;->iterator()Ljava/util/Iterator;
-    move-result-object v4
-    :cond_47
-    invoke-interface {v4}, Ljava/util/Iterator;->hasNext()Z
-    move-result v2
-    if-eqz v2, :cond_59
-    invoke-interface {v4}, Ljava/util/Iterator;->next()Ljava/lang/Object;
-    move-result-object v2
-    check-cast v2, LTest;
-    iget v2, v2, LTest;->i:I
-    if-eqz v2, :cond_47
-    const/4 v2, 0x1
-    move v3, v2
-    :cond_59
-    move-object/from16 v0, p0
-    iput-boolean v3, v0, LTest;->b:Z
-    invoke-virtual/range {p3 .. p3}, LTest;->e()LTest;
-    move-result-object v2
-    iget-object v0, v2, LTest;->a:Ljava/util/List;
-    move-object/from16 v17, v0
-    const/4 v2, 0x0
-    invoke-interface/range {v17 .. v17}, Ljava/util/List;->iterator()Ljava/util/Iterator;
-    move-result-object v5
-    move v4, v2
-    :goto_6b
-    invoke-interface {v5}, Ljava/util/Iterator;->hasNext()Z
-    move-result v2
-    if-eqz v2, :cond_8c
-    invoke-interface {v5}, Ljava/util/Iterator;->next()Ljava/lang/Object;
-    move-result-object v2
-    check-cast v2, LTest;
-    iget-wide v6, v2, LTest;->l:J
-    const-wide/16 v8, 0x0
-    cmp-long v2, v6, v8
-    if-gez v2, :cond_87
-    new-instance v2, LTest;
-    const-string v3, "string"
-    invoke-direct {v2, v3}, LTest;-><init>(Ljava/lang/String;)V
-    throw v2
-    :cond_87
-    int-to-long v8, v4
-    add-long/2addr v6, v8
-    long-to-int v2, v6
-    move v4, v2
-    goto :goto_6b
-    :cond_8c
-    if-gtz v4, :cond_96
-    new-instance v2, LTest;
-    const-string v3, "string"
-    invoke-direct {v2, v3}, LTest;-><init>(Ljava/lang/String;)V
-    throw v2
-    :cond_96
-    invoke-virtual/range {p3 .. p3}, LTest;->e()LTest;
-    move-result-object v5
-    const/4 v2, 0x0
-    if-eqz v5, :cond_260
-    iget-object v2, v5, LTest;->al:[J
-    if-eqz v2, :cond_a4
-    array-length v5, v2
-    if-nez v5, :cond_ac
-    :cond_a4
-    new-instance v2, LTest;
-    const-string v3, "string"
-    invoke-direct {v2, v3}, LTest;-><init>(Ljava/lang/String;)V
-    throw v2
-    :cond_ac
-    array-length v5, v2
-    add-int/lit8 v5, v5, -0x1
-    aget-wide v6, v2, v5
-    int-to-long v8, v4
-    cmp-long v5, v6, v8
-    if-lez v5, :cond_be
-    new-instance v2, LTest;
-    const-string v3, "string"
-    invoke-direct {v2, v3}, LTest;-><init>(Ljava/lang/String;)V
-    throw v2
-    :cond_be
-    move-object v5, v2
-    :goto_bf
-    const/4 v2, 0x0
-    const/4 v6, 0x0
-    invoke-virtual/range {p3 .. p3}, LTest;->e()LTest;
-    move-result-object v7
-    if-eqz v7, :cond_f2
-    iget-object v7, v7, LTest;->a:Ljava/util/List;
-    invoke-interface {v7}, Ljava/util/List;->iterator()Ljava/util/Iterator;
-    move-result-object v8
-    move v6, v2
-    :goto_ce
-    invoke-interface {v8}, Ljava/util/Iterator;->hasNext()Z
-    move-result v2
-    if-eqz v2, :cond_f0
-    invoke-interface {v8}, Ljava/util/Iterator;->next()Ljava/lang/Object;
-    move-result-object v2
-    check-cast v2, LTest;
-    iget v2, v2, LTest;->i:I
-    int-to-long v10, v2
-    const-wide/16 v12, 0x0
-    cmp-long v2, v10, v12
-    if-gez v2, :cond_eb
-    new-instance v2, LTest;
-    const-string v3, "string"
-    invoke-direct {v2, v3}, LTest;-><init>(Ljava/lang/String;)V
-    throw v2
-    :cond_eb
-    int-to-long v12, v6
-    add-long/2addr v10, v12
-    long-to-int v2, v10
-    move v6, v2
-    goto :goto_ce
-    :cond_f0
-    move v2, v6
-    move-object v6, v7
-    :cond_f2
-    if-eqz v2, :cond_fe
-    if-eq v2, v4, :cond_fe
-    new-instance v2, LTest;
-    const-string v3, "string"
-    invoke-direct {v2, v3}, LTest;-><init>(Ljava/lang/String;)V
-    throw v2
-    :cond_fe
-    if-eqz v5, :cond_149
-    new-instance v2, LTest;
-    array-length v7, v5
-    invoke-direct {v2, v4, v7}, LTest;-><init>(II)V
-    move-object v4, v2
-    :goto_107
-    iget-object v0, v4, LTest;->al:[J
-    move-object/from16 v24, v0
-    iget-object v0, v4, LTest;->ai:[I
-    move-object/from16 v25, v0
-    const/16 v16, 0x0
-    const/4 v7, -0x1
-    const-wide/16 v14, 0x0
-    if-eqz v6, :cond_150
-    invoke-interface {v6}, Ljava/util/List;->size()I
-    move-result v2
-    if-lez v2, :cond_150
-    invoke-interface {v6}, Ljava/util/List;->iterator()Ljava/util/Iterator;
-    move-result-object v2
-    move-object v6, v2
-    :goto_121
-    const-wide/16 v12, 0x0
-    const-wide/16 v10, 0x0
-    const-wide/16 v8, 0x0
-    invoke-interface/range {v17 .. v17}, Ljava/util/List;->iterator()Ljava/util/Iterator;
-    move-result-object v26
-    :cond_12b
-    invoke-interface/range {v26 .. v26}, Ljava/util/Iterator;->hasNext()Z
-    move-result v2
-    if-eqz v2, :cond_22d
-    invoke-interface/range {v26 .. v26}, Ljava/util/Iterator;->next()Ljava/lang/Object;
-    move-result-object v2
-    check-cast v2, LTest;
-    iget-wide v0, v2, LTest;->l:J
-    move-wide/from16 v28, v0
-    const-wide/16 v18, 0x0
-    cmp-long v17, v28, v18
-    if-gez v17, :cond_153
-    new-instance v2, LTest;
-    const-string v3, "string"
-    invoke-direct {v2, v3}, LTest;-><init>(Ljava/lang/String;)V
-    throw v2
-    :cond_149
-    new-instance v2, LTest;
-    invoke-direct {v2, v4}, LTest;-><init>(I)V
-    move-object v4, v2
-    goto :goto_107
-    :cond_150
-    const/4 v2, 0x0
-    move-object v6, v2
-    goto :goto_121
-    :cond_153
-    iget-wide v0, v2, LTest;->l:J
-    move-wide/from16 v18, v0
-    move-wide/from16 v20, v18
-    :goto_159
-    const-wide/16 v18, 0x0
-    cmp-long v2, v20, v18
-    if-lez v2, :cond_12b
-    if-eqz v6, :cond_192
-    move-wide/from16 v18, v12
-    :goto_163
-    const-wide/16 v12, 0x0
-    cmp-long v2, v18, v12
-    if-gtz v2, :cond_178
-    invoke-interface {v6}, Ljava/util/Iterator;->next()Ljava/lang/Object;
-    move-result-object v2
-    check-cast v2, LTest;
-    iget v10, v2, LTest;->i:I
-    int-to-long v0, v10
-    move-wide/from16 v18, v0
-    iget v2, v2, LTest;->i:I
-    int-to-long v10, v2
-    goto :goto_163
-    :cond_178
-    if-nez v16, :cond_17b
-    move-wide v8, v10
-    :cond_17b
-    add-long v12, v14, v10
-    sub-long/2addr v12, v8
-    move-wide/from16 v34, v12
-    move-wide v12, v10
-    move-wide v10, v8
-    move-wide/from16 v8, v34
-    :goto_184
-    const-wide/16 v30, 0x0
-    cmp-long v2, v8, v30
-    if-gez v2, :cond_198
-    new-instance v2, LTest;
-    const-string v3, "string"
-    invoke-direct {v2, v3}, LTest;-><init>(Ljava/lang/String;)V
-    throw v2
-    :cond_192
-    move-wide/from16 v18, v12
-    move-wide v12, v10
-    move-wide v10, v8
-    move-wide v8, v14
-    goto :goto_184
-    :cond_198
-    const-wide/16 v30, 0x3e8
-    mul-long v8, v8, v30
-    const-wide/16 v30, 0x3e8
-    mul-long v8, v8, v30
-    div-long v8, v8, v22
-    move/from16 v2, v16
-    :goto_1a4
-    if-lez v2, :cond_1cb
-    add-int/lit8 v17, v2, -0x1
-    aget-wide v30, v24, v17
-    cmp-long v17, v30, v8
-    if-lez v17, :cond_1cb
-    add-int/lit8 v17, v2, -0x1
-    aget-wide v30, v24, v17
-    aput-wide v30, v24, v2
-    if-eqz v25, :cond_1c8
-    if-ltz v7, :cond_1c8
-    add-int/lit8 v17, v2, -0x1
-    aget v27, v25, v7
-    move/from16 v0, v17
-    move/from16 v1, v27
-    if-ne v0, v1, :cond_1c8
-    aget v17, v25, v7
-    add-int/lit8 v17, v17, 0x1
-    aput v17, v25, v7
-    :cond_1c8
-    add-int/lit8 v2, v2, -0x1
-    goto :goto_1a4
-    :cond_1cb
-    aput-wide v8, v24, v2
-    if-lez v2, :cond_1ea
-    add-int/lit8 v17, v2, -0x1
-    aget-wide v30, v24, v17
-    cmp-long v8, v30, v8
-    if-nez v8, :cond_1ea
-    const/4 v3, 0x1
-    if-ne v2, v3, :cond_1e2
-    new-instance v2, LTest;
-    const-string v3, "string"
-    invoke-direct {v2, v3}, LTest;-><init>(Ljava/lang/String;)V
-    throw v2
-    :cond_1e2
-    new-instance v2, LTest;
-    const-string v3, "string"
-    invoke-direct {v2, v3}, LTest;-><init>(Ljava/lang/String;)V
-    throw v2
-    :cond_1ea
-    if-eqz v5, :cond_216
-    add-int/lit8 v8, v7, 0x1
-    array-length v9, v5
-    if-ge v8, v9, :cond_216
-    move/from16 v0, v16
-    int-to-long v8, v0
-    add-int/lit8 v17, v7, 0x1
-    aget-wide v30, v5, v17
-    const-wide/16 v32, 0x1
-    sub-long v30, v30, v32
-    cmp-long v8, v8, v30
-    if-nez v8, :cond_216
-    add-int/lit8 v7, v7, 0x1
-    aput v2, v25, v7
-    if-lez v7, :cond_216
-    add-int/lit8 v2, v7, -0x1
-    aget v2, v25, v2
-    aget v8, v25, v7
-    if-lt v2, v8, :cond_216
-    new-instance v2, LTest;
-    const-string v3, "string"
-    invoke-direct {v2, v3}, LTest;-><init>(Ljava/lang/String;)V
-    throw v2
-    :cond_216
-    add-int/lit8 v2, v16, 0x1
-    add-long v16, v14, v28
-    const-wide/16 v8, 0x1
-    sub-long v14, v18, v8
-    const-wide/16 v8, 0x1
-    sub-long v8, v20, v8
-    move-wide/from16 v20, v8
-    move-wide v8, v10
-    move-wide v10, v12
-    move-wide v12, v14
-    move-wide/from16 v14, v16
-    move/from16 v16, v2
-    goto/16 :goto_159
-    :cond_22d
-    iget-object v2, v4, LTest;->al:[J
-    move-object/from16 v0, p0
-    iput-object v2, v0, LTest;->al:[J
-    iget-object v2, v4, LTest;->ai:[I
-    if-eqz v3, :cond_241
-    if-nez v2, :cond_241
-    new-instance v2, LTest;
-    const-string v3, "string"
-    invoke-direct {v2, v3}, LTest;-><init>(Ljava/lang/String;)V
-    throw v2
-    :cond_241
-    if-eqz v2, :cond_25b
-    array-length v3, v2
-    if-gtz v3, :cond_24e
-    new-instance v2, LTest;
-    const-string v3, "string"
-    invoke-direct {v2, v3}, LTest;-><init>(Ljava/lang/String;)V
-    throw v2
-    :cond_24e
-    const/4 v3, 0x0
-    aget v3, v2, v3
-    if-eqz v3, :cond_25b
-    new-instance v2, LTest;
-    const-string v3, "string"
-    invoke-direct {v2, v3}, LTest;-><init>(Ljava/lang/String;)V
-    throw v2
-    :cond_25b
-    move-object/from16 v0, p0
-    iput-object v2, v0, LTest;->ai:[I
-    return-void
-    :cond_260
-    move-object v5, v2
-    goto/16 :goto_bf
-.end method
\ No newline at end of file
diff --git a/src/test/smali/type-confusion-regression2/Test.java b/src/test/smali/type-confusion-regression2/Test.java
deleted file mode 100644
index 4caa81b..0000000
--- a/src/test/smali/type-confusion-regression2/Test.java
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-public class Test {
-  public static void main(String[] args) {
-    try {
-      new TestObject().b();
-    } catch (Exception e) {
-      System.out.println(e);
-    }
-  }
-}
diff --git a/src/test/smali/type-confusion-regression2/TestObject.java b/src/test/smali/type-confusion-regression2/TestObject.java
deleted file mode 100644
index 677b429..0000000
--- a/src/test/smali/type-confusion-regression2/TestObject.java
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-public class TestObject {
-  public void b() {
-  }
-}
diff --git a/src/test/smali/type-confusion-regression2/TestObject.smali b/src/test/smali/type-confusion-regression2/TestObject.smali
deleted file mode 100644
index a12bd4f..0000000
--- a/src/test/smali/type-confusion-regression2/TestObject.smali
+++ /dev/null
@@ -1,193 +0,0 @@
-# Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-.class public final LTestObject;
-.super Ljava/lang/Object;
-
-.field private static final l:[I
-
-.field public a:I
-.field public b:I
-.field public c:[I
-.field public d:[D
-.field public e:I
-.field public f:I
-.field public g:[D
-.field public h:[D
-.field public i:[D
-.field public j:I
-.field private k:[D
-
-.method public constructor <init>()V
-    .registers 1
-    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
-    return-void
-.end method
-
-.method public final b()V
-    .registers 29
-    move-object/from16 v0, p0
-    iget v2, v0, LTestObject;->a:I
-    const/4 v3, 0x1
-    if-ne v2, v3, :cond_8
-    :cond_7
-    return-void
-    :cond_8
-    move-object/from16 v0, p0
-    iget v2, v0, LTestObject;->a:I
-    mul-int/lit8 v12, v2, 0x2
-    const/4 v5, 0x0
-    move-object/from16 v0, p0
-    iget v2, v0, LTestObject;->a:I
-    const/4 v3, 0x0
-    const/4 v4, 0x0
-    :goto_15
-    add-int/lit8 v6, v4, 0x1
-    const/4 v4, 0x4
-    if-gt v6, v4, :cond_55
-    sget-object v4, LTestObject;->l:[I
-    add-int/lit8 v5, v6, -0x1
-    aget v4, v4, v5
-    move v5, v4
-    move v4, v3
-    :goto_22
-    div-int v3, v2, v5
-    mul-int v7, v5, v3
-    sub-int v7, v2, v7
-    if-nez v7, :cond_f9
-    add-int/lit8 v2, v4, 0x1
-    move-object/from16 v0, p0
-    iget-object v4, v0, LTestObject;->g:[D
-    add-int/lit8 v7, v2, 0x1
-    add-int/2addr v7, v12
-    int-to-double v8, v5
-    aput-wide v8, v4, v7
-    const/4 v4, 0x2
-    if-ne v5, v4, :cond_64
-    const/4 v4, 0x1
-    if-eq v2, v4, :cond_64
-    const/4 v4, 0x2
-    :goto_3d
-    if-gt v4, v2, :cond_5a
-    sub-int v7, v2, v4
-    add-int/lit8 v7, v7, 0x2
-    add-int/2addr v7, v12
-    move-object/from16 v0, p0
-    iget-object v8, v0, LTestObject;->g:[D
-    add-int/lit8 v9, v7, 0x1
-    move-object/from16 v0, p0
-    iget-object v10, v0, LTestObject;->g:[D
-    aget-wide v10, v10, v7
-    aput-wide v10, v8, v9
-    add-int/lit8 v4, v4, 0x1
-    goto :goto_3d
-    :cond_55
-    add-int/lit8 v4, v5, 0x2
-    move v5, v4
-    move v4, v3
-    goto :goto_22
-    :cond_5a
-    move-object/from16 v0, p0
-    iget-object v4, v0, LTestObject;->g:[D
-    add-int/lit8 v7, v12, 0x2
-    const-wide/high16 v8, 0x4000000000000000L
-    aput-wide v8, v4, v7
-    :cond_64
-    const/4 v4, 0x1
-    if-ne v3, v4, :cond_f5
-    move-object/from16 v0, p0
-    iget-object v3, v0, LTestObject;->g:[D
-    move-object/from16 v0, p0
-    iget v4, v0, LTestObject;->a:I
-    int-to-double v4, v4
-    aput-wide v4, v3, v12
-    move-object/from16 v0, p0
-    iget-object v3, v0, LTestObject;->g:[D
-    add-int/lit8 v4, v12, 0x1
-    int-to-double v6, v2
-    aput-wide v6, v3, v4
-    const-wide v4, 0x401921fb54442d18L
-    move-object/from16 v0, p0
-    iget v3, v0, LTestObject;->a:I
-    int-to-double v6, v3
-    div-double v14, v4, v6
-    const/4 v6, 0x0
-    add-int/lit8 v13, v2, -0x1
-    const/4 v2, 0x1
-    if-eqz v13, :cond_7
-    const/4 v3, 0x1
-    move v9, v2
-    move v11, v3
-    :goto_90
-    if-gt v11, v13, :cond_7
-    move-object/from16 v0, p0
-    iget-object v2, v0, LTestObject;->g:[D
-    add-int/lit8 v3, v11, 0x1
-    add-int/2addr v3, v12
-    aget-wide v2, v2, v3
-    double-to-int v3, v2
-    const/4 v2, 0x0
-    mul-int v10, v9, v3
-    move-object/from16 v0, p0
-    iget v4, v0, LTestObject;->a:I
-    div-int v16, v4, v10
-    add-int/lit8 v17, v3, -0x1
-    const/4 v3, 0x1
-    move v8, v3
-    :goto_a9
-    move/from16 v0, v17
-    if-gt v8, v0, :cond_f0
-    add-int v7, v2, v9
-    int-to-double v2, v7
-    mul-double v18, v2, v14
-    const-wide/16 v4, 0x0
-    const/4 v2, 0x3
-    move v3, v6
-    :goto_b6
-    move/from16 v0, v16
-    if-gt v2, v0, :cond_e9
-    add-int/lit8 v3, v3, 0x2
-    const-wide/high16 v20, 0x3ff0000000000000L
-    add-double v4, v4, v20
-    mul-double v20, v4, v18
-    move-object/from16 v0, p0
-    iget v0, v0, LTestObject;->a:I
-    move/from16 v22, v0
-    add-int v22, v22, v3
-    move-object/from16 v0, p0
-    iget-object v0, v0, LTestObject;->g:[D
-    move-object/from16 v23, v0
-    add-int/lit8 v24, v22, -0x2
-    invoke-static/range {v20 .. v21}, Ljava/lang/Math;->cos(D)D
-    move-result-wide v26
-    aput-wide v26, v23, v24
-    move-object/from16 v0, p0
-    iget-object v0, v0, LTestObject;->g:[D
-    move-object/from16 v23, v0
-    add-int/lit8 v22, v22, -0x1
-    invoke-static/range {v20 .. v21}, Ljava/lang/Math;->sin(D)D
-    move-result-wide v20
-    aput-wide v20, v23, v22
-    add-int/lit8 v2, v2, 0x2
-    goto :goto_b6
-    :cond_e9
-    add-int v6, v6, v16
-    add-int/lit8 v2, v8, 0x1
-    move v8, v2
-    move v2, v7
-    goto :goto_a9
-    :cond_f0
-    add-int/lit8 v2, v11, 0x1
-    move v9, v10
-    move v11, v2
-    goto :goto_90
-    :cond_f5
-    move v4, v2
-    move v2, v3
-    goto/16 :goto_22
-    :cond_f9
-    move v3, v4
-    move v4, v6
-    goto/16 :goto_15
-.end method
\ No newline at end of file
diff --git a/src/test/smali/type-confusion-regression3/Test.java b/src/test/smali/type-confusion-regression3/Test.java
deleted file mode 100644
index 0f1f0f2..0000000
--- a/src/test/smali/type-confusion-regression3/Test.java
+++ /dev/null
@@ -1,74 +0,0 @@
-// Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-public class Test extends Throwable {
-  public byte[] a;
-
-  public Test(String s) {
-    throw new RuntimeException("Test(Ljava/lang/String;");
-  }
-
-  public Test(int a, Test b) {
-    throw new RuntimeException("Test(ILTest;)");
-  }
-
-  public Test() {
-  }
-
-  public long c() {
-    throw new RuntimeException("Test.c()");
-  }
-
-  public Object valueAt(int i) {
-    throw new RuntimeException("Test.valueAt(I)");
-  }
-
-  public void b(int i) {
-    throw new RuntimeException("Test.b(I)");
-  }
-
-  public void b(byte[] a, int b, int c) {
-    throw new RuntimeException("Test.b([BII)");
-  }
-
-  public void a() {
-    throw new RuntimeException("Test.a()");
-  }
-
-  public void a(Test a) {
-    throw new RuntimeException("Test.a(LTest;)");
-  }
-
-  public void a(Test a, int i) {
-    throw new RuntimeException("Test.a(LTest;I)");
-  }
-
-  public boolean a(byte[] a, int b, int c, boolean d) {
-    throw new RuntimeException("Test.a");
-  }
-
-  public void a(long a, int b, int c, int d, byte[] e) {
-    throw new RuntimeException("Test.a(JIII[B)");
-  }
-
-  public void c(int i) {
-    throw new RuntimeException("Test.c(I)");
-  }
-
-  public int n() {
-    throw new RuntimeException("Test.n()");
-  }
-
-  public int size() {
-    throw new RuntimeException("Test.size");
-  }
-
-  public static void main(String[] args) {
-    try {
-      new TestObject().a(new Test(), new Test());
-    } catch (Exception e) {
-      System.out.println(e);
-    }
-  }
-}
diff --git a/src/test/smali/type-confusion-regression3/TestObject.java b/src/test/smali/type-confusion-regression3/TestObject.java
deleted file mode 100644
index f20168c..0000000
--- a/src/test/smali/type-confusion-regression3/TestObject.java
+++ /dev/null
@@ -1,9 +0,0 @@
-// Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-public class TestObject {
-  public int a(Test a, Test b) {
-    return 0;
-  }
-}
diff --git a/src/test/smali/type-confusion-regression3/TestObject.smali b/src/test/smali/type-confusion-regression3/TestObject.smali
deleted file mode 100644
index 5b87a27..0000000
--- a/src/test/smali/type-confusion-regression3/TestObject.smali
+++ /dev/null
@@ -1,924 +0,0 @@
-# Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-.class public final LTestObject;
-.super Ljava/lang/Object;
-
-.field private i:I
-.field private o:LTest;
-
-.method public constructor <init>()V
-    .registers 1
-    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
-    return-void
-.end method
-
-.method public final a(LTest;LTest;)I
-    .registers 28
-    .prologue
-    :cond_0
-    :goto_0
-    move-object/from16 v0, p0
-    iget v4, v0, LTestObject;->i:I
-    packed-switch v4, :pswitch_data_60a
-    move-object/from16 v0, p0
-    iget v4, v0, LTestObject;->i:I
-    const/4 v5, 0x3
-    if-ne v4, v5, :cond_4ac
-    move-object/from16 v0, p0
-    iget-object v4, v0, LTestObject;->o:LTest;
-    if-nez v4, :cond_431
-    move-object/from16 v0, p0
-    iget-object v11, v0, LTestObject;->o:LTest;
-    const/4 v5, 0x0
-    const-wide v8, 0x7fffffffffffffffL
-    invoke-virtual {v11}, LTest;->size()I
-    move-result v12
-    const/4 v4, 0x0
-    move v10, v4
-    :goto_24
-    if-ge v10, v12, :cond_3e8
-    invoke-virtual {v11, v10}, LTest;->valueAt(I)Ljava/lang/Object;
-    move-result-object v4
-    check-cast v4, LTest;
-    iget v6, v4, LTest;->e:I
-    iget-object v7, v4, LTest;->a:LTest;
-    iget v7, v7, LTest;->d:I
-    if-eq v6, v7, :cond_5fe
-    iget-object v6, v4, LTest;->a:LTest;
-    iget-wide v6, v6, LTest;->b:J
-    cmp-long v13, v6, v8
-    if-gez v13, :cond_5fe
-    move-wide/from16 v23, v6
-    move-object v6, v4
-    move-wide/from16 v4, v23
-    :goto_41
-    add-int/lit8 v7, v10, 0x1
-    move v10, v7
-    move-wide v8, v4
-    move-object v5, v6
-    goto :goto_24
-    :pswitch_47
-    move-object/from16 v0, p0
-    iget v4, v0, LTestObject;->i:I
-    if-nez v4, :cond_8a
-    move-object/from16 v0, p0
-    iget-object v4, v0, LTestObject;->o:LTest;
-    iget-object v4, v4, LTest;->a:[B
-    const/4 v5, 0x0
-    const/16 v6, 0x8
-    const/4 v7, 0x1
-    move-object/from16 v0, p1
-    invoke-virtual {v0, v4, v5, v6, v7}, LTest;->a([BIIZ)Z
-    move-result v4
-    if-nez v4, :cond_64
-    const/4 v4, 0x0
-    :goto_60
-    if-nez v4, :cond_0
-    const/4 v4, -0x1
-    :goto_63
-    return v4
-    :cond_64
-    const/16 v4, 0x8
-    move-object/from16 v0, p0
-    iput v4, v0, LTestObject;->i:I
-    move-object/from16 v0, p0
-    iget-object v4, v0, LTestObject;->o:LTest;
-    const/4 v5, 0x0
-    invoke-virtual {v4, v5}, LTest;->c(I)V
-    move-object/from16 v0, p0
-    iget-object v4, v0, LTestObject;->o:LTest;
-    invoke-virtual {v4}, LTest;->h()J
-    move-result-wide v4
-    move-object/from16 v0, p0
-    iput-wide v4, v0, LTestObject;->n:J
-    move-object/from16 v0, p0
-    iget-object v4, v0, LTestObject;->o:LTest;
-    invoke-virtual {v4}, LTest;->j()I
-    move-result v4
-    move-object/from16 v0, p0
-    iput v4, v0, LTestObject;->i:I
-    :cond_8a
-    move-object/from16 v0, p0
-    iget-wide v4, v0, LTestObject;->n:J
-    const-wide/16 v6, 0x1
-    cmp-long v4, v4, v6
-    if-nez v4, :cond_b9
-    move-object/from16 v0, p0
-    iget-object v4, v0, LTestObject;->o:LTest;
-    iget-object v4, v4, LTest;->a:[B
-    const/16 v5, 0x8
-    const/16 v6, 0x8
-    move-object/from16 v0, p1
-    invoke-virtual {v0, v4, v5, v6}, LTest;->b([BII)V
-    move-object/from16 v0, p0
-    iget v4, v0, LTestObject;->i:I
-    add-int/lit8 v4, v4, 0x8
-    move-object/from16 v0, p0
-    iput v4, v0, LTestObject;->i:I
-    move-object/from16 v0, p0
-    iget-object v4, v0, LTestObject;->o:LTest;
-    invoke-virtual {v4}, LTest;->p()J
-    move-result-wide v4
-    move-object/from16 v0, p0
-    iput-wide v4, v0, LTestObject;->n:J
-    :cond_b9
-    invoke-virtual/range {p1 .. p1}, LTest;->c()J
-    move-result-wide v4
-    move-object/from16 v0, p0
-    iget v6, v0, LTestObject;->i:I
-    int-to-long v6, v6
-    sub-long v6, v4, v6
-    move-object/from16 v0, p0
-    iget v4, v0, LTestObject;->i:I
-    sget v5, LTest;->J:I
-    if-ne v4, v5, :cond_ec
-    move-object/from16 v0, p0
-    iget-object v4, v0, LTestObject;->o:LTest;
-    invoke-virtual {v4}, LTest;->size()I
-    move-result v8
-    const/4 v4, 0x0
-    move v5, v4
-    :goto_d6
-    if-ge v5, v8, :cond_ec
-    move-object/from16 v0, p0
-    iget-object v4, v0, LTestObject;->o:LTest;
-    invoke-virtual {v4, v5}, LTest;->valueAt(I)Ljava/lang/Object;
-    move-result-object v4
-    check-cast v4, LTest;
-    iget-object v4, v4, LTest;->a:LTest;
-    iput-wide v6, v4, LTest;->c:J
-    iput-wide v6, v4, LTest;->b:J
-    add-int/lit8 v4, v5, 0x1
-    move v5, v4
-    goto :goto_d6
-    :cond_ec
-    move-object/from16 v0, p0
-    iget v4, v0, LTestObject;->i:I
-    sget v5, LTest;->h:I
-    if-ne v4, v5, :cond_11e
-    const/4 v4, 0x0
-    move-object/from16 v0, p0
-    iput-object v4, v0, LTestObject;->o:LTest;
-    move-object/from16 v0, p0
-    iget-wide v4, v0, LTestObject;->n:J
-    add-long/2addr v4, v6
-    move-object/from16 v0, p0
-    iput-wide v4, v0, LTestObject;->q:J
-    move-object/from16 v0, p0
-    iget-boolean v4, v0, LTestObject;->w:Z
-    if-nez v4, :cond_116
-    move-object/from16 v0, p0
-    iget-object v4, v0, LTestObject;->o:LTest;
-    sget-object v5, LTest;->f:LTest;
-    invoke-virtual {v4, v5}, LTest;->a(LTest;)V
-    const/4 v4, 0x1
-    move-object/from16 v0, p0
-    iput-boolean v4, v0, LTestObject;->w:Z
-    :cond_116
-    const/4 v4, 0x2
-    move-object/from16 v0, p0
-    iput v4, v0, LTestObject;->i:I
-    :goto_11b
-    const/4 v4, 0x1
-    goto/16 :goto_60
-    :cond_11e
-    move-object/from16 v0, p0
-    iget v4, v0, LTestObject;->i:I
-    sget v5, LTest;->A:I
-    if-eq v4, v5, :cond_146
-    sget v5, LTest;->C:I
-    if-eq v4, v5, :cond_146
-    sget v5, LTest;->D:I
-    if-eq v4, v5, :cond_146
-    sget v5, LTest;->E:I
-    if-eq v4, v5, :cond_146
-    sget v5, LTest;->F:I
-    if-eq v4, v5, :cond_146
-    sget v5, LTest;->J:I
-    if-eq v4, v5, :cond_146
-    sget v5, LTest;->K:I
-    if-eq v4, v5, :cond_146
-    sget v5, LTest;->L:I
-    if-eq v4, v5, :cond_146
-    sget v5, LTest;->O:I
-    if-ne v4, v5, :cond_178
-    :cond_146
-    const/4 v4, 0x1
-    :goto_147
-    if-eqz v4, :cond_17e
-    invoke-virtual/range {p1 .. p1}, LTest;->c()J
-    move-result-wide v4
-    move-object/from16 v0, p0
-    iget-wide v6, v0, LTestObject;->n:J
-    add-long/2addr v4, v6
-    const-wide/16 v6, 0x8
-    sub-long/2addr v4, v6
-    move-object/from16 v0, p0
-    iget-object v6, v0, LTestObject;->k:Ljava/util/Stack;
-    new-instance v7, LTest;
-    move-object/from16 v0, p0
-    iget v8, v0, LTestObject;->i:I
-    invoke-direct {v7, v8, v4, v5}, LTest;-><init>(IJ)V
-    invoke-virtual {v6, v7}, Ljava/util/Stack;->add(Ljava/lang/Object;)Z
-    move-object/from16 v0, p0
-    iget-wide v6, v0, LTestObject;->n:J
-    move-object/from16 v0, p0
-    iget v8, v0, LTestObject;->i:I
-    int-to-long v8, v8
-    cmp-long v6, v6, v8
-    if-nez v6, :cond_17a
-    move-object/from16 v0, p0
-    invoke-direct {v0, v4, v5}, LTestObject;->a(J)V
-    goto :goto_11b
-    :cond_178
-    const/4 v4, 0x0
-    goto :goto_147
-    :cond_17a
-    invoke-direct/range {p0 .. p0}, LTestObject;->a()V
-    goto :goto_11b
-    :cond_17e
-    move-object/from16 v0, p0
-    iget v4, v0, LTestObject;->i:I
-    sget v5, LTest;->R:I
-    if-eq v4, v5, :cond_1d2
-    sget v5, LTest;->Q:I
-    if-eq v4, v5, :cond_1d2
-    sget v5, LTest;->B:I
-    if-eq v4, v5, :cond_1d2
-    sget v5, LTest;->z:I
-    if-eq v4, v5, :cond_1d2
-    sget v5, LTest;->S:I
-    if-eq v4, v5, :cond_1d2
-    sget v5, LTest;->v:I
-    if-eq v4, v5, :cond_1d2
-    sget v5, LTest;->w:I
-    if-eq v4, v5, :cond_1d2
-    sget v5, LTest;->N:I
-    if-eq v4, v5, :cond_1d2
-    sget v5, LTest;->x:I
-    if-eq v4, v5, :cond_1d2
-    sget v5, LTest;->y:I
-    if-eq v4, v5, :cond_1d2
-    sget v5, LTest;->T:I
-    if-eq v4, v5, :cond_1d2
-    sget v5, LTest;->ab:I
-    if-eq v4, v5, :cond_1d2
-    sget v5, LTest;->ac:I
-    if-eq v4, v5, :cond_1d2
-    sget v5, LTest;->ag:I
-    if-eq v4, v5, :cond_1d2
-    sget v5, LTest;->ad:I
-    if-eq v4, v5, :cond_1d2
-    sget v5, LTest;->ae:I
-    if-eq v4, v5, :cond_1d2
-    sget v5, LTest;->af:I
-    if-eq v4, v5, :cond_1d2
-    sget v5, LTest;->P:I
-    if-eq v4, v5, :cond_1d2
-    sget v5, LTest;->M:I
-    if-eq v4, v5, :cond_1d2
-    sget v5, LTest;->aD:I
-    if-ne v4, v5, :cond_1e5
-    :cond_1d2
-    const/4 v4, 0x1
-    :goto_1d3
-    if-eqz v4, :cond_222
-    move-object/from16 v0, p0
-    iget v4, v0, LTestObject;->i:I
-    const/16 v5, 0x8
-    if-eq v4, v5, :cond_1e7
-    new-instance v4, LTest;
-    const-string v5, "a"
-    invoke-direct {v4, v5}, LTest;-><init>(Ljava/lang/String;)V
-    throw v4
-    :cond_1e5
-    const/4 v4, 0x0
-    goto :goto_1d3
-    :cond_1e7
-    move-object/from16 v0, p0
-    iget-wide v4, v0, LTestObject;->n:J
-    const-wide/32 v6, 0x7fffffff
-    cmp-long v4, v4, v6
-    if-lez v4, :cond_1fa
-    new-instance v4, LTest;
-    const-string v5, "a"
-    invoke-direct {v4, v5}, LTest;-><init>(Ljava/lang/String;)V
-    throw v4
-    :cond_1fa
-    new-instance v4, LTest;
-    move-object/from16 v0, p0
-    iget-wide v6, v0, LTestObject;->n:J
-    long-to-int v5, v6
-    invoke-direct {v4, v5}, LTest;-><init>(I)V
-    move-object/from16 v0, p0
-    iput-object v4, v0, LTestObject;->o:LTest;
-    move-object/from16 v0, p0
-    iget-object v4, v0, LTestObject;->o:LTest;
-    iget-object v4, v4, LTest;->a:[B
-    const/4 v5, 0x0
-    move-object/from16 v0, p0
-    iget-object v6, v0, LTestObject;->o:LTest;
-    iget-object v6, v6, LTest;->a:[B
-    const/4 v7, 0x0
-    const/16 v8, 0x8
-    invoke-static {v4, v5, v6, v7, v8}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
-    const/4 v4, 0x1
-    move-object/from16 v0, p0
-    iput v4, v0, LTestObject;->i:I
-    goto/16 :goto_11b
-    :cond_222
-    move-object/from16 v0, p0
-    iget-wide v4, v0, LTestObject;->n:J
-    const-wide/32 v6, 0x7fffffff
-    cmp-long v4, v4, v6
-    if-lez v4, :cond_235
-    new-instance v4, LTest;
-    const-string v5, "a"
-    invoke-direct {v4, v5}, LTest;-><init>(Ljava/lang/String;)V
-    throw v4
-    :cond_235
-    const/4 v4, 0x0
-    move-object/from16 v0, p0
-    iput-object v4, v0, LTestObject;->o:LTest;
-    const/4 v4, 0x1
-    move-object/from16 v0, p0
-    iput v4, v0, LTestObject;->i:I
-    goto/16 :goto_11b
-    :pswitch_241
-    move-object/from16 v0, p0
-    iget-wide v4, v0, LTestObject;->n:J
-    long-to-int v4, v4
-    move-object/from16 v0, p0
-    iget v5, v0, LTestObject;->i:I
-    sub-int/2addr v4, v5
-    move-object/from16 v0, p0
-    iget-object v5, v0, LTestObject;->o:LTest;
-    if-eqz v5, :cond_368
-    move-object/from16 v0, p0
-    iget-object v5, v0, LTestObject;->o:LTest;
-    iget-object v5, v5, LTest;->a:[B
-    const/16 v6, 0x8
-    move-object/from16 v0, p1
-    invoke-virtual {v0, v5, v6, v4}, LTest;->b([BII)V
-    new-instance v5, LTest;
-    move-object/from16 v0, p0
-    iget v4, v0, LTestObject;->i:I
-    move-object/from16 v0, p0
-    iget-object v6, v0, LTestObject;->o:LTest;
-    invoke-direct {v5, v4, v6}, LTest;-><init>(ILTest;)V
-    invoke-virtual/range {p1 .. p1}, LTest;->c()J
-    move-result-wide v10
-    move-object/from16 v0, p0
-    iget-object v4, v0, LTestObject;->k:Ljava/util/Stack;
-    invoke-virtual {v4}, Ljava/util/Stack;->isEmpty()Z
-    move-result v4
-    if-nez v4, :cond_291
-    move-object/from16 v0, p0
-    iget-object v4, v0, LTestObject;->k:Ljava/util/Stack;
-    invoke-virtual {v4}, Ljava/util/Stack;->peek()Ljava/lang/Object;
-    move-result-object v4
-    check-cast v4, LTest;
-    invoke-virtual {v4, v5}, LTest;->a(LTest;)V
-    :cond_286
-    :goto_286
-    invoke-virtual/range {p1 .. p1}, LTest;->c()J
-    move-result-wide v4
-    move-object/from16 v0, p0
-    invoke-direct {v0, v4, v5}, LTestObject;->a(J)V
-    goto/16 :goto_0
-    :cond_291
-    iget v4, v5, LTest;->aL:I
-    sget v6, LTest;->z:I
-    if-ne v4, v6, :cond_359
-    iget-object v0, v5, LTest;->aM:LTest;
-    move-object/from16 v16, v0
-    const/16 v4, 0x8
-    move-object/from16 v0, v16
-    invoke-virtual {v0, v4}, LTest;->c(I)V
-    invoke-virtual/range {v16 .. v16}, LTest;->j()I
-    move-result v4
-    invoke-static {v4}, LTest;->a(I)I
-    move-result v4
-    const/4 v5, 0x4
-    move-object/from16 v0, v16
-    invoke-virtual {v0, v5}, LTest;->d(I)V
-    invoke-virtual/range {v16 .. v16}, LTest;->h()J
-    move-result-wide v8
-    if-nez v4, :cond_304
-    invoke-virtual/range {v16 .. v16}, LTest;->h()J
-    move-result-wide v6
-    invoke-virtual/range {v16 .. v16}, LTest;->h()J
-    move-result-wide v4
-    add-long/2addr v4, v10
-    move-wide v10, v4
-    move-wide v4, v6
-    :goto_2c1
-    const/4 v6, 0x2
-    move-object/from16 v0, v16
-    invoke-virtual {v0, v6}, LTest;->d(I)V
-    invoke-virtual/range {v16 .. v16}, LTest;->e()I
-    move-result v17
-    move/from16 v0, v17
-    new-array v0, v0, [I
-    move-object/from16 v18, v0
-    move/from16 v0, v17
-    new-array v0, v0, [J
-    move-object/from16 v19, v0
-    move/from16 v0, v17
-    new-array v0, v0, [J
-    move-object/from16 v20, v0
-    move/from16 v0, v17
-    new-array v0, v0, [J
-    move-object/from16 v21, v0
-    const-wide/32 v6, 0xf4240
-    invoke-static/range {v4 .. v9}, LTest;->a(JJJ)J
-    move-result-wide v12
-    const/4 v6, 0x0
-    move-wide v14, v10
-    move v10, v6
-    move-wide v6, v4
-    move-wide v4, v12
-    :goto_2ef
-    move/from16 v0, v17
-    if-ge v10, v0, :cond_33e
-    invoke-virtual/range {v16 .. v16}, LTest;->j()I
-    move-result v11
-    const/high16 v12, -0x80000000
-    and-int/2addr v12, v11
-    if-eqz v12, :cond_310
-    new-instance v4, LTest;
-    const-string v5, "a"
-    invoke-direct {v4, v5}, LTest;-><init>(Ljava/lang/String;)V
-    throw v4
-    :cond_304
-    invoke-virtual/range {v16 .. v16}, LTest;->p()J
-    move-result-wide v6
-    invoke-virtual/range {v16 .. v16}, LTest;->p()J
-    move-result-wide v4
-    add-long/2addr v4, v10
-    move-wide v10, v4
-    move-wide v4, v6
-    goto :goto_2c1
-    :cond_310
-    invoke-virtual/range {v16 .. v16}, LTest;->h()J
-    move-result-wide v12
-    const v22, 0x7fffffff
-    and-int v11, v11, v22
-    aput v11, v18, v10
-    aput-wide v14, v19, v10
-    aput-wide v4, v21, v10
-    add-long v4, v6, v12
-    const-wide/32 v6, 0xf4240
-    invoke-static/range {v4 .. v9}, LTest;->a(JJJ)J
-    move-result-wide v12
-    aget-wide v6, v21, v10
-    sub-long v6, v12, v6
-    aput-wide v6, v20, v10
-    const/4 v6, 0x4
-    move-object/from16 v0, v16
-    invoke-virtual {v0, v6}, LTest;->d(I)V
-    aget v6, v18, v10
-    int-to-long v6, v6
-    add-long/2addr v14, v6
-    add-int/lit8 v6, v10, 0x1
-    move v10, v6
-    move-wide v6, v4
-    move-wide v4, v12
-    goto :goto_2ef
-    :cond_33e
-    new-instance v4, LTest;
-    move-object/from16 v0, v18
-    move-object/from16 v1, v19
-    move-object/from16 v2, v20
-    move-object/from16 v3, v21
-    invoke-direct {v4, v0, v1, v2, v3}, LTest;-><init>([I[J[J[J)V
-    move-object/from16 v0, p0
-    iget-object v5, v0, LTestObject;->o:LTest;
-    invoke-virtual {v5, v4}, LTest;->a(LTest;)V
-    const/4 v4, 0x1
-    move-object/from16 v0, p0
-    iput-boolean v4, v0, LTestObject;->w:Z
-    goto/16 :goto_286
-    :cond_359
-    iget v4, v5, LTest;->aL:I
-    sget v6, LTest;->aD:I
-    if-ne v4, v6, :cond_286
-    iget-object v4, v5, LTest;->aM:LTest;
-    move-object/from16 v0, p0
-    invoke-virtual {v0, v4}, LTestObject;->a(LTest;)V
-    goto/16 :goto_286
-    :cond_368
-    move-object/from16 v0, p1
-    invoke-virtual {v0, v4}, LTest;->b(I)V
-    goto/16 :goto_286
-    :pswitch_36f
-    const/4 v5, 0x0
-    const-wide v6, 0x7fffffffffffffffL
-    move-object/from16 v0, p0
-    iget-object v4, v0, LTestObject;->o:LTest;
-    invoke-virtual {v4}, LTest;->size()I
-    move-result v9
-    const/4 v4, 0x0
-    move v8, v4
-    :goto_37f
-    if-ge v8, v9, :cond_3b1
-    move-object/from16 v0, p0
-    iget-object v4, v0, LTestObject;->o:LTest;
-    invoke-virtual {v4, v8}, LTest;->valueAt(I)Ljava/lang/Object;
-    move-result-object v4
-    check-cast v4, LTest;
-    iget-object v4, v4, LTest;->a:LTest;
-    iget-boolean v10, v4, LTest;->m:Z
-    if-eqz v10, :cond_602
-    iget-wide v10, v4, LTest;->c:J
-    cmp-long v10, v10, v6
-    if-gez v10, :cond_602
-    iget-wide v6, v4, LTest;->c:J
-    move-object/from16 v0, p0
-    iget-object v4, v0, LTestObject;->o:LTest;
-    invoke-virtual {v4, v8}, LTest;->valueAt(I)Ljava/lang/Object;
-    move-result-object v4
-    check-cast v4, LTest;
-    move-wide/from16 v23, v6
-    move-object v6, v4
-    move-wide/from16 v4, v23
-    :goto_3a8
-    add-int/lit8 v7, v8, 0x1
-    move v8, v7
-    move-wide/from16 v23, v4
-    move-object v5, v6
-    move-wide/from16 v6, v23
-    goto :goto_37f
-    :cond_3b1
-    if-nez v5, :cond_3ba
-    const/4 v4, 0x3
-    move-object/from16 v0, p0
-    iput v4, v0, LTestObject;->i:I
-    goto/16 :goto_0
-    :cond_3ba
-    invoke-virtual/range {p1 .. p1}, LTest;->c()J
-    move-result-wide v8
-    sub-long/2addr v6, v8
-    long-to-int v4, v6
-    if-gez v4, :cond_3ca
-    new-instance v4, LTest;
-    const-string v5, "a"
-    invoke-direct {v4, v5}, LTest;-><init>(Ljava/lang/String;)V
-    throw v4
-    :cond_3ca
-    move-object/from16 v0, p1
-    invoke-virtual {v0, v4}, LTest;->b(I)V
-    iget-object v4, v5, LTest;->a:LTest;
-    iget-object v5, v4, LTest;->l:LTest;
-    iget-object v5, v5, LTest;->a:[B
-    const/4 v6, 0x0
-    iget v7, v4, LTest;->k:I
-    move-object/from16 v0, p1
-    invoke-virtual {v0, v5, v6, v7}, LTest;->b([BII)V
-    iget-object v5, v4, LTest;->l:LTest;
-    const/4 v6, 0x0
-    invoke-virtual {v5, v6}, LTest;->c(I)V
-    const/4 v5, 0x0
-    iput-boolean v5, v4, LTest;->m:Z
-    goto/16 :goto_0
-    :cond_3e8
-    move-object/from16 v0, p0
-    iput-object v5, v0, LTestObject;->o:LTest;
-    move-object/from16 v0, p0
-    iget-object v4, v0, LTestObject;->o:LTest;
-    if-nez v4, :cond_414
-    move-object/from16 v0, p0
-    iget-wide v4, v0, LTestObject;->q:J
-    invoke-virtual/range {p1 .. p1}, LTest;->c()J
-    move-result-wide v6
-    sub-long/2addr v4, v6
-    long-to-int v4, v4
-    if-gez v4, :cond_406
-    new-instance v4, LTest;
-    const-string v5, ""
-    invoke-direct {v4, v5}, LTest;-><init>(Ljava/lang/String;)V
-    throw v4
-    :cond_406
-    move-object/from16 v0, p1
-    invoke-virtual {v0, v4}, LTest;->b(I)V
-    invoke-direct/range {p0 .. p0}, LTestObject;->a()V
-    const/4 v4, 0x0
-    :goto_40f
-    if-eqz v4, :cond_0
-    const/4 v4, 0x0
-    goto/16 :goto_63
-    :cond_414
-    move-object/from16 v0, p0
-    iget-object v4, v0, LTestObject;->o:LTest;
-    iget-object v4, v4, LTest;->a:LTest;
-    iget-wide v4, v4, LTest;->b:J
-    invoke-virtual/range {p1 .. p1}, LTest;->c()J
-    move-result-wide v6
-    sub-long/2addr v4, v6
-    long-to-int v4, v4
-    if-gez v4, :cond_42c
-    new-instance v4, LTest;
-    const-string v5, ""
-    invoke-direct {v4, v5}, LTest;-><init>(Ljava/lang/String;)V
-    throw v4
-    :cond_42c
-    move-object/from16 v0, p1
-    invoke-virtual {v0, v4}, LTest;->b(I)V
-    :cond_431
-    move-object/from16 v0, p0
-    iget-object v4, v0, LTestObject;->o:LTest;
-    iget-object v4, v4, LTest;->a:LTest;
-    iget-object v4, v4, LTest;->e:[I
-    move-object/from16 v0, p0
-    iget-object v5, v0, LTestObject;->o:LTest;
-    iget v5, v5, LTest;->e:I
-    aget v4, v4, v5
-    move-object/from16 v0, p0
-    iput v4, v0, LTestObject;->i:I
-    move-object/from16 v0, p0
-    iget-object v4, v0, LTestObject;->o:LTest;
-    iget-object v4, v4, LTest;->a:LTest;
-    iget-boolean v4, v4, LTest;->i:Z
-    if-eqz v4, :cond_553
-    move-object/from16 v0, p0
-    iget-object v5, v0, LTestObject;->o:LTest;
-    iget-object v6, v5, LTest;->a:LTest;
-    iget-object v7, v6, LTest;->l:LTest;
-    iget-object v4, v6, LTest;->a:LTest;
-    iget v4, v4, LTest;->a:I
-    iget-object v8, v6, LTest;->n:LTest;
-    if-eqz v8, :cond_534
-    iget-object v4, v6, LTest;->n:LTest;
-    :goto_461
-    iget v8, v4, LTest;->a:I
-    iget-object v4, v6, LTest;->j:[Z
-    iget v6, v5, LTest;->e:I
-    aget-boolean v6, v4, v6
-    move-object/from16 v0, p0
-    iget-object v4, v0, LTestObject;->o:LTest;
-    iget-object v9, v4, LTest;->a:[B
-    const/4 v10, 0x0
-    if-eqz v6, :cond_53c
-    const/16 v4, 0x80
-    :goto_474
-    or-int/2addr v4, v8
-    int-to-byte v4, v4
-    aput-byte v4, v9, v10
-    move-object/from16 v0, p0
-    iget-object v4, v0, LTestObject;->o:LTest;
-    const/4 v9, 0x0
-    invoke-virtual {v4, v9}, LTest;->c(I)V
-    iget-object v4, v5, LTest;->b:LTest;
-    move-object/from16 v0, p0
-    iget-object v5, v0, LTestObject;->o:LTest;
-    const/4 v9, 0x1
-    invoke-virtual {v4, v5, v9}, LTest;->a(LTest;I)V
-    invoke-virtual {v4, v7, v8}, LTest;->a(LTest;I)V
-    if-nez v6, :cond_53f
-    add-int/lit8 v4, v8, 0x1
-    :goto_491
-    move-object/from16 v0, p0
-    iput v4, v0, LTestObject;->i:I
-    move-object/from16 v0, p0
-    iget v4, v0, LTestObject;->i:I
-    move-object/from16 v0, p0
-    iget v5, v0, LTestObject;->i:I
-    add-int/2addr v4, v5
-    move-object/from16 v0, p0
-    iput v4, v0, LTestObject;->i:I
-    :goto_4a2
-    const/4 v4, 0x4
-    move-object/from16 v0, p0
-    iput v4, v0, LTestObject;->i:I
-    const/4 v4, 0x0
-    move-object/from16 v0, p0
-    iput v4, v0, LTestObject;->i:I
-    :cond_4ac
-    move-object/from16 v0, p0
-    iget-object v4, v0, LTestObject;->o:LTest;
-    iget-object v12, v4, LTest;->a:LTest;
-    move-object/from16 v0, p0
-    iget-object v4, v0, LTestObject;->o:LTest;
-    iget-object v9, v4, LTest;->c:LTest;
-    move-object/from16 v0, p0
-    iget-object v4, v0, LTestObject;->o:LTest;
-    iget-object v5, v4, LTest;->b:LTest;
-    move-object/from16 v0, p0
-    iget-object v4, v0, LTestObject;->o:LTest;
-    iget v8, v4, LTest;->e:I
-    iget v4, v9, LTest;->n:I
-    const/4 v6, -0x1
-    if-eq v4, v6, :cond_57a
-    move-object/from16 v0, p0
-    iget-object v4, v0, LTestObject;->o:LTest;
-    iget-object v4, v4, LTest;->a:[B
-    const/4 v6, 0x0
-    const/4 v7, 0x0
-    aput-byte v7, v4, v6
-    const/4 v6, 0x1
-    const/4 v7, 0x0
-    aput-byte v7, v4, v6
-    const/4 v6, 0x2
-    const/4 v7, 0x0
-    aput-byte v7, v4, v6
-    iget v4, v9, LTest;->n:I
-    iget v6, v9, LTest;->n:I
-    rsub-int/lit8 v6, v6, 0x4
-    :goto_4e1
-    move-object/from16 v0, p0
-    iget v7, v0, LTestObject;->i:I
-    move-object/from16 v0, p0
-    iget v10, v0, LTestObject;->i:I
-    if-ge v7, v10, :cond_59e
-    move-object/from16 v0, p0
-    iget v7, v0, LTestObject;->i:I
-    if-nez v7, :cond_55a
-    move-object/from16 v0, p0
-    iget-object v7, v0, LTestObject;->o:LTest;
-    iget-object v7, v7, LTest;->a:[B
-    move-object/from16 v0, p1
-    invoke-virtual {v0, v7, v6, v4}, LTest;->b([BII)V
-    move-object/from16 v0, p0
-    iget-object v7, v0, LTestObject;->o:LTest;
-    const/4 v10, 0x0
-    invoke-virtual {v7, v10}, LTest;->c(I)V
-    move-object/from16 v0, p0
-    iget-object v7, v0, LTestObject;->o:LTest;
-    invoke-virtual {v7}, LTest;->n()I
-    move-result v7
-    move-object/from16 v0, p0
-    iput v7, v0, LTestObject;->i:I
-    move-object/from16 v0, p0
-    iget-object v7, v0, LTestObject;->o:LTest;
-    const/4 v10, 0x0
-    invoke-virtual {v7, v10}, LTest;->c(I)V
-    move-object/from16 v0, p0
-    iget-object v7, v0, LTestObject;->o:LTest;
-    const/4 v10, 0x4
-    invoke-virtual {v5, v7, v10}, LTest;->a(LTest;I)V
-    move-object/from16 v0, p0
-    iget v7, v0, LTestObject;->i:I
-    add-int/lit8 v7, v7, 0x4
-    move-object/from16 v0, p0
-    iput v7, v0, LTestObject;->i:I
-    move-object/from16 v0, p0
-    iget v7, v0, LTestObject;->i:I
-    add-int/2addr v7, v6
-    move-object/from16 v0, p0
-    iput v7, v0, LTestObject;->i:I
-    goto :goto_4e1
-    :cond_534
-    iget-object v8, v5, LTest;->c:LTest;
-    iget-object v8, v8, LTest;->k:[LTest;
-    aget-object v4, v8, v4
-    goto/16 :goto_461
-    :cond_53c
-    const/4 v4, 0x0
-    goto/16 :goto_474
-    :cond_53f
-    invoke-virtual {v7}, LTest;->e()I
-    move-result v5
-    const/4 v6, -0x2
-    invoke-virtual {v7, v6}, LTest;->d(I)V
-    mul-int/lit8 v5, v5, 0x6
-    add-int/lit8 v5, v5, 0x2
-    invoke-virtual {v4, v7, v5}, LTest;->a(LTest;I)V
-    add-int/lit8 v4, v8, 0x1
-    add-int/2addr v4, v5
-    goto/16 :goto_491
-    :cond_553
-    const/4 v4, 0x0
-    move-object/from16 v0, p0
-    iput v4, v0, LTestObject;->i:I
-    goto/16 :goto_4a2
-    :cond_55a
-    move-object/from16 v0, p0
-    iget v7, v0, LTestObject;->i:I
-    const/4 v10, 0x0
-    move-object/from16 v0, p1
-    invoke-virtual {v5, v0, v7, v10}, LTest;->a(LTest;IZ)I
-    move-result v7
-    move-object/from16 v0, p0
-    iget v10, v0, LTestObject;->i:I
-    add-int/2addr v10, v7
-    move-object/from16 v0, p0
-    iput v10, v0, LTestObject;->i:I
-    move-object/from16 v0, p0
-    iget v10, v0, LTestObject;->i:I
-    sub-int v7, v10, v7
-    move-object/from16 v0, p0
-    iput v7, v0, LTestObject;->i:I
-    goto/16 :goto_4e1
-    :cond_57a
-    :goto_57a
-    move-object/from16 v0, p0
-    iget v4, v0, LTestObject;->i:I
-    move-object/from16 v0, p0
-    iget v6, v0, LTestObject;->i:I
-    if-ge v4, v6, :cond_59e
-    move-object/from16 v0, p0
-    iget v4, v0, LTestObject;->i:I
-    move-object/from16 v0, p0
-    iget v6, v0, LTestObject;->i:I
-    sub-int/2addr v4, v6
-    const/4 v6, 0x0
-    move-object/from16 v0, p1
-    invoke-virtual {v5, v0, v4, v6}, LTest;->a(LTest;IZ)I
-    move-result v4
-    move-object/from16 v0, p0
-    iget v6, v0, LTestObject;->i:I
-    add-int/2addr v4, v6
-    move-object/from16 v0, p0
-    iput v4, v0, LTestObject;->i:I
-    goto :goto_57a
-    :cond_59e
-    iget-object v4, v12, LTest;->g:[J
-    aget-wide v6, v4, v8
-    iget-object v4, v12, LTest;->f:[I
-    aget v4, v4, v8
-    int-to-long v10, v4
-    add-long/2addr v6, v10
-    const-wide/16 v10, 0x3e8
-    mul-long/2addr v6, v10
-    iget-boolean v4, v12, LTest;->i:Z
-    if-eqz v4, :cond_5f3
-    const/4 v4, 0x2
-    :goto_5b0
-    iget-object v10, v12, LTest;->h:[Z
-    aget-boolean v8, v10, v8
-    if-eqz v8, :cond_5f5
-    const/4 v8, 0x1
-    :goto_5b7
-    or-int/2addr v8, v4
-    iget-object v4, v12, LTest;->a:LTest;
-    iget v4, v4, LTest;->a:I
-    const/4 v11, 0x0
-    iget-boolean v10, v12, LTest;->i:Z
-    if-eqz v10, :cond_5ca
-    iget-object v10, v12, LTest;->n:LTest;
-    if-eqz v10, :cond_5f7
-    iget-object v4, v12, LTest;->n:LTest;
-    iget-object v4, v4, LTest;->b:[B
-    :goto_5c9
-    move-object v11, v4
-    :cond_5ca
-    move-object/from16 v0, p0
-    iget v9, v0, LTestObject;->i:I
-    const/4 v10, 0x0
-    invoke-virtual/range {v5 .. v11}, LTest;->a(JIII[B)V
-    move-object/from16 v0, p0
-    iget-object v4, v0, LTestObject;->o:LTest;
-    iget v5, v4, LTest;->e:I
-    add-int/lit8 v5, v5, 0x1
-    iput v5, v4, LTest;->e:I
-    move-object/from16 v0, p0
-    iget-object v4, v0, LTestObject;->o:LTest;
-    iget v4, v4, LTest;->e:I
-    iget v5, v12, LTest;->d:I
-    if-ne v4, v5, :cond_5eb
-    const/4 v4, 0x0
-    move-object/from16 v0, p0
-    iput-object v4, v0, LTestObject;->o:LTest;
-    :cond_5eb
-    const/4 v4, 0x3
-    move-object/from16 v0, p0
-    iput v4, v0, LTestObject;->i:I
-    const/4 v4, 0x1
-    goto/16 :goto_40f
-    :cond_5f3
-    const/4 v4, 0x0
-    goto :goto_5b0
-    :cond_5f5
-    const/4 v8, 0x0
-    goto :goto_5b7
-    :cond_5f7
-    iget-object v9, v9, LTest;->k:[LTest;
-    aget-object v4, v9, v4
-    iget-object v4, v4, LTest;->b:[B
-    goto :goto_5c9
-    :cond_5fe
-    move-object v6, v5
-    move-wide v4, v8
-    goto/16 :goto_41
-    :cond_602
-    move-wide/from16 v23, v6
-    move-object v6, v5
-    move-wide/from16 v4, v23
-    goto/16 :goto_3a8
-    nop
-    :pswitch_data_60a
-    .packed-switch 0x0
-        :pswitch_47
-        :pswitch_241
-        :pswitch_36f
-    .end packed-switch
-.end method
-
-.method private final a(J)V
-    .registers 3
-    .prologue
-    return-void
-.end method
-
diff --git a/src/test/smali/type-confusion-regression4/Test.java b/src/test/smali/type-confusion-regression4/Test.java
deleted file mode 100644
index 252d6c8..0000000
--- a/src/test/smali/type-confusion-regression4/Test.java
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-public class Test {
-
-  public boolean b = false;
-  public Test a = null;
-
-  public Test() {
-  }
-
-  public Test(int i, Test a) {
-    throw new RuntimeException("Test(ILTest;)");
-  }
-
-  public int nextIndex() {
-    throw new RuntimeException("nextIndex()");
-  }
-
-  public int previousIndex() {
-    throw new RuntimeException("previousIndex()");
-  }
-
-  public boolean hasNext() {
-    throw new RuntimeException("hasNext()");
-  }
-
-  public boolean hasPrevious() {
-    throw new RuntimeException("hasPrevious()");
-  }
-
-  public static void main(String[] args) {
-    try {
-      new TestObject().a(new Test(), new Test());
-    } catch (Exception e) {
-      System.out.println(e);
-    }
-  }
-}
diff --git a/src/test/smali/type-confusion-regression4/TestObject.java b/src/test/smali/type-confusion-regression4/TestObject.java
deleted file mode 100644
index 340e820..0000000
--- a/src/test/smali/type-confusion-regression4/TestObject.java
+++ /dev/null
@@ -1,9 +0,0 @@
-// Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-public class TestObject {
-  public final Test a(Test t0, Test t1) {
-    return null;
-  }
-}
diff --git a/src/test/smali/type-confusion-regression4/TestObject.smali b/src/test/smali/type-confusion-regression4/TestObject.smali
deleted file mode 100644
index 7c84a9e..0000000
--- a/src/test/smali/type-confusion-regression4/TestObject.smali
+++ /dev/null
@@ -1,88 +0,0 @@
-# Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-.class public final LTestObject;
-.super Ljava/lang/Object;
-
-.method public constructor <init>()V
-    .registers 1
-    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
-    return-void
-.end method
-
-.method public final a(LTest;LTest;)LTest;
-    .registers 7
-    .prologue
-    const/4 v0, 0x0
-    if-eqz p1, :cond_23
-    iget-boolean v1, p1, LTest;->b:Z
-    if-eqz v1, :cond_35
-    iget-object v1, p0, LTest;->f:LTest;
-    iget-object v1, v1, LTest;->b:LTest;
-    invoke-virtual {v1}, LTest;->hasPrevious()Z
-    move-result v1
-    if-eqz v1, :cond_35
-    new-instance p2, LTest;
-    const/4 v1, 0x1
-    iget-object v2, p0, LTest;->f:LTest;
-    iget-object v3, v2, LTest;->b:LTest;
-    invoke-virtual {v3}, LTest;->hasPrevious()Z
-    move-result v3
-    if-nez v3, :cond_24
-    :goto_1e
-    iget-object v0, v0, LTest;->a:LTest;
-    invoke-direct {p2, v1, v0}, LTest;-><init>(ILTest;)V
-    :cond_23
-    :goto_23
-    return-object p2
-    :cond_24
-    iget-object v0, v2, LTest;->b:LTest;
-    iget-object v0, v0, LTest;->a:Ljava/util/ArrayList;
-    iget-object v2, v2, LTest;->b:LTest;
-    invoke-virtual {v2}, LTest;->previousIndex()I
-    move-result v2
-    invoke-interface {v0, v2}, Ljava/util/List;->get(I)Ljava/lang/Object;
-    move-result-object v0
-    check-cast v0, LTest;
-    goto :goto_1e
-    :cond_35
-    iget-boolean v1, p1, LTest;->b:Z
-    if-eqz v1, :cond_67
-    iget-object v1, p0, LTest;->f:LTest;
-    iget-object v1, v1, LTest;->b:LTest;
-    invoke-virtual {v1}, LTest;->hasNext()Z
-    move-result v1
-    if-eqz v1, :cond_67
-    new-instance p2, LTest;
-    const/4 v1, 0x2
-    iget-object v2, p0, LTest;->f:LTest;
-    iget-object v3, v2, LTest;->b:LTest;
-    invoke-virtual {v3}, LTest;->hasNext()Z
-    move-result v3
-    if-nez v3, :cond_56
-    :goto_50
-    iget-object v0, v0, LTest;->a:LTest;
-    invoke-direct {p2, v1, v0}, LTest;-><init>(ILTest;)V
-    goto :goto_23
-    :cond_56
-    iget-object v0, v2, LTest;->b:LTest;
-    iget-object v0, v0, LTest;->a:Ljava/util/ArrayList;
-    iget-object v2, v2, LTest;->b:LTest;
-    invoke-virtual {v2}, LTest;->nextIndex()I
-    move-result v2
-    invoke-interface {v0, v2}, Ljava/util/List;->get(I)Ljava/lang/Object;
-    move-result-object v0
-    check-cast v0, LTest;
-    goto :goto_50
-    :cond_67
-    iget-object v0, p1, LTest;->a:LTest;
-    if-eqz v0, :cond_23
-    new-instance p2, LTest;
-    const/4 v0, 0x0
-    new-instance v1, LTest;
-    iget-object v2, p1, LTest;->a:LTest;
-    invoke-direct {v1, v2}, LTest;-><init>(LTest;)V
-    invoke-direct {p2, v0, v1}, LTest;-><init>(ILTest;)V
-    goto :goto_23
-.end method
\ No newline at end of file
diff --git a/src/test/smali/type-confusion-regression5/Test.java b/src/test/smali/type-confusion-regression5/Test.java
deleted file mode 100644
index e450d6b..0000000
--- a/src/test/smali/type-confusion-regression5/Test.java
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-public class Test {
-
-  public int getId() {
-    throw new RuntimeException("getId()I");
-  }
-
-  public boolean a() {
-    throw new RuntimeException("a()Z");
-  }
-
-  public void a(Test t0) {
-    throw new RuntimeException("a(LTest;)V");
-  }
-
-  public void a(Test t0, Test t1) {
-    throw new RuntimeException("a(LTest;LTest;)V");
-  }
-
-  public static boolean b(Test t0, Test t1) {
-    throw new RuntimeException("b()Z");
-  }
-
-  public Test c() {
-    throw new RuntimeException("c()LTest;");
-  }
-
-  public static boolean c(Test t) {
-    throw new RuntimeException("c(LTest;)Z");
-  }
-
-  public void g() {
-    throw new RuntimeException("g()V");
-  }
-
-  public boolean pageScroll(int i) {
-    throw new RuntimeException("pageScroll(I)Z");
-  }
-
-  public static void main(String[] args) {
-    try {
-      new TestObject().onClick(new Test());
-    } catch (Exception e) {
-      System.out.println(e);
-    }
-  }
-}
diff --git a/src/test/smali/type-confusion-regression5/TestObject.java b/src/test/smali/type-confusion-regression5/TestObject.java
deleted file mode 100644
index a3cc1f9..0000000
--- a/src/test/smali/type-confusion-regression5/TestObject.java
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-public class TestObject {
-  public final void onClick(Test t) {
-  }
-}
diff --git a/src/test/smali/type-confusion-regression5/TestObject.smali b/src/test/smali/type-confusion-regression5/TestObject.smali
deleted file mode 100644
index 18a1fc1..0000000
--- a/src/test/smali/type-confusion-regression5/TestObject.smali
+++ /dev/null
@@ -1,177 +0,0 @@
-# Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-.class public final LTestObject;
-.super Ljava/lang/Object;
-
-.field private c:LTest;
-
-.method public constructor <init>()V
-    .registers 1
-    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
-    return-void
-.end method
-
-.method public onClick(LTest;)V
-    .registers 10
-    const/4             v2, 0x00  # 0
-    invoke-virtual      { v9 }, LTest;->getId()I
-    move-result         v0
-    const               v1, 0x7f0f01bf  # 2131689919
-    if-ne               v0, v1, :label_247
-    invoke-virtual      { v8 }, LTestObject;->getActivity()LTest;
-    move-result-object  v0
-    invoke-static       { v0, v9 }, LTest;->b(LTest;LTest;)Z
-    iget-object         v0, v8, LTestObject;->c:LTest;
-    invoke-virtual      { v0 }, LTest;->a()Z
-    move-result         v0
-    if-eqz              v0, :label_231
-    iget-object         v0, v8, LTestObject;->d:Landroid/widget/Button;
-    const/4             v1, 0x00  # 0
-    invoke-virtual      { v0, v1 }, Landroid/widget/Button;->setEnabled(Z)V
-    iget-object         v0, v8, LTestObject;->b:Landroid/widget/LinearLayout;
-    if-nez              v0, :label_72
-    const-string        v0, "a"
-    const/4             v1, 0x05  # 5
-    invoke-static       { v0, v1 }, Landroid/util/Log;->isLoggable(Ljava/lang/String;I)Z
-    move-result         v0
-    if-eqz              v0, :label_51
-    const-string        v0, "b"
-    const-string        v1, "c"
-    invoke-static       { v0, v1 }, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I
-  :label_51
-    invoke-static       { v2 }, LTest;->c(LTest;)Z
-    move-result         v0
-    if-eqz              v0, :label_66
-    iget-object         v0, v8, LTestObject;->a:LTest;
-    sget-object         v1, Ljok;->d:LTest;
-    sget-object         v3, Ljol;->c:LTest;
-    invoke-virtual      { v0, v1, v3 }, LTest;->a(LTest;LTest;)V
-  :label_66
-    iget-object         v0, v8, LTestObject;->g:LTest;
-    invoke-virtual      { v0, v2 }, LTest;->a(LTest;)V
-  :label_71
-    return-void
-  :label_72
-    new-instance        v5, Ljava/util/ArrayList;
-    invoke-direct       { v5 }, Ljava/util/ArrayList;-><init>()V
-    iget-object         v0, v8, LTestObject;->b:Landroid/widget/LinearLayout;
-    invoke-direct       { v8, v0 }, LTestObject;->a(Landroid/widget/LinearLayout;)Ljava/util/List;
-    move-result-object  v0
-    invoke-interface    { v0 }, Ljava/util/List;->iterator()Ljava/util/Iterator;
-    move-result-object  v6
-    move-object         v1, v2
-    move-object         v4, v2
-  :label_89
-    invoke-interface    { v6 }, Ljava/util/Iterator;->hasNext()Z
-    move-result         v0
-    if-eqz              v0, :label_151
-    invoke-interface    { v6 }, Ljava/util/Iterator;->next()Ljava/lang/Object;
-    move-result-object  v0
-    check-cast          v0, LTest;
-    invoke-virtual      { v0 }, LTest;->c()LTest;
-    move-result-object  v3
-    if-eqz              v3, :label_148
-    instance-of         v7, v0, LTest;
-    if-eqz              v7, :label_127
-    if-eqz              v1, :label_116
-    invoke-virtual      { v5, v1 }, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
-  :label_116
-    invoke-virtual      { v5, v3 }, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
-    if-eqz              v4, :label_124
-    invoke-virtual      { v5, v4 }, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
-  :label_124
-    move-object         v1, v2
-    move-object         v4, v2
-    goto                :label_89
-  :label_127
-    instance-of         v7, v0, LTest;
-    if-eqz              v7, :label_133
-    move-object         v1, v3
-    goto                :label_89
-  :label_133
-    instance-of         v0, v0, LTest;
-    if-eqz              v0, :label_139
-    move-object         v4, v3
-    goto                :label_89
-  :label_139
-    if-eqz              v4, :label_145
-    invoke-virtual      { v5, v4 }, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
-    move-object         v4, v2
-  :label_145
-    invoke-virtual      { v5, v3 }, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
-  :label_148
-    move-object         v3, v4
-    move-object         v4, v3
-    goto                :label_89
-  :label_151
-    if-eqz              v4, :label_156
-    invoke-virtual      { v5, v4 }, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
-  :label_156
-    new-instance        v1, LTest;
-    invoke-direct       { v1 }, LTest;-><init>()V
-    const-string        v0, "d"
-    iput-object         v0, v1, LTest;->b:Ljava/lang/String;
-    iget-object         v0, v1, LTest;->c:Ljava/util/Set;
-    const/4             v3, 0x06  # 6
-    invoke-static       { v3 }, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
-    move-result-object  v3
-    invoke-interface    { v0, v3 }, Ljava/util/Set;->add(Ljava/lang/Object;)Z
-    new-instance        v3, LTest;
-    invoke-direct       { v3 }, LTest;-><init>()V
-    iput-object         v5, v3, LTest;->a:Ljava/util/List;
-    iget-object         v0, v3, LTest;->b:Ljava/util/Set;
-    const/4             v4, 0x02  # 2
-    invoke-static       { v4 }, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
-    move-result-object  v4
-    invoke-interface    { v0, v4 }, Ljava/util/Set;->add(Ljava/lang/Object;)Z
-    new-instance        v0, LTest;
-    iget-object         v4, v3, LTest;->b:Ljava/util/Set;
-    iget-object         v3, v3, LTest;->a:Ljava/util/List;
-    invoke-direct       { v0, v4, v3 }, LTest;-><init>(Ljava/util/Set;Ljava/util/List;)V
-    check-cast          v0, LTest;
-    iput-object         v0, v1, LTest;->a:LTest;
-    iget-object         v0, v1, LTest;->c:Ljava/util/Set;
-    const/4             v3, 0x04  # 4
-    invoke-static       { v3 }, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
-    move-result-object  v3
-    invoke-interface    { v0, v3 }, Ljava/util/Set;->add(Ljava/lang/Object;)Z
-    new-instance        v0, LTest;
-    iget-object         v3, v1, LTest;->c:Ljava/util/Set;
-    iget-object         v4, v1, LTest;->a:LTest;
-    iget-object         v1, v1, LTest;->b:Ljava/lang/String;
-    invoke-direct       { v0, v3, v2, v4, v1 }, LTest;-><init>(Ljava/util/Set;LTest;LTest;Ljava/lang/String;)V
-    check-cast          v0, LTest;
-    move-object         v2, v0
-    goto/16             :label_51
-  :label_231
-    iget-object         v0, v8, LTestObject;->c:LTest;
-    const/16            v1, 0x0082  # 130
-    invoke-virtual      { v0, v1 }, LTest;->pageScroll(I)Z
-    iget-object         v0, v8, LTestObject;->a:LTest;
-    sget-object         v1, Ljok;->k:LTest;
-    invoke-virtual      { v0, v1 }, LTest;->a(LTest;)V
-    goto/16             :label_71
-  :label_247
-    const               v1, 0x7f0f0204  # 2131689988
-    if-ne               v0, v1, :label_71
-    iget-object         v0, v8, LTestObject;->a:LTest;
-    sget-object         v1, Ljok;->q:LTest;
-    invoke-virtual      { v0, v1 }, LTest;->a(LTest;)V
-    iget-object         v0, v8, LTestObject;->g:LTest;
-    invoke-virtual      { v0 }, LTest;->g()V
-    goto/16             :label_71
-.end method
-
-.method public getActivity()LTest;
-  .registers 1
-  const/4               v0, 0x00
-  return-object         v0
-.end method
-
-.method private a(Landroid/widget/LinearLayout;)Ljava/util/List;
-  .registers 2
-  const/4               v0, 0x00
-  return-object         v0
-.end method
diff --git a/src/test/smali/unreachable-code-1/UnreachableCode1.smali b/src/test/smali/unreachable-code-1/UnreachableCode1.smali
deleted file mode 100644
index a7ba2f1..0000000
--- a/src/test/smali/unreachable-code-1/UnreachableCode1.smali
+++ /dev/null
@@ -1,87 +0,0 @@
-# Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-.class public LTest;
-
-.super Ljava/lang/Object;
-
-.method public static test1()I
-  .registers 1
-  goto :return
-
-  :dummy
-  const/4 v0, 0x1
-
-  :return
-  const/4 v0, 0x7
-  return v0
-
-.end method
-
-.method public static test2()I
-  .registers 1
-  goto :return
-
-  :dummy1
-  const/4 v0, 0x1
-
-  :dummy2
-  const/4 v0, 0x2
-
-  :return
-  const/4 v0, 0x7
-  return v0
-
-.end method
-
-.method public static test3()I
-  .registers 1
-  goto :return
-
-  :dummy1
-  const/4 v0, 0x1
-  goto :dummy3
-
-  :dummy2
-  const/4 v0, 0x2
-  goto :return
-
-  :dummy3
-  const/4 v0, 0x3
-  goto :return
-
-  :dummy4
-  const/4 v0, 0x4
-
-  :return
-  const/4 v0, 0x7
-  return v0
-
-.end method
-
-.method public static main([Ljava/lang/String;)V
-    .locals 2
-
-    sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
-
-    invoke-static {}, LTest;->test1()I
-    move-result v1
-    invoke-static {v1}, Ljava/lang/Integer;->toString(I)Ljava/lang/String;
-    move-result-object v1
-    invoke-virtual {v0, v1}, Ljava/io/PrintStream;->print(Ljava/lang/Object;)V
-
-    invoke-static {}, LTest;->test2()I
-    move-result v1
-    invoke-static {v1}, Ljava/lang/Integer;->toString(I)Ljava/lang/String;
-    move-result-object v1
-    invoke-virtual {v0, v1}, Ljava/io/PrintStream;->print(Ljava/lang/Object;)V
-
-    invoke-static {}, LTest;->test3()I
-    move-result v1
-    invoke-static {v1}, Ljava/lang/Integer;->toString(I)Ljava/lang/String;
-    move-result-object v1
-    invoke-virtual {v0, v1}, Ljava/io/PrintStream;->print(Ljava/lang/Object;)V
-
-    return-void
-.end method
diff --git a/third_party/smali.tar.gz.sha1 b/third_party/smali.tar.gz.sha1
new file mode 100644
index 0000000..19edeb3
--- /dev/null
+++ b/third_party/smali.tar.gz.sha1
@@ -0,0 +1 @@
+dbe8218edb1e2555e728edaa52d845ca1e4ceb25
\ No newline at end of file
diff --git a/tools/chrome_data.py b/tools/chrome_data.py
index ebae542..55ac69a 100644
--- a/tools/chrome_data.py
+++ b/tools/chrome_data.py
@@ -256,7 +256,7 @@
         'inputs': [os.path.join(V200430_BASE, 'program.jar')],
         'pgconf': [os.path.join(V200430_BASE, 'proguard.config')],
         'libraries': [os.path.join(V200430_BASE, 'library.jar')],
-        'min-api': ANDROID_N_API
+        'min-api': ANDROID_N_API,
     },
   },
   '200520-monochrome_public_minimal_apks': {