diff --git a/.prebuilt_info/prebuilt_info_common_ddmlib_ddmlib-prebuilt_jar.asciipb b/.prebuilt_info/prebuilt_info_common_ddmlib_ddmlib-prebuilt_jar.asciipb
index b706f5d..3c73a0d 100644
--- a/.prebuilt_info/prebuilt_info_common_ddmlib_ddmlib-prebuilt_jar.asciipb
+++ b/.prebuilt_info/prebuilt_info_common_ddmlib_ddmlib-prebuilt_jar.asciipb
@@ -1,6 +1,6 @@
 drops {
   android_build_drop {
-    build_id: "8163285"
+    build_id: "8476652"
     target: "studio-linux"
     source_file: "artifacts/ddmlib.jar"
   }
diff --git a/METADATA b/METADATA
index c8b8c6e..b4a2696 100644
--- a/METADATA
+++ b/METADATA
@@ -1,8 +1,8 @@
 third_party {
-  # would be NOTICE save for:
-  #   common/jacoco/lib/NOTICE.txt
-  # and RECIPROCAL save for:
-  #   common/jython/LICENSE
-  #   gdbserver/NOTICE
+  license_note: "would be NOTICE save for:\n"
+  "   common/jacoco/lib/NOTICE.txt\n"
+  " and RECIPROCAL save for:\n"
+  "   common/jython/LICENSE\n"
+  "   gdbserver/NOTICE"
   license_type: RESTRICTED
 }
diff --git a/common/androidx-test/Android.bp b/common/androidx-test/Android.bp
index 0d8d768..28e8037 100644
--- a/common/androidx-test/Android.bp
+++ b/common/androidx-test/Android.bp
@@ -1,13 +1,45 @@
 // Automatically generated with:
-// pom2bp -rewrite 'androidx.test:=androidx.test.' -rewrite 'androidx.test.ext:=androidx.test.ext.' -rewrite 'androidx.test.espresso:espresso-=androidx.test.espresso.' -rewrite 'androidx.test.janktesthelper:janktesthelper=androidx.test.janktesthelper' -rewrite 'androidx.test.uiautomator:uiautomator=androidx.test.uiautomator' -rewrite 'androidx.test.services:storage=androidx.test.services.storage' -extra-libs androidx.test.rules=android.test.base -extra-libs androidx.test.uiautomator=android.test.base -rewrite 'com.google.truth:truth=truth-prebuilt' -rewrite 'net.sf.kxml:kxml2=kxml2-android' -rewrite 'androidx.lifecycle:lifecycle-common=androidx.lifecycle_lifecycle-common' -rewrite 'androidx.annotation:annotation=androidx.annotation_annotation' -rewrite 'org.hamcrest:hamcrest-integration=hamcrest' -rewrite 'javax.inject:javax.inject=jsr330' -rewrite 'com.google.android.material:material=com.google.android.material_material' -rewrite 'androidx.drawerlayout:drawerlayout=androidx.drawerlayout_drawerlayout' -rewrite 'androidx.viewpager:viewpager=androidx.viewpager_viewpager' -rewrite 'androidx.recyclerview:recyclerview=androidx.recyclerview_recyclerview' -rewrite 'androidx.core:core=androidx.core_core' -rewrite 'androidx.legacy:legacy-support-core-utils=androidx.legacy_legacy-support-core-utils' -sdk-version current -static-deps .
+// pom2bp -rewrite 'androidx.test:=androidx.test.' -rewrite 'androidx.test.annotation:annotation=androidx.test.annotation' -rewrite 'androidx.test.ext:=androidx.test.ext.' -rewrite 'androidx.test.espresso:espresso-=androidx.test.espresso.' -rewrite 'androidx.test.janktesthelper:janktesthelper=androidx.test.janktesthelper' -rewrite 'androidx.test.uiautomator:uiautomator=androidx.test.uiautomator' -rewrite 'androidx.test.services:storage=androidx.test.services.storage' -rewrite 'androidx.tracing:tracing=androidx.tracing_tracing' -rewrite 'androidx.concurrent:concurrent-futures=androidx.concurrent_concurrent-futures' -rewrite 'com.google.guava:listenablefuture=guava-listenablefuture-prebuilt-jar' -extra-libs androidx.test.rules=android.test.base -extra-libs androidx.test.uiautomator=android.test.base -rewrite 'com.google.truth:truth=truth-prebuilt' -rewrite 'net.sf.kxml:kxml2=kxml2-android' -rewrite 'androidx.lifecycle:lifecycle-common=androidx.lifecycle_lifecycle-common' -rewrite 'androidx.annotation:annotation=androidx.annotation_annotation' -rewrite 'org.hamcrest:hamcrest-integration=hamcrest' -rewrite 'javax.inject:javax.inject=jsr330' -rewrite 'com.google.android.material:material=com.google.android.material_material' -rewrite 'androidx.drawerlayout:drawerlayout=androidx.drawerlayout_drawerlayout' -rewrite 'androidx.viewpager:viewpager=androidx.viewpager_viewpager' -rewrite 'androidx.recyclerview:recyclerview=androidx.recyclerview_recyclerview' -rewrite 'androidx.core:core=androidx.core_core' -rewrite 'androidx.legacy:legacy-support-core-utils=androidx.legacy_legacy-support-core-utils' -sdk-version current -static-deps .
 
 package {
     default_applicable_licenses: ["Android-Apache-2.0"],
 }
 
 android_library_import {
+    name: "androidx.test.annotation-nodeps",
+    aars: ["androidx/test/annotation/1.0.0/annotation-1.0.0.aar"],
+    sdk_version: "current",
+    apex_available: [
+        "//apex_available:platform",
+        "//apex_available:anyapex",
+    ],
+    min_sdk_version: "14",
+    static_libs: [
+        "androidx.annotation_annotation",
+        "androidx.annotation_annotation-experimental",
+    ],
+}
+
+android_library {
+    name: "androidx.test.annotation",
+    sdk_version: "current",
+    apex_available: [
+        "//apex_available:platform",
+        "//apex_available:anyapex",
+    ],
+    min_sdk_version: "14",
+    manifest: "manifests/androidx.test.annotation/AndroidManifest.xml",
+    static_libs: [
+        "androidx.test.annotation-nodeps",
+        "androidx.annotation_annotation",
+        "androidx.annotation_annotation-experimental",
+    ],
+    java_version: "1.7",
+}
+
+android_library_import {
     name: "androidx.test.core-nodeps",
-    aars: ["androidx/test/core/1.4.0/core-1.4.0.aar"],
+    aars: ["androidx/test/core/1.4.1-alpha04/core-1.4.1-alpha04.aar"],
     sdk_version: "current",
     apex_available: [
         "//apex_available:platform",
@@ -17,7 +49,12 @@
     static_libs: [
         "androidx.annotation_annotation",
         "androidx.lifecycle_lifecycle-common",
+        "androidx.tracing_tracing",
+        "guava-listenablefuture-prebuilt-jar",
+        "kotlin-stdlib",
+        "androidx.concurrent_concurrent-futures",
         "androidx.test.monitor",
+        "androidx.test.services.storage",
     ],
 }
 
@@ -34,14 +71,19 @@
         "androidx.test.core-nodeps",
         "androidx.annotation_annotation",
         "androidx.lifecycle_lifecycle-common",
+        "androidx.tracing_tracing",
+        "guava-listenablefuture-prebuilt-jar",
+        "kotlin-stdlib",
+        "androidx.concurrent_concurrent-futures",
         "androidx.test.monitor",
+        "androidx.test.services.storage",
     ],
     java_version: "1.7",
 }
 
 android_library_import {
     name: "androidx.test.espresso.contrib-nodeps",
-    aars: ["androidx/test/espresso/espresso-contrib/3.4.0/espresso-contrib-3.4.0.aar"],
+    aars: ["androidx/test/espresso/espresso-contrib/3.5.0-alpha04/espresso-contrib-3.5.0-alpha04.aar"],
     sdk_version: "current",
     apex_available: [
         "//apex_available:platform",
@@ -51,9 +93,9 @@
     static_libs: [
         "com.google.android.material_material",
         "androidx.recyclerview_recyclerview",
-        "androidx.core_core",
         "androidx.drawerlayout_drawerlayout",
         "androidx.viewpager_viewpager",
+        "androidx.core_core",
         "androidx.legacy_legacy-support-core-utils",
         "accessibility-test-framework",
         "androidx.test.espresso.core",
@@ -74,9 +116,9 @@
         "androidx.test.espresso.contrib-nodeps",
         "com.google.android.material_material",
         "androidx.recyclerview_recyclerview",
-        "androidx.core_core",
         "androidx.drawerlayout_drawerlayout",
         "androidx.viewpager_viewpager",
+        "androidx.core_core",
         "androidx.legacy_legacy-support-core-utils",
         "accessibility-test-framework",
         "androidx.test.espresso.core",
@@ -87,7 +129,7 @@
 
 android_library_import {
     name: "androidx.test.espresso.core-nodeps",
-    aars: ["androidx/test/espresso/espresso-core/3.4.0/espresso-core-3.4.0.aar"],
+    aars: ["androidx/test/espresso/espresso-core/3.5.0-alpha04/espresso-core-3.5.0-alpha04.aar"],
     sdk_version: "current",
     apex_available: [
         "//apex_available:platform",
@@ -95,13 +137,17 @@
     ],
     min_sdk_version: "14",
     static_libs: [
+        "androidx.annotation_annotation",
         "javawriter",
         "jsr330",
         "hamcrest-library",
         "hamcrest",
         "jsr305",
+        "kotlin-stdlib",
+        "androidx.test.core",
         "androidx.test.runner",
         "androidx.test.espresso.idling-resource",
+        "androidx.test.annotation",
     ],
 }
 
@@ -116,20 +162,24 @@
     manifest: "manifests/androidx.test.espresso.core/AndroidManifest.xml",
     static_libs: [
         "androidx.test.espresso.core-nodeps",
+        "androidx.annotation_annotation",
         "javawriter",
         "jsr330",
         "hamcrest-library",
         "hamcrest",
         "jsr305",
+        "kotlin-stdlib",
+        "androidx.test.core",
         "androidx.test.runner",
         "androidx.test.espresso.idling-resource",
+        "androidx.test.annotation",
     ],
     java_version: "1.7",
 }
 
 android_library_import {
     name: "androidx.test.espresso.idling-resource-nodeps",
-    aars: ["androidx/test/espresso/espresso-idling-resource/3.4.0/espresso-idling-resource-3.4.0.aar"],
+    aars: ["androidx/test/espresso/espresso-idling-resource/3.5.0-alpha04/espresso-idling-resource-3.5.0-alpha04.aar"],
     sdk_version: "current",
     apex_available: [
         "//apex_available:platform",
@@ -157,7 +207,7 @@
 
 android_library_import {
     name: "androidx.test.espresso.intents-nodeps",
-    aars: ["androidx/test/espresso/espresso-intents/3.4.0/espresso-intents-3.4.0.aar"],
+    aars: ["androidx/test/espresso/espresso-intents/3.5.0-alpha04/espresso-intents-3.5.0-alpha04.aar"],
     sdk_version: "current",
     apex_available: [
         "//apex_available:platform",
@@ -168,6 +218,7 @@
         "androidx.test.espresso.core",
         "androidx.test.core",
         "androidx.test.rules",
+        "androidx.test.annotation",
     ],
 }
 
@@ -185,13 +236,14 @@
         "androidx.test.espresso.core",
         "androidx.test.core",
         "androidx.test.rules",
+        "androidx.test.annotation",
     ],
     java_version: "1.7",
 }
 
 android_library_import {
     name: "androidx.test.espresso.web-nodeps",
-    aars: ["androidx/test/espresso/espresso-web/3.4.0/espresso-web-3.4.0.aar"],
+    aars: ["androidx/test/espresso/espresso-web/3.5.0-alpha04/espresso-web-3.5.0-alpha04.aar"],
     sdk_version: "current",
     apex_available: [
         "//apex_available:platform",
@@ -225,7 +277,7 @@
 
 android_library_import {
     name: "androidx.test.ext.junit-nodeps",
-    aars: ["androidx/test/ext/junit/1.1.3/junit-1.1.3.aar"],
+    aars: ["androidx/test/ext/junit/1.1.4-alpha04/junit-1.1.4-alpha04.aar"],
     sdk_version: "current",
     apex_available: [
         "//apex_available:platform",
@@ -261,7 +313,7 @@
 
 android_library_import {
     name: "androidx.test.ext.truth-nodeps",
-    aars: ["androidx/test/ext/truth/1.4.0/truth-1.4.0.aar"],
+    aars: ["androidx/test/ext/truth/1.5.0-alpha04/truth-1.5.0-alpha04.aar"],
     sdk_version: "current",
     apex_available: [
         "//apex_available:platform",
@@ -329,7 +381,7 @@
 
 android_library_import {
     name: "androidx.test.monitor-nodeps",
-    aars: ["androidx/test/monitor/1.4.0/monitor-1.4.0.aar"],
+    aars: ["androidx/test/monitor/1.6.0-alpha01/monitor-1.6.0-alpha01.aar"],
     sdk_version: "current",
     apex_available: [
         "//apex_available:platform",
@@ -338,6 +390,8 @@
     min_sdk_version: "14",
     static_libs: [
         "androidx.annotation_annotation",
+        "androidx.tracing_tracing",
+        "androidx.test.annotation",
     ],
 }
 
@@ -353,13 +407,15 @@
     static_libs: [
         "androidx.test.monitor-nodeps",
         "androidx.annotation_annotation",
+        "androidx.tracing_tracing",
+        "androidx.test.annotation",
     ],
     java_version: "1.7",
 }
 
 android_library_import {
     name: "androidx.test.rules-nodeps",
-    aars: ["androidx/test/rules/1.4.0/rules-1.4.0.aar"],
+    aars: ["androidx/test/rules/1.4.1-alpha01/rules-1.4.1-alpha01.aar"],
     sdk_version: "current",
     apex_available: [
         "//apex_available:platform",
@@ -395,7 +451,7 @@
 
 android_library_import {
     name: "androidx.test.runner-nodeps",
-    aars: ["androidx/test/runner/1.4.0/runner-1.4.0.aar"],
+    aars: ["androidx/test/runner/1.5.0-alpha01/runner-1.5.0-alpha01.aar"],
     sdk_version: "current",
     apex_available: [
         "//apex_available:platform",
@@ -404,7 +460,9 @@
     min_sdk_version: "14",
     static_libs: [
         "androidx.annotation_annotation",
+        "androidx.tracing_tracing",
         "junit",
+        "androidx.test.annotation",
         "androidx.test.monitor",
         "androidx.test.services.storage",
     ],
@@ -422,7 +480,9 @@
     static_libs: [
         "androidx.test.runner-nodeps",
         "androidx.annotation_annotation",
+        "androidx.tracing_tracing",
         "junit",
+        "androidx.test.annotation",
         "androidx.test.monitor",
         "androidx.test.services.storage",
     ],
@@ -431,7 +491,7 @@
 
 android_library_import {
     name: "androidx.test.services.storage-nodeps",
-    aars: ["androidx/test/services/storage/1.4.0/storage-1.4.0.aar"],
+    aars: ["androidx/test/services/storage/1.4.2-alpha01/storage-1.4.2-alpha01.aar"],
     sdk_version: "current",
     apex_available: [
         "//apex_available:platform",
@@ -439,8 +499,10 @@
     ],
     min_sdk_version: "14",
     static_libs: [
+        "androidx.annotation_annotation",
         "jsr305",
         "androidx.test.monitor",
+        "androidx.test.annotation",
     ],
 }
 
@@ -455,8 +517,10 @@
     manifest: "manifests/androidx.test.services.storage/AndroidManifest.xml",
     static_libs: [
         "androidx.test.services.storage-nodeps",
+        "androidx.annotation_annotation",
         "jsr305",
         "androidx.test.monitor",
+        "androidx.test.annotation",
     ],
     java_version: "1.7",
 }
diff --git a/common/androidx-test/androidx/test/annotation/1.0.0/annotation-1.0.0-sources.jar b/common/androidx-test/androidx/test/annotation/1.0.0/annotation-1.0.0-sources.jar
new file mode 100644
index 0000000..32dbe2a
--- /dev/null
+++ b/common/androidx-test/androidx/test/annotation/1.0.0/annotation-1.0.0-sources.jar
Binary files differ
diff --git a/common/androidx-test/androidx/test/annotation/1.0.0/annotation-1.0.0.aar b/common/androidx-test/androidx/test/annotation/1.0.0/annotation-1.0.0.aar
new file mode 100644
index 0000000..8a9a058
--- /dev/null
+++ b/common/androidx-test/androidx/test/annotation/1.0.0/annotation-1.0.0.aar
Binary files differ
diff --git a/common/androidx-test/androidx/test/monitor/1.4.0/monitor-1.4.0.pom b/common/androidx-test/androidx/test/annotation/1.0.0/annotation-1.0.0.pom
similarity index 78%
rename from common/androidx-test/androidx/test/monitor/1.4.0/monitor-1.4.0.pom
rename to common/androidx-test/androidx/test/annotation/1.0.0/annotation-1.0.0.pom
index 1486d08..49bbc9c 100644
--- a/common/androidx-test/androidx/test/monitor/1.4.0/monitor-1.4.0.pom
+++ b/common/androidx-test/androidx/test/annotation/1.0.0/annotation-1.0.0.pom
@@ -4,8 +4,8 @@
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <modelVersion>4.0.0</modelVersion>
   <groupId>androidx.test</groupId>
-  <artifactId>monitor</artifactId>
-  <version>1.4.0</version>
+  <artifactId>annotation</artifactId>
+  <version>1.0.0</version>
   <packaging>aar</packaging>
   <name>AndroidX Test Library</name>
   <description>The AndroidX Test Library provides an extensive framework for testing Android apps</description>
@@ -27,7 +27,13 @@
     <dependency>
       <groupId>androidx.annotation</groupId>
       <artifactId>annotation</artifactId>
-      <version>1.0.0</version>
+      <version>1.2.0</version>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>androidx.annotation</groupId>
+      <artifactId>annotation-experimental</artifactId>
+      <version>1.1.0</version>
       <scope>compile</scope>
     </dependency>
   </dependencies>
diff --git a/common/androidx-test/androidx/test/core/1.4.0/core-1.4.0-sources.jar b/common/androidx-test/androidx/test/core/1.4.0/core-1.4.0-sources.jar
deleted file mode 100644
index 2b2f08a..0000000
--- a/common/androidx-test/androidx/test/core/1.4.0/core-1.4.0-sources.jar
+++ /dev/null
Binary files differ
diff --git a/common/androidx-test/androidx/test/core/1.4.0/core-1.4.0.aar b/common/androidx-test/androidx/test/core/1.4.0/core-1.4.0.aar
deleted file mode 100644
index a761820..0000000
--- a/common/androidx-test/androidx/test/core/1.4.0/core-1.4.0.aar
+++ /dev/null
Binary files differ
diff --git a/common/androidx-test/androidx/test/core/1.4.1-alpha04/core-1.4.1-alpha04-sources.jar b/common/androidx-test/androidx/test/core/1.4.1-alpha04/core-1.4.1-alpha04-sources.jar
new file mode 100644
index 0000000..10f296e
--- /dev/null
+++ b/common/androidx-test/androidx/test/core/1.4.1-alpha04/core-1.4.1-alpha04-sources.jar
Binary files differ
diff --git a/common/androidx-test/androidx/test/core/1.4.1-alpha04/core-1.4.1-alpha04.aar b/common/androidx-test/androidx/test/core/1.4.1-alpha04/core-1.4.1-alpha04.aar
new file mode 100644
index 0000000..e6b82f9
--- /dev/null
+++ b/common/androidx-test/androidx/test/core/1.4.1-alpha04/core-1.4.1-alpha04.aar
Binary files differ
diff --git a/common/androidx-test/androidx/test/core/1.4.1-alpha04/core-1.4.1-alpha04.pom b/common/androidx-test/androidx/test/core/1.4.1-alpha04/core-1.4.1-alpha04.pom
new file mode 100644
index 0000000..d094c39
--- /dev/null
+++ b/common/androidx-test/androidx/test/core/1.4.1-alpha04/core-1.4.1-alpha04.pom
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+    xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>androidx.test</groupId>
+  <artifactId>core</artifactId>
+  <version>1.4.1-alpha04</version>
+  <packaging>aar</packaging>
+  <name>AndroidX Test Library</name>
+  <description>The AndroidX Test Library provides an extensive framework for testing Android apps</description>
+  <url>https://developer.android.com/testing</url>
+  <inceptionYear>2015</inceptionYear>
+  <licenses>
+    <license>
+      <name>The Apache Software License, Version 2.0</name>
+      <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
+      <distribution>repo</distribution>
+    </license>
+  </licenses>
+  <developers>
+    <developer>
+      <name>The Android Open Source Project</name>
+    </developer>
+  </developers>
+  <dependencies>
+    <dependency>
+      <groupId>androidx.annotation</groupId>
+      <artifactId>annotation</artifactId>
+      <version>1.2.0</version>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>androidx.test</groupId>
+      <artifactId>monitor</artifactId>
+      <version>1.6.0-alpha01</version>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>androidx.test.services</groupId>
+      <artifactId>storage</artifactId>
+      <version>1.4.2-alpha01</version>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>androidx.lifecycle</groupId>
+      <artifactId>lifecycle-common</artifactId>
+      <version>2.3.1</version>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>androidx.tracing</groupId>
+      <artifactId>tracing</artifactId>
+      <version>1.0.0</version>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>com.google.guava</groupId>
+      <artifactId>listenablefuture</artifactId>
+      <version>1.0</version>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.jetbrains.kotlin</groupId>
+      <artifactId>kotlin-stdlib</artifactId>
+      <version>1.6.10</version>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>androidx.concurrent</groupId>
+      <artifactId>concurrent-futures</artifactId>
+      <version>1.1.0</version>
+      <scope>compile</scope>
+    </dependency>
+  </dependencies>
+</project>
diff --git a/common/androidx-test/androidx/test/espresso/espresso-contrib/3.4.0/espresso-contrib-3.4.0-sources.jar b/common/androidx-test/androidx/test/espresso/espresso-contrib/3.4.0/espresso-contrib-3.4.0-sources.jar
deleted file mode 100644
index 8543f49..0000000
--- a/common/androidx-test/androidx/test/espresso/espresso-contrib/3.4.0/espresso-contrib-3.4.0-sources.jar
+++ /dev/null
Binary files differ
diff --git a/common/androidx-test/androidx/test/espresso/espresso-contrib/3.4.0/espresso-contrib-3.4.0.aar b/common/androidx-test/androidx/test/espresso/espresso-contrib/3.4.0/espresso-contrib-3.4.0.aar
deleted file mode 100644
index 563d9a1..0000000
--- a/common/androidx-test/androidx/test/espresso/espresso-contrib/3.4.0/espresso-contrib-3.4.0.aar
+++ /dev/null
Binary files differ
diff --git a/common/androidx-test/androidx/test/espresso/espresso-contrib/3.5.0-alpha04/espresso-contrib-3.5.0-alpha04-sources.jar b/common/androidx-test/androidx/test/espresso/espresso-contrib/3.5.0-alpha04/espresso-contrib-3.5.0-alpha04-sources.jar
new file mode 100644
index 0000000..8a852cb
--- /dev/null
+++ b/common/androidx-test/androidx/test/espresso/espresso-contrib/3.5.0-alpha04/espresso-contrib-3.5.0-alpha04-sources.jar
Binary files differ
diff --git a/common/androidx-test/androidx/test/espresso/espresso-contrib/3.5.0-alpha04/espresso-contrib-3.5.0-alpha04.aar b/common/androidx-test/androidx/test/espresso/espresso-contrib/3.5.0-alpha04/espresso-contrib-3.5.0-alpha04.aar
new file mode 100644
index 0000000..8dddfcd
--- /dev/null
+++ b/common/androidx-test/androidx/test/espresso/espresso-contrib/3.5.0-alpha04/espresso-contrib-3.5.0-alpha04.aar
Binary files differ
diff --git a/common/androidx-test/androidx/test/espresso/espresso-contrib/3.4.0/espresso-contrib-3.4.0.pom b/common/androidx-test/androidx/test/espresso/espresso-contrib/3.5.0-alpha04/espresso-contrib-3.5.0-alpha04.pom
similarity index 89%
rename from common/androidx-test/androidx/test/espresso/espresso-contrib/3.4.0/espresso-contrib-3.4.0.pom
rename to common/androidx-test/androidx/test/espresso/espresso-contrib/3.5.0-alpha04/espresso-contrib-3.5.0-alpha04.pom
index 3e5ea65..b10ab9b 100644
--- a/common/androidx-test/androidx/test/espresso/espresso-contrib/3.4.0/espresso-contrib-3.4.0.pom
+++ b/common/androidx-test/androidx/test/espresso/espresso-contrib/3.5.0-alpha04/espresso-contrib-3.5.0-alpha04.pom
@@ -5,7 +5,7 @@
   <modelVersion>4.0.0</modelVersion>
   <groupId>androidx.test.espresso</groupId>
   <artifactId>espresso-contrib</artifactId>
-  <version>3.4.0</version>
+  <version>3.5.0-alpha04</version>
   <packaging>aar</packaging>
   <name>AndroidX Test Library</name>
   <description>The AndroidX Test Library provides an extensive framework for testing Android apps</description>
@@ -27,37 +27,31 @@
     <dependency>
       <groupId>androidx.test.espresso</groupId>
       <artifactId>espresso-core</artifactId>
-      <version>3.4.0</version>
+      <version>3.5.0-alpha04</version>
       <scope>compile</scope>
     </dependency>
     <dependency>
       <groupId>androidx.test.espresso</groupId>
       <artifactId>espresso-idling-resource</artifactId>
-      <version>3.4.0</version>
+      <version>3.5.0-alpha04</version>
       <scope>compile</scope>
     </dependency>
     <dependency>
       <groupId>com.google.android.material</groupId>
       <artifactId>material</artifactId>
-      <version>1.0.0</version>
+      <version>1.4.0</version>
       <scope>compile</scope>
     </dependency>
     <dependency>
       <groupId>androidx.recyclerview</groupId>
       <artifactId>recyclerview</artifactId>
-      <version>1.0.0</version>
-      <scope>compile</scope>
-    </dependency>
-    <dependency>
-      <groupId>androidx.core</groupId>
-      <artifactId>core</artifactId>
-      <version>1.0.0</version>
+      <version>1.2.1</version>
       <scope>compile</scope>
     </dependency>
     <dependency>
       <groupId>androidx.drawerlayout</groupId>
       <artifactId>drawerlayout</artifactId>
-      <version>1.0.0</version>
+      <version>1.1.1</version>
       <scope>compile</scope>
     </dependency>
     <dependency>
@@ -67,6 +61,12 @@
       <scope>compile</scope>
     </dependency>
     <dependency>
+      <groupId>androidx.core</groupId>
+      <artifactId>core</artifactId>
+      <version>1.6.0</version>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
       <groupId>androidx.legacy</groupId>
       <artifactId>legacy-support-core-utils</artifactId>
       <version>1.0.0</version>
@@ -75,7 +75,7 @@
     <dependency>
       <groupId>com.google.android.apps.common.testing.accessibility.framework</groupId>
       <artifactId>accessibility-test-framework</artifactId>
-      <version>3.1</version>
+      <version>3.1.2</version>
       <scope>compile</scope>
     </dependency>
   </dependencies>
diff --git a/common/androidx-test/androidx/test/espresso/espresso-core/3.4.0/espresso-core-3.4.0-sources.jar b/common/androidx-test/androidx/test/espresso/espresso-core/3.4.0/espresso-core-3.4.0-sources.jar
deleted file mode 100644
index b2ff8c3..0000000
--- a/common/androidx-test/androidx/test/espresso/espresso-core/3.4.0/espresso-core-3.4.0-sources.jar
+++ /dev/null
Binary files differ
diff --git a/common/androidx-test/androidx/test/espresso/espresso-core/3.4.0/espresso-core-3.4.0.aar b/common/androidx-test/androidx/test/espresso/espresso-core/3.4.0/espresso-core-3.4.0.aar
deleted file mode 100644
index e120334..0000000
--- a/common/androidx-test/androidx/test/espresso/espresso-core/3.4.0/espresso-core-3.4.0.aar
+++ /dev/null
Binary files differ
diff --git a/common/androidx-test/androidx/test/espresso/espresso-core/3.5.0-alpha04/espresso-core-3.5.0-alpha04-sources.jar b/common/androidx-test/androidx/test/espresso/espresso-core/3.5.0-alpha04/espresso-core-3.5.0-alpha04-sources.jar
new file mode 100644
index 0000000..2589a6b
--- /dev/null
+++ b/common/androidx-test/androidx/test/espresso/espresso-core/3.5.0-alpha04/espresso-core-3.5.0-alpha04-sources.jar
Binary files differ
diff --git a/common/androidx-test/androidx/test/espresso/espresso-core/3.5.0-alpha04/espresso-core-3.5.0-alpha04.aar b/common/androidx-test/androidx/test/espresso/espresso-core/3.5.0-alpha04/espresso-core-3.5.0-alpha04.aar
new file mode 100644
index 0000000..d3e6772
--- /dev/null
+++ b/common/androidx-test/androidx/test/espresso/espresso-core/3.5.0-alpha04/espresso-core-3.5.0-alpha04.aar
Binary files differ
diff --git a/common/androidx-test/androidx/test/espresso/espresso-core/3.4.0/espresso-core-3.4.0.pom b/common/androidx-test/androidx/test/espresso/espresso-core/3.5.0-alpha04/espresso-core-3.5.0-alpha04.pom
similarity index 72%
rename from common/androidx-test/androidx/test/espresso/espresso-core/3.4.0/espresso-core-3.4.0.pom
rename to common/androidx-test/androidx/test/espresso/espresso-core/3.5.0-alpha04/espresso-core-3.5.0-alpha04.pom
index 7c95828..2760410 100644
--- a/common/androidx-test/androidx/test/espresso/espresso-core/3.4.0/espresso-core-3.4.0.pom
+++ b/common/androidx-test/androidx/test/espresso/espresso-core/3.5.0-alpha04/espresso-core-3.5.0-alpha04.pom
@@ -5,7 +5,7 @@
   <modelVersion>4.0.0</modelVersion>
   <groupId>androidx.test.espresso</groupId>
   <artifactId>espresso-core</artifactId>
-  <version>3.4.0</version>
+  <version>3.5.0-alpha04</version>
   <packaging>aar</packaging>
   <name>AndroidX Test Library</name>
   <description>The AndroidX Test Library provides an extensive framework for testing Android apps</description>
@@ -25,15 +25,27 @@
   </developers>
   <dependencies>
     <dependency>
+      <groupId>androidx.annotation</groupId>
+      <artifactId>annotation</artifactId>
+      <version>1.2.0</version>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>androidx.test</groupId>
+      <artifactId>core</artifactId>
+      <version>1.4.1-alpha04</version>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
       <groupId>androidx.test</groupId>
       <artifactId>runner</artifactId>
-      <version>1.4.0</version>
+      <version>1.5.0-alpha01</version>
       <scope>compile</scope>
     </dependency>
     <dependency>
       <groupId>androidx.test.espresso</groupId>
       <artifactId>espresso-idling-resource</artifactId>
-      <version>3.4.0</version>
+      <version>3.5.0-alpha04</version>
       <scope>compile</scope>
     </dependency>
     <dependency>
@@ -66,5 +78,17 @@
       <version>2.0.1</version>
       <scope>compile</scope>
     </dependency>
+    <dependency>
+      <groupId>org.jetbrains.kotlin</groupId>
+      <artifactId>kotlin-stdlib</artifactId>
+      <version>1.6.10</version>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>androidx.test</groupId>
+      <artifactId>annotation</artifactId>
+      <version>1.0.0</version>
+      <scope>compile</scope>
+    </dependency>
   </dependencies>
 </project>
diff --git a/common/androidx-test/androidx/test/espresso/espresso-idling-resource/3.4.0/espresso-idling-resource-3.4.0-sources.jar b/common/androidx-test/androidx/test/espresso/espresso-idling-resource/3.4.0/espresso-idling-resource-3.4.0-sources.jar
deleted file mode 100644
index 666589e..0000000
--- a/common/androidx-test/androidx/test/espresso/espresso-idling-resource/3.4.0/espresso-idling-resource-3.4.0-sources.jar
+++ /dev/null
Binary files differ
diff --git a/common/androidx-test/androidx/test/espresso/espresso-idling-resource/3.4.0/espresso-idling-resource-3.4.0.aar b/common/androidx-test/androidx/test/espresso/espresso-idling-resource/3.4.0/espresso-idling-resource-3.4.0.aar
deleted file mode 100644
index 4caa333..0000000
--- a/common/androidx-test/androidx/test/espresso/espresso-idling-resource/3.4.0/espresso-idling-resource-3.4.0.aar
+++ /dev/null
Binary files differ
diff --git a/common/androidx-test/androidx/test/espresso/espresso-idling-resource/3.5.0-alpha04/espresso-idling-resource-3.5.0-alpha04-sources.jar b/common/androidx-test/androidx/test/espresso/espresso-idling-resource/3.5.0-alpha04/espresso-idling-resource-3.5.0-alpha04-sources.jar
new file mode 100644
index 0000000..9619f06
--- /dev/null
+++ b/common/androidx-test/androidx/test/espresso/espresso-idling-resource/3.5.0-alpha04/espresso-idling-resource-3.5.0-alpha04-sources.jar
Binary files differ
diff --git a/common/androidx-test/androidx/test/espresso/espresso-idling-resource/3.5.0-alpha04/espresso-idling-resource-3.5.0-alpha04.aar b/common/androidx-test/androidx/test/espresso/espresso-idling-resource/3.5.0-alpha04/espresso-idling-resource-3.5.0-alpha04.aar
new file mode 100644
index 0000000..49d2629
--- /dev/null
+++ b/common/androidx-test/androidx/test/espresso/espresso-idling-resource/3.5.0-alpha04/espresso-idling-resource-3.5.0-alpha04.aar
Binary files differ
diff --git a/common/androidx-test/androidx/test/espresso/espresso-idling-resource/3.4.0/espresso-idling-resource-3.4.0.pom b/common/androidx-test/androidx/test/espresso/espresso-idling-resource/3.5.0-alpha04/espresso-idling-resource-3.5.0-alpha04.pom
similarity index 96%
rename from common/androidx-test/androidx/test/espresso/espresso-idling-resource/3.4.0/espresso-idling-resource-3.4.0.pom
rename to common/androidx-test/androidx/test/espresso/espresso-idling-resource/3.5.0-alpha04/espresso-idling-resource-3.5.0-alpha04.pom
index d7806ed..f8d821a 100644
--- a/common/androidx-test/androidx/test/espresso/espresso-idling-resource/3.4.0/espresso-idling-resource-3.4.0.pom
+++ b/common/androidx-test/androidx/test/espresso/espresso-idling-resource/3.5.0-alpha04/espresso-idling-resource-3.5.0-alpha04.pom
@@ -5,7 +5,7 @@
   <modelVersion>4.0.0</modelVersion>
   <groupId>androidx.test.espresso</groupId>
   <artifactId>espresso-idling-resource</artifactId>
-  <version>3.4.0</version>
+  <version>3.5.0-alpha04</version>
   <packaging>aar</packaging>
   <name>AndroidX Test Library</name>
   <description>The AndroidX Test Library provides an extensive framework for testing Android apps</description>
diff --git a/common/androidx-test/androidx/test/espresso/espresso-intents/3.4.0/espresso-intents-3.4.0-sources.jar b/common/androidx-test/androidx/test/espresso/espresso-intents/3.4.0/espresso-intents-3.4.0-sources.jar
deleted file mode 100644
index 3a7287e..0000000
--- a/common/androidx-test/androidx/test/espresso/espresso-intents/3.4.0/espresso-intents-3.4.0-sources.jar
+++ /dev/null
Binary files differ
diff --git a/common/androidx-test/androidx/test/espresso/espresso-intents/3.4.0/espresso-intents-3.4.0.aar b/common/androidx-test/androidx/test/espresso/espresso-intents/3.4.0/espresso-intents-3.4.0.aar
deleted file mode 100644
index 6edf9f3..0000000
--- a/common/androidx-test/androidx/test/espresso/espresso-intents/3.4.0/espresso-intents-3.4.0.aar
+++ /dev/null
Binary files differ
diff --git a/common/androidx-test/androidx/test/espresso/espresso-intents/3.5.0-alpha04/espresso-intents-3.5.0-alpha04-sources.jar b/common/androidx-test/androidx/test/espresso/espresso-intents/3.5.0-alpha04/espresso-intents-3.5.0-alpha04-sources.jar
new file mode 100644
index 0000000..b3e5d03
--- /dev/null
+++ b/common/androidx-test/androidx/test/espresso/espresso-intents/3.5.0-alpha04/espresso-intents-3.5.0-alpha04-sources.jar
Binary files differ
diff --git a/common/androidx-test/androidx/test/espresso/espresso-intents/3.5.0-alpha04/espresso-intents-3.5.0-alpha04.aar b/common/androidx-test/androidx/test/espresso/espresso-intents/3.5.0-alpha04/espresso-intents-3.5.0-alpha04.aar
new file mode 100644
index 0000000..caef56a
--- /dev/null
+++ b/common/androidx-test/androidx/test/espresso/espresso-intents/3.5.0-alpha04/espresso-intents-3.5.0-alpha04.aar
Binary files differ
diff --git a/common/androidx-test/androidx/test/espresso/espresso-intents/3.4.0/espresso-intents-3.4.0.pom b/common/androidx-test/androidx/test/espresso/espresso-intents/3.5.0-alpha04/espresso-intents-3.5.0-alpha04.pom
similarity index 81%
rename from common/androidx-test/androidx/test/espresso/espresso-intents/3.4.0/espresso-intents-3.4.0.pom
rename to common/androidx-test/androidx/test/espresso/espresso-intents/3.5.0-alpha04/espresso-intents-3.5.0-alpha04.pom
index 50d98a1..469572d 100644
--- a/common/androidx-test/androidx/test/espresso/espresso-intents/3.4.0/espresso-intents-3.4.0.pom
+++ b/common/androidx-test/androidx/test/espresso/espresso-intents/3.5.0-alpha04/espresso-intents-3.5.0-alpha04.pom
@@ -5,7 +5,7 @@
   <modelVersion>4.0.0</modelVersion>
   <groupId>androidx.test.espresso</groupId>
   <artifactId>espresso-intents</artifactId>
-  <version>3.4.0</version>
+  <version>3.5.0-alpha04</version>
   <packaging>aar</packaging>
   <name>AndroidX Test Library</name>
   <description>The AndroidX Test Library provides an extensive framework for testing Android apps</description>
@@ -27,19 +27,25 @@
     <dependency>
       <groupId>androidx.test.espresso</groupId>
       <artifactId>espresso-core</artifactId>
-      <version>3.4.0</version>
+      <version>3.5.0-alpha04</version>
       <scope>compile</scope>
     </dependency>
     <dependency>
       <groupId>androidx.test</groupId>
       <artifactId>core</artifactId>
-      <version>1.4.0</version>
+      <version>1.4.1-alpha04</version>
       <scope>compile</scope>
     </dependency>
     <dependency>
       <groupId>androidx.test</groupId>
       <artifactId>rules</artifactId>
-      <version>1.4.0</version>
+      <version>1.4.1-alpha04</version>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>androidx.test</groupId>
+      <artifactId>annotation</artifactId>
+      <version>1.0.0</version>
       <scope>compile</scope>
     </dependency>
   </dependencies>
diff --git a/common/androidx-test/androidx/test/espresso/espresso-web/3.4.0/espresso-web-3.4.0.aar b/common/androidx-test/androidx/test/espresso/espresso-web/3.4.0/espresso-web-3.4.0.aar
deleted file mode 100644
index c080b02..0000000
--- a/common/androidx-test/androidx/test/espresso/espresso-web/3.4.0/espresso-web-3.4.0.aar
+++ /dev/null
Binary files differ
diff --git a/common/androidx-test/androidx/test/espresso/espresso-web/3.4.0/espresso-web-3.4.0-sources.jar b/common/androidx-test/androidx/test/espresso/espresso-web/3.5.0-alpha04/espresso-web-3.5.0-alpha04-sources.jar
similarity index 65%
rename from common/androidx-test/androidx/test/espresso/espresso-web/3.4.0/espresso-web-3.4.0-sources.jar
rename to common/androidx-test/androidx/test/espresso/espresso-web/3.5.0-alpha04/espresso-web-3.5.0-alpha04-sources.jar
index 07d2601..d723055 100644
--- a/common/androidx-test/androidx/test/espresso/espresso-web/3.4.0/espresso-web-3.4.0-sources.jar
+++ b/common/androidx-test/androidx/test/espresso/espresso-web/3.5.0-alpha04/espresso-web-3.5.0-alpha04-sources.jar
Binary files differ
diff --git a/common/androidx-test/androidx/test/espresso/espresso-web/3.5.0-alpha04/espresso-web-3.5.0-alpha04.aar b/common/androidx-test/androidx/test/espresso/espresso-web/3.5.0-alpha04/espresso-web-3.5.0-alpha04.aar
new file mode 100644
index 0000000..239f935
--- /dev/null
+++ b/common/androidx-test/androidx/test/espresso/espresso-web/3.5.0-alpha04/espresso-web-3.5.0-alpha04.aar
Binary files differ
diff --git a/common/androidx-test/androidx/test/espresso/espresso-web/3.4.0/espresso-web-3.4.0.pom b/common/androidx-test/androidx/test/espresso/espresso-web/3.5.0-alpha04/espresso-web-3.5.0-alpha04.pom
similarity index 92%
rename from common/androidx-test/androidx/test/espresso/espresso-web/3.4.0/espresso-web-3.4.0.pom
rename to common/androidx-test/androidx/test/espresso/espresso-web/3.5.0-alpha04/espresso-web-3.5.0-alpha04.pom
index 99719a5..712b5e5 100644
--- a/common/androidx-test/androidx/test/espresso/espresso-web/3.4.0/espresso-web-3.4.0.pom
+++ b/common/androidx-test/androidx/test/espresso/espresso-web/3.5.0-alpha04/espresso-web-3.5.0-alpha04.pom
@@ -5,7 +5,7 @@
   <modelVersion>4.0.0</modelVersion>
   <groupId>androidx.test.espresso</groupId>
   <artifactId>espresso-web</artifactId>
-  <version>3.4.0</version>
+  <version>3.5.0-alpha04</version>
   <packaging>aar</packaging>
   <name>AndroidX Test Library</name>
   <description>The AndroidX Test Library provides an extensive framework for testing Android apps</description>
@@ -27,13 +27,13 @@
     <dependency>
       <groupId>androidx.test.espresso</groupId>
       <artifactId>espresso-core</artifactId>
-      <version>3.4.0</version>
+      <version>3.5.0-alpha04</version>
       <scope>compile</scope>
     </dependency>
     <dependency>
       <groupId>androidx.annotation</groupId>
       <artifactId>annotation</artifactId>
-      <version>1.0.0</version>
+      <version>1.2.0</version>
       <scope>compile</scope>
     </dependency>
     <dependency>
diff --git a/common/androidx-test/androidx/test/ext/junit/1.1.3/junit-1.1.3.aar b/common/androidx-test/androidx/test/ext/junit/1.1.3/junit-1.1.3.aar
deleted file mode 100644
index 31fee06..0000000
--- a/common/androidx-test/androidx/test/ext/junit/1.1.3/junit-1.1.3.aar
+++ /dev/null
Binary files differ
diff --git a/common/androidx-test/androidx/test/ext/junit/1.1.3/junit-1.1.3-sources.jar b/common/androidx-test/androidx/test/ext/junit/1.1.4-alpha04/junit-1.1.4-alpha04-sources.jar
similarity index 60%
rename from common/androidx-test/androidx/test/ext/junit/1.1.3/junit-1.1.3-sources.jar
rename to common/androidx-test/androidx/test/ext/junit/1.1.4-alpha04/junit-1.1.4-alpha04-sources.jar
index adb3044..8026710 100644
--- a/common/androidx-test/androidx/test/ext/junit/1.1.3/junit-1.1.3-sources.jar
+++ b/common/androidx-test/androidx/test/ext/junit/1.1.4-alpha04/junit-1.1.4-alpha04-sources.jar
Binary files differ
diff --git a/common/androidx-test/androidx/test/ext/junit/1.1.4-alpha04/junit-1.1.4-alpha04.aar b/common/androidx-test/androidx/test/ext/junit/1.1.4-alpha04/junit-1.1.4-alpha04.aar
new file mode 100644
index 0000000..e066e19
--- /dev/null
+++ b/common/androidx-test/androidx/test/ext/junit/1.1.4-alpha04/junit-1.1.4-alpha04.aar
Binary files differ
diff --git a/common/androidx-test/androidx/test/ext/junit/1.1.3/junit-1.1.3.pom b/common/androidx-test/androidx/test/ext/junit/1.1.4-alpha04/junit-1.1.4-alpha04.pom
similarity index 89%
rename from common/androidx-test/androidx/test/ext/junit/1.1.3/junit-1.1.3.pom
rename to common/androidx-test/androidx/test/ext/junit/1.1.4-alpha04/junit-1.1.4-alpha04.pom
index 8b4e749..ba34e0b 100644
--- a/common/androidx-test/androidx/test/ext/junit/1.1.3/junit-1.1.3.pom
+++ b/common/androidx-test/androidx/test/ext/junit/1.1.4-alpha04/junit-1.1.4-alpha04.pom
@@ -5,7 +5,7 @@
   <modelVersion>4.0.0</modelVersion>
   <groupId>androidx.test.ext</groupId>
   <artifactId>junit</artifactId>
-  <version>1.1.3</version>
+  <version>1.1.4-alpha04</version>
   <packaging>aar</packaging>
   <name>AndroidX Test Library</name>
   <description>The AndroidX Test Library provides an extensive framework for testing Android apps</description>
@@ -27,25 +27,25 @@
     <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
-      <version>4.12</version>
+      <version>4.13.2</version>
       <scope>compile</scope>
     </dependency>
     <dependency>
       <groupId>androidx.test</groupId>
       <artifactId>core</artifactId>
-      <version>1.4.0</version>
+      <version>1.4.1-alpha04</version>
       <scope>compile</scope>
     </dependency>
     <dependency>
       <groupId>androidx.test</groupId>
       <artifactId>monitor</artifactId>
-      <version>1.4.0</version>
+      <version>1.6.0-alpha01</version>
       <scope>compile</scope>
     </dependency>
     <dependency>
       <groupId>androidx.annotation</groupId>
       <artifactId>annotation</artifactId>
-      <version>1.0.0</version>
+      <version>1.2.0</version>
       <scope>compile</scope>
     </dependency>
   </dependencies>
diff --git a/common/androidx-test/androidx/test/ext/truth/1.4.0/truth-1.4.0-sources.jar b/common/androidx-test/androidx/test/ext/truth/1.4.0/truth-1.4.0-sources.jar
deleted file mode 100644
index bea5a00..0000000
--- a/common/androidx-test/androidx/test/ext/truth/1.4.0/truth-1.4.0-sources.jar
+++ /dev/null
Binary files differ
diff --git a/common/androidx-test/androidx/test/ext/truth/1.4.0/truth-1.4.0.aar b/common/androidx-test/androidx/test/ext/truth/1.4.0/truth-1.4.0.aar
deleted file mode 100644
index 6fe5242..0000000
--- a/common/androidx-test/androidx/test/ext/truth/1.4.0/truth-1.4.0.aar
+++ /dev/null
Binary files differ
diff --git a/common/androidx-test/androidx/test/ext/truth/1.5.0-alpha04/truth-1.5.0-alpha04-sources.jar b/common/androidx-test/androidx/test/ext/truth/1.5.0-alpha04/truth-1.5.0-alpha04-sources.jar
new file mode 100644
index 0000000..6ad0ce2
--- /dev/null
+++ b/common/androidx-test/androidx/test/ext/truth/1.5.0-alpha04/truth-1.5.0-alpha04-sources.jar
Binary files differ
diff --git a/common/androidx-test/androidx/test/ext/truth/1.5.0-alpha04/truth-1.5.0-alpha04.aar b/common/androidx-test/androidx/test/ext/truth/1.5.0-alpha04/truth-1.5.0-alpha04.aar
new file mode 100644
index 0000000..2f7a813
--- /dev/null
+++ b/common/androidx-test/androidx/test/ext/truth/1.5.0-alpha04/truth-1.5.0-alpha04.aar
Binary files differ
diff --git a/common/androidx-test/androidx/test/ext/truth/1.4.0/truth-1.4.0.pom b/common/androidx-test/androidx/test/ext/truth/1.5.0-alpha04/truth-1.5.0-alpha04.pom
similarity index 89%
rename from common/androidx-test/androidx/test/ext/truth/1.4.0/truth-1.4.0.pom
rename to common/androidx-test/androidx/test/ext/truth/1.5.0-alpha04/truth-1.5.0-alpha04.pom
index b50acfe..b5ebfee 100644
--- a/common/androidx-test/androidx/test/ext/truth/1.4.0/truth-1.4.0.pom
+++ b/common/androidx-test/androidx/test/ext/truth/1.5.0-alpha04/truth-1.5.0-alpha04.pom
@@ -5,7 +5,7 @@
   <modelVersion>4.0.0</modelVersion>
   <groupId>androidx.test.ext</groupId>
   <artifactId>truth</artifactId>
-  <version>1.4.0</version>
+  <version>1.5.0-alpha04</version>
   <packaging>aar</packaging>
   <name>AndroidX Test Library</name>
   <description>The AndroidX Test Library provides an extensive framework for testing Android apps</description>
@@ -27,25 +27,25 @@
     <dependency>
       <groupId>androidx.test</groupId>
       <artifactId>core</artifactId>
-      <version>1.4.0</version>
+      <version>1.4.1-alpha04</version>
       <scope>compile</scope>
     </dependency>
     <dependency>
       <groupId>com.google.guava</groupId>
       <artifactId>guava</artifactId>
-      <version>27.0.1-android</version>
+      <version>30.1.1-android</version>
       <scope>compile</scope>
     </dependency>
     <dependency>
       <groupId>com.google.truth</groupId>
       <artifactId>truth</artifactId>
-      <version>1.0</version>
+      <version>1.1.3</version>
       <scope>compile</scope>
     </dependency>
     <dependency>
       <groupId>androidx.annotation</groupId>
       <artifactId>annotation</artifactId>
-      <version>1.0.0</version>
+      <version>1.2.0</version>
       <scope>compile</scope>
     </dependency>
   </dependencies>
diff --git a/common/androidx-test/androidx/test/monitor/1.4.0/monitor-1.4.0-sources.jar b/common/androidx-test/androidx/test/monitor/1.4.0/monitor-1.4.0-sources.jar
deleted file mode 100644
index 3f6cc0b..0000000
--- a/common/androidx-test/androidx/test/monitor/1.4.0/monitor-1.4.0-sources.jar
+++ /dev/null
Binary files differ
diff --git a/common/androidx-test/androidx/test/monitor/1.4.0/monitor-1.4.0.aar b/common/androidx-test/androidx/test/monitor/1.4.0/monitor-1.4.0.aar
deleted file mode 100644
index 385cb3b..0000000
--- a/common/androidx-test/androidx/test/monitor/1.4.0/monitor-1.4.0.aar
+++ /dev/null
Binary files differ
diff --git a/common/androidx-test/androidx/test/monitor/1.6.0-alpha01/monitor-1.6.0-alpha01-sources.jar b/common/androidx-test/androidx/test/monitor/1.6.0-alpha01/monitor-1.6.0-alpha01-sources.jar
new file mode 100644
index 0000000..7965c08
--- /dev/null
+++ b/common/androidx-test/androidx/test/monitor/1.6.0-alpha01/monitor-1.6.0-alpha01-sources.jar
Binary files differ
diff --git a/common/androidx-test/androidx/test/monitor/1.6.0-alpha01/monitor-1.6.0-alpha01.aar b/common/androidx-test/androidx/test/monitor/1.6.0-alpha01/monitor-1.6.0-alpha01.aar
new file mode 100644
index 0000000..fdfdf2b
--- /dev/null
+++ b/common/androidx-test/androidx/test/monitor/1.6.0-alpha01/monitor-1.6.0-alpha01.aar
Binary files differ
diff --git a/common/androidx-test/androidx/test/core/1.4.0/core-1.4.0.pom b/common/androidx-test/androidx/test/monitor/1.6.0-alpha01/monitor-1.6.0-alpha01.pom
similarity index 83%
rename from common/androidx-test/androidx/test/core/1.4.0/core-1.4.0.pom
rename to common/androidx-test/androidx/test/monitor/1.6.0-alpha01/monitor-1.6.0-alpha01.pom
index d21737e..0c799b2 100644
--- a/common/androidx-test/androidx/test/core/1.4.0/core-1.4.0.pom
+++ b/common/androidx-test/androidx/test/monitor/1.6.0-alpha01/monitor-1.6.0-alpha01.pom
@@ -4,8 +4,8 @@
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <modelVersion>4.0.0</modelVersion>
   <groupId>androidx.test</groupId>
-  <artifactId>core</artifactId>
-  <version>1.4.0</version>
+  <artifactId>monitor</artifactId>
+  <version>1.6.0-alpha01</version>
   <packaging>aar</packaging>
   <name>AndroidX Test Library</name>
   <description>The AndroidX Test Library provides an extensive framework for testing Android apps</description>
@@ -27,19 +27,19 @@
     <dependency>
       <groupId>androidx.annotation</groupId>
       <artifactId>annotation</artifactId>
-      <version>1.0.0</version>
+      <version>1.2.0</version>
       <scope>compile</scope>
     </dependency>
     <dependency>
       <groupId>androidx.test</groupId>
-      <artifactId>monitor</artifactId>
-      <version>1.4.0</version>
+      <artifactId>annotation</artifactId>
+      <version>1.0.0</version>
       <scope>compile</scope>
     </dependency>
     <dependency>
-      <groupId>androidx.lifecycle</groupId>
-      <artifactId>lifecycle-common</artifactId>
-      <version>2.0.0</version>
+      <groupId>androidx.tracing</groupId>
+      <artifactId>tracing</artifactId>
+      <version>1.0.0</version>
       <scope>compile</scope>
     </dependency>
   </dependencies>
diff --git a/common/androidx-test/androidx/test/rules/1.4.0/rules-1.4.0-sources.jar b/common/androidx-test/androidx/test/rules/1.4.0/rules-1.4.0-sources.jar
deleted file mode 100644
index cccca58..0000000
--- a/common/androidx-test/androidx/test/rules/1.4.0/rules-1.4.0-sources.jar
+++ /dev/null
Binary files differ
diff --git a/common/androidx-test/androidx/test/rules/1.4.0/rules-1.4.0.aar b/common/androidx-test/androidx/test/rules/1.4.0/rules-1.4.0.aar
deleted file mode 100644
index 8bc6e73..0000000
--- a/common/androidx-test/androidx/test/rules/1.4.0/rules-1.4.0.aar
+++ /dev/null
Binary files differ
diff --git a/common/androidx-test/androidx/test/rules/1.4.1-alpha01/rules-1.4.1-alpha01-sources.jar b/common/androidx-test/androidx/test/rules/1.4.1-alpha01/rules-1.4.1-alpha01-sources.jar
new file mode 100644
index 0000000..25ad352
--- /dev/null
+++ b/common/androidx-test/androidx/test/rules/1.4.1-alpha01/rules-1.4.1-alpha01-sources.jar
Binary files differ
diff --git a/common/androidx-test/androidx/test/rules/1.4.1-alpha01/rules-1.4.1-alpha01.aar b/common/androidx-test/androidx/test/rules/1.4.1-alpha01/rules-1.4.1-alpha01.aar
new file mode 100644
index 0000000..a1155b2
--- /dev/null
+++ b/common/androidx-test/androidx/test/rules/1.4.1-alpha01/rules-1.4.1-alpha01.aar
Binary files differ
diff --git a/common/androidx-test/androidx/test/rules/1.4.0/rules-1.4.0.pom b/common/androidx-test/androidx/test/rules/1.4.1-alpha01/rules-1.4.1-alpha01.pom
similarity index 93%
rename from common/androidx-test/androidx/test/rules/1.4.0/rules-1.4.0.pom
rename to common/androidx-test/androidx/test/rules/1.4.1-alpha01/rules-1.4.1-alpha01.pom
index e07e67b..12ba297 100644
--- a/common/androidx-test/androidx/test/rules/1.4.0/rules-1.4.0.pom
+++ b/common/androidx-test/androidx/test/rules/1.4.1-alpha01/rules-1.4.1-alpha01.pom
@@ -5,7 +5,7 @@
   <modelVersion>4.0.0</modelVersion>
   <groupId>androidx.test</groupId>
   <artifactId>rules</artifactId>
-  <version>1.4.0</version>
+  <version>1.4.1-alpha01</version>
   <packaging>aar</packaging>
   <name>AndroidX Test Library</name>
   <description>The AndroidX Test Library provides an extensive framework for testing Android apps</description>
@@ -27,7 +27,7 @@
     <dependency>
       <groupId>androidx.test</groupId>
       <artifactId>runner</artifactId>
-      <version>1.4.0</version>
+      <version>1.4.1-alpha01</version>
       <scope>compile</scope>
     </dependency>
   </dependencies>
diff --git a/common/androidx-test/androidx/test/runner/1.4.0/runner-1.4.0-sources.jar b/common/androidx-test/androidx/test/runner/1.4.0/runner-1.4.0-sources.jar
deleted file mode 100644
index 322b66c..0000000
--- a/common/androidx-test/androidx/test/runner/1.4.0/runner-1.4.0-sources.jar
+++ /dev/null
Binary files differ
diff --git a/common/androidx-test/androidx/test/runner/1.4.0/runner-1.4.0.aar b/common/androidx-test/androidx/test/runner/1.4.0/runner-1.4.0.aar
deleted file mode 100644
index 3762c05..0000000
--- a/common/androidx-test/androidx/test/runner/1.4.0/runner-1.4.0.aar
+++ /dev/null
Binary files differ
diff --git a/common/androidx-test/androidx/test/runner/1.5.0-alpha01/runner-1.5.0-alpha01-sources.jar b/common/androidx-test/androidx/test/runner/1.5.0-alpha01/runner-1.5.0-alpha01-sources.jar
new file mode 100644
index 0000000..c3e81db
--- /dev/null
+++ b/common/androidx-test/androidx/test/runner/1.5.0-alpha01/runner-1.5.0-alpha01-sources.jar
Binary files differ
diff --git a/common/androidx-test/androidx/test/runner/1.5.0-alpha01/runner-1.5.0-alpha01.aar b/common/androidx-test/androidx/test/runner/1.5.0-alpha01/runner-1.5.0-alpha01.aar
new file mode 100644
index 0000000..e812a79
--- /dev/null
+++ b/common/androidx-test/androidx/test/runner/1.5.0-alpha01/runner-1.5.0-alpha01.aar
Binary files differ
diff --git a/common/androidx-test/androidx/test/runner/1.4.0/runner-1.4.0.pom b/common/androidx-test/androidx/test/runner/1.5.0-alpha01/runner-1.5.0-alpha01.pom
similarity index 75%
rename from common/androidx-test/androidx/test/runner/1.4.0/runner-1.4.0.pom
rename to common/androidx-test/androidx/test/runner/1.5.0-alpha01/runner-1.5.0-alpha01.pom
index 05885b2..254f339 100644
--- a/common/androidx-test/androidx/test/runner/1.4.0/runner-1.4.0.pom
+++ b/common/androidx-test/androidx/test/runner/1.5.0-alpha01/runner-1.5.0-alpha01.pom
@@ -5,7 +5,7 @@
   <modelVersion>4.0.0</modelVersion>
   <groupId>androidx.test</groupId>
   <artifactId>runner</artifactId>
-  <version>1.4.0</version>
+  <version>1.5.0-alpha01</version>
   <packaging>aar</packaging>
   <name>AndroidX Test Library</name>
   <description>The AndroidX Test Library provides an extensive framework for testing Android apps</description>
@@ -27,25 +27,37 @@
     <dependency>
       <groupId>androidx.annotation</groupId>
       <artifactId>annotation</artifactId>
+      <version>1.2.0</version>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>androidx.test</groupId>
+      <artifactId>annotation</artifactId>
       <version>1.0.0</version>
       <scope>compile</scope>
     </dependency>
     <dependency>
       <groupId>androidx.test</groupId>
       <artifactId>monitor</artifactId>
-      <version>[1.4.0]</version>
+      <version>[1.6.0-alpha01]</version>
       <scope>compile</scope>
     </dependency>
     <dependency>
       <groupId>androidx.test.services</groupId>
       <artifactId>storage</artifactId>
-      <version>[1.4.0]</version>
+      <version>[1.4.2-alpha01]</version>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>androidx.tracing</groupId>
+      <artifactId>tracing</artifactId>
+      <version>1.0.0</version>
       <scope>compile</scope>
     </dependency>
     <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
-      <version>4.12</version>
+      <version>4.13.2</version>
       <scope>compile</scope>
     </dependency>
   </dependencies>
diff --git a/common/androidx-test/androidx/test/services/storage/1.4.0/storage-1.4.0-sources.jar b/common/androidx-test/androidx/test/services/storage/1.4.0/storage-1.4.0-sources.jar
deleted file mode 100644
index 87e12e5..0000000
--- a/common/androidx-test/androidx/test/services/storage/1.4.0/storage-1.4.0-sources.jar
+++ /dev/null
Binary files differ
diff --git a/common/androidx-test/androidx/test/services/storage/1.4.0/storage-1.4.0.aar b/common/androidx-test/androidx/test/services/storage/1.4.0/storage-1.4.0.aar
deleted file mode 100644
index 81d285b..0000000
--- a/common/androidx-test/androidx/test/services/storage/1.4.0/storage-1.4.0.aar
+++ /dev/null
Binary files differ
diff --git a/common/androidx-test/androidx/test/services/storage/1.4.0/storage-1.4.0.pom b/common/androidx-test/androidx/test/services/storage/1.4.0/storage-1.4.0.pom
deleted file mode 100644
index 6c5759a..0000000
--- a/common/androidx-test/androidx/test/services/storage/1.4.0/storage-1.4.0.pom
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
-    xmlns="http://maven.apache.org/POM/4.0.0"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-  <modelVersion>4.0.0</modelVersion>
-  <groupId>androidx.test.services</groupId>
-  <artifactId>storage</artifactId>
-  <version>1.4.0</version>
-  <packaging>aar</packaging>
-  <name>AndroidX Test Library</name>
-  <description>The AndroidX Test Library provides an extensive framework for testing Android apps</description>
-  <url>https://developer.android.com/testing</url>
-  <inceptionYear>2015</inceptionYear>
-  <licenses>
-    <license>
-      <name>The Apache Software License, Version 2.0</name>
-      <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-      <distribution>repo</distribution>
-    </license>
-  </licenses>
-  <developers>
-    <developer>
-      <name>The Android Open Source Project</name>
-    </developer>
-  </developers>
-  <dependencies>
-    <dependency>
-      <groupId>androidx.test</groupId>
-      <artifactId>monitor</artifactId>
-      <version>[1.4.0]</version>
-      <scope>compile</scope>
-    </dependency>
-    <dependency>
-      <groupId>com.google.code.findbugs</groupId>
-      <artifactId>jsr305</artifactId>
-      <version>2.0.1</version>
-      <scope>compile</scope>
-    </dependency>
-  </dependencies>
-</project>
diff --git a/common/androidx-test/androidx/test/services/storage/1.4.2-alpha01/storage-1.4.2-alpha01-sources.jar b/common/androidx-test/androidx/test/services/storage/1.4.2-alpha01/storage-1.4.2-alpha01-sources.jar
new file mode 100644
index 0000000..9e58990
--- /dev/null
+++ b/common/androidx-test/androidx/test/services/storage/1.4.2-alpha01/storage-1.4.2-alpha01-sources.jar
Binary files differ
diff --git a/common/androidx-test/androidx/test/services/storage/1.4.2-alpha01/storage-1.4.2-alpha01.aar b/common/androidx-test/androidx/test/services/storage/1.4.2-alpha01/storage-1.4.2-alpha01.aar
new file mode 100644
index 0000000..734d464
--- /dev/null
+++ b/common/androidx-test/androidx/test/services/storage/1.4.2-alpha01/storage-1.4.2-alpha01.aar
Binary files differ
diff --git a/common/androidx-test/androidx/test/ext/junit/1.1.3/junit-1.1.3.pom b/common/androidx-test/androidx/test/services/storage/1.4.2-alpha01/storage-1.4.2-alpha01.pom
similarity index 79%
copy from common/androidx-test/androidx/test/ext/junit/1.1.3/junit-1.1.3.pom
copy to common/androidx-test/androidx/test/services/storage/1.4.2-alpha01/storage-1.4.2-alpha01.pom
index 8b4e749..de5afd6 100644
--- a/common/androidx-test/androidx/test/ext/junit/1.1.3/junit-1.1.3.pom
+++ b/common/androidx-test/androidx/test/services/storage/1.4.2-alpha01/storage-1.4.2-alpha01.pom
@@ -3,9 +3,9 @@
     xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <modelVersion>4.0.0</modelVersion>
-  <groupId>androidx.test.ext</groupId>
-  <artifactId>junit</artifactId>
-  <version>1.1.3</version>
+  <groupId>androidx.test.services</groupId>
+  <artifactId>storage</artifactId>
+  <version>1.4.2-alpha01</version>
   <packaging>aar</packaging>
   <name>AndroidX Test Library</name>
   <description>The AndroidX Test Library provides an extensive framework for testing Android apps</description>
@@ -25,25 +25,25 @@
   </developers>
   <dependencies>
     <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <version>4.12</version>
-      <scope>compile</scope>
-    </dependency>
-    <dependency>
-      <groupId>androidx.test</groupId>
-      <artifactId>core</artifactId>
-      <version>1.4.0</version>
+      <groupId>androidx.annotation</groupId>
+      <artifactId>annotation</artifactId>
+      <version>1.2.0</version>
       <scope>compile</scope>
     </dependency>
     <dependency>
       <groupId>androidx.test</groupId>
       <artifactId>monitor</artifactId>
-      <version>1.4.0</version>
+      <version>[1.6.0-alpha01]</version>
       <scope>compile</scope>
     </dependency>
     <dependency>
-      <groupId>androidx.annotation</groupId>
+      <groupId>com.google.code.findbugs</groupId>
+      <artifactId>jsr305</artifactId>
+      <version>2.0.1</version>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>androidx.test</groupId>
       <artifactId>annotation</artifactId>
       <version>1.0.0</version>
       <scope>compile</scope>
diff --git a/common/androidx-test/manifests/androidx.test.annotation/AndroidManifest.xml b/common/androidx-test/manifests/androidx.test.annotation/AndroidManifest.xml
new file mode 100644
index 0000000..da6d25a
--- /dev/null
+++ b/common/androidx-test/manifests/androidx.test.annotation/AndroidManifest.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2021 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~   http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+-->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="androidx.test.annotation" >
+
+    <uses-sdk
+        android:minSdkVersion="14"
+        android:targetSdkVersion="30" />
+
+</manifest>
\ No newline at end of file
diff --git a/common/androidx-test/manifests/androidx.test.core/AndroidManifest.xml b/common/androidx-test/manifests/androidx.test.core/AndroidManifest.xml
index f16ef39..ed79120 100644
--- a/common/androidx-test/manifests/androidx.test.core/AndroidManifest.xml
+++ b/common/androidx-test/manifests/androidx.test.core/AndroidManifest.xml
@@ -27,7 +27,7 @@
         <activity
             android:name="androidx.test.core.app.InstrumentationActivityInvoker$BootstrapActivity"
             android:exported="true"
-            android:theme="@android:style/Theme" >
+            android:theme="@style/WhiteBackgroundTheme" >
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
             </intent-filter>
@@ -35,7 +35,7 @@
         <activity
             android:name="androidx.test.core.app.InstrumentationActivityInvoker$EmptyActivity"
             android:exported="true"
-            android:theme="@android:style/Theme" >
+            android:theme="@style/WhiteBackgroundTheme" >
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
             </intent-filter>
@@ -43,7 +43,7 @@
         <activity
             android:name="androidx.test.core.app.InstrumentationActivityInvoker$EmptyFloatingActivity"
             android:exported="true"
-            android:theme="@android:style/Theme.Dialog" >
+            android:theme="@style/WhiteBackgroundDialogTheme" >
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
             </intent-filter>
diff --git a/common/androidx-test/update-from-gmaven.py b/common/androidx-test/update-from-gmaven.py
index e3e0e67..8e61a9e 100755
--- a/common/androidx-test/update-from-gmaven.py
+++ b/common/androidx-test/update-from-gmaven.py
@@ -18,23 +18,29 @@
 import subprocess
 import sys
 
-runnerVersion="1.4.0"
-rulesVersion=runnerVersion
-espressoVersion="3.4.0"
-coreVersion=runnerVersion
-extJUnitVersion="1.1.3"
-extTruthVersion=runnerVersion
-servicesVersion=runnerVersion
+annotationVersion="1.0.0"
+monitorVersion="1.6.0-alpha01"
+runnerVersion="1.5.0-alpha01"
+rulesVersion="1.4.1-alpha01"
+espressoVersion="3.5.0-alpha04"
+coreVersion="1.4.1-alpha04"
+extJUnitVersion="1.1.4-alpha04"
+extTruthVersion="1.5.0-alpha04"
+servicesVersion="1.4.2-alpha01"
 jankTestHelperVersion="1.0.1"
 uiAutomatorVersion="2.2.0"
 
 mavenToBpPatternMap = {
     "androidx.test:" : "androidx.test.",
+    "androidx.test.annotation:annotation" : "androidx.test.annotation",
     "androidx.test.ext:": "androidx.test.ext.",
     "androidx.test.espresso:espresso-":"androidx.test.espresso.",
     "androidx.test.janktesthelper:janktesthelper":"androidx.test.janktesthelper",
     "androidx.test.uiautomator:uiautomator":"androidx.test.uiautomator",
     "androidx.test.services:storage":"androidx.test.services.storage",
+    "androidx.tracing:tracing":"androidx.tracing_tracing",
+    "androidx.concurrent:concurrent-futures":"androidx.concurrent_concurrent-futures",
+    "com.google.guava:listenablefuture":"guava-listenablefuture-prebuilt-jar",
     }
 
 extraLibs = {
@@ -99,6 +105,7 @@
 cmd("rm -rf androidx/test")
 cmd("rm -rf manifests")
 
+downloadArtifact("androidx.test", "annotation", annotationVersion)
 downloadArtifact("androidx.test", "core", coreVersion)
 downloadArtifact("androidx.test.espresso", "espresso-core", espressoVersion)
 downloadArtifact("androidx.test.espresso", "espresso-contrib", espressoVersion)
@@ -106,7 +113,7 @@
 downloadArtifact("androidx.test.espresso", "espresso-intents", espressoVersion)
 downloadArtifact("androidx.test.espresso", "espresso-idling-resource", espressoVersion)
 downloadArtifact("androidx.test.espresso", "espresso-web", espressoVersion)
-downloadArtifact("androidx.test", "monitor", runnerVersion)
+downloadArtifact("androidx.test", "monitor", monitorVersion)
 downloadArtifact("androidx.test", "rules", rulesVersion)
 downloadArtifact("androidx.test", "runner", runnerVersion)
 downloadArtifact("androidx.test.ext", "junit", extJUnitVersion)
diff --git a/common/asm/Android.bp b/common/asm/Android.bp
index 86ca4d6..089fdf2 100644
--- a/common/asm/Android.bp
+++ b/common/asm/Android.bp
@@ -82,7 +82,7 @@
 }
 
 java_defaults {
-    name: "asm-7.0-defaults",
+    name: "asm-9.2-defaults",
     apex_available: [
         "//apex_available:anyapex",
         "//apex_available:platform",
@@ -90,36 +90,36 @@
 }
 
 java_import {
-    name: "asm-7.0",
+    name: "asm-9.2",
     host_supported: true,
-    jars: ["asm-7.0.jar"],
-    defaults: ["asm-7.0-defaults"],
+    jars: ["asm-9.2.jar"],
+    defaults: ["asm-9.2-defaults"],
 }
 
 java_import {
-    name: "asm-analysis-7.0",
+    name: "asm-analysis-9.2",
     host_supported: true,
-    jars: ["asm-analysis-7.0.jar"],
-    defaults: ["asm-7.0-defaults"],
+    jars: ["asm-analysis-9.2.jar"],
+    defaults: ["asm-9.2-defaults"],
 }
 
 java_import {
-    name: "asm-commons-7.0",
+    name: "asm-commons-9.2",
     host_supported: true,
-    jars: ["asm-commons-7.0.jar"],
-    defaults: ["asm-7.0-defaults"],
+    jars: ["asm-commons-9.2.jar"],
+    defaults: ["asm-9.2-defaults"],
 }
 
 java_import {
-    name: "asm-tree-7.0",
+    name: "asm-tree-9.2",
     host_supported: true,
-    jars: ["asm-tree-7.0.jar"],
-    defaults: ["asm-7.0-defaults"],
+    jars: ["asm-tree-9.2.jar"],
+    defaults: ["asm-9.2-defaults"],
 }
 
 java_import {
-    name: "asm-util-7.0",
+    name: "asm-util-9.2",
     host_supported: true,
-    jars: ["asm-util-7.0.jar"],
-    defaults: ["asm-7.0-defaults"],
+    jars: ["asm-util-9.2.jar"],
+    defaults: ["asm-9.2-defaults"],
 }
diff --git a/common/asm/PREBUILT b/common/asm/PREBUILT
index 72eddd2..4db93eb 100644
--- a/common/asm/PREBUILT
+++ b/common/asm/PREBUILT
@@ -4,8 +4,8 @@
 http://download.forge.ow2.org/asm/asm-5.2.tar.gz
 http://download.forge.ow2.org/asm/asm-6.0.tar.gz
 
-https://repository.ow2.org/nexus/content/repositories/releases/org/ow2/asm/asm/7.0/asm-7.0-sources.jar
-https://repository.ow2.org/nexus/content/repositories/releases/org/ow2/asm/asm-analysis/7.0/asm-analysis-7.0-sources.jar
-https://repository.ow2.org/nexus/content/repositories/releases/org/ow2/asm/asm-commons/7.0/asm-commons-7.0-sources.jar
-https://repository.ow2.org/nexus/content/repositories/releases/org/ow2/asm/asm-tree/7.0/asm-tree-7.0-sources.jar
-https://repository.ow2.org/nexus/content/repositories/releases/org/ow2/asm/asm-util/7.0/asm-util-7.0-sources.jar
+https://repository.ow2.org/nexus/content/repositories/releases/org/ow2/asm/asm/9.2/asm-9.2-sources.jar
+https://repository.ow2.org/nexus/content/repositories/releases/org/ow2/asm/asm-analysis/9.2/asm-analysis-9.2-sources.jar
+https://repository.ow2.org/nexus/content/repositories/releases/org/ow2/asm/asm-commons/9.2/asm-commons-9.2-sources.jar
+https://repository.ow2.org/nexus/content/repositories/releases/org/ow2/asm/asm-tree/9.2/asm-tree-9.2-sources.jar
+https://repository.ow2.org/nexus/content/repositories/releases/org/ow2/asm/asm-util/9.2/asm-util-9.2-sources.jar
diff --git a/common/asm/asm-7.0.jar b/common/asm/asm-7.0.jar
deleted file mode 100644
index 2cf38f4..0000000
--- a/common/asm/asm-7.0.jar
+++ /dev/null
Binary files differ
diff --git a/common/asm/asm-9.2.jar b/common/asm/asm-9.2.jar
new file mode 100644
index 0000000..3557ae4
--- /dev/null
+++ b/common/asm/asm-9.2.jar
Binary files differ
diff --git a/common/asm/asm-analysis-7.0.jar b/common/asm/asm-analysis-7.0.jar
deleted file mode 100644
index 341d0c5..0000000
--- a/common/asm/asm-analysis-7.0.jar
+++ /dev/null
Binary files differ
diff --git a/common/asm/asm-analysis-9.2.jar b/common/asm/asm-analysis-9.2.jar
new file mode 100644
index 0000000..9d575ca
--- /dev/null
+++ b/common/asm/asm-analysis-9.2.jar
Binary files differ
diff --git a/common/asm/asm-commons-7.0.jar b/common/asm/asm-commons-7.0.jar
deleted file mode 100644
index ba0de6c..0000000
--- a/common/asm/asm-commons-7.0.jar
+++ /dev/null
Binary files differ
diff --git a/common/asm/asm-commons-9.2.jar b/common/asm/asm-commons-9.2.jar
new file mode 100644
index 0000000..01028a0
--- /dev/null
+++ b/common/asm/asm-commons-9.2.jar
Binary files differ
diff --git a/common/asm/asm-tree-7.0.jar b/common/asm/asm-tree-7.0.jar
deleted file mode 100644
index 243c3cb..0000000
--- a/common/asm/asm-tree-7.0.jar
+++ /dev/null
Binary files differ
diff --git a/common/asm/asm-tree-9.2.jar b/common/asm/asm-tree-9.2.jar
new file mode 100644
index 0000000..0a6833a
--- /dev/null
+++ b/common/asm/asm-tree-9.2.jar
Binary files differ
diff --git a/common/asm/asm-util-7.0.jar b/common/asm/asm-util-7.0.jar
deleted file mode 100644
index 47717e5..0000000
--- a/common/asm/asm-util-7.0.jar
+++ /dev/null
Binary files differ
diff --git a/common/asm/asm-util-9.2.jar b/common/asm/asm-util-9.2.jar
new file mode 100644
index 0000000..3afe6e6
--- /dev/null
+++ b/common/asm/asm-util-9.2.jar
Binary files differ
diff --git a/common/commons-cli/Android.bp b/common/commons-cli/Android.bp
index cf12ca4..6e4cd78 100644
--- a/common/commons-cli/Android.bp
+++ b/common/commons-cli/Android.bp
@@ -35,7 +35,9 @@
     ],
 }
 
-java_import_host {
+java_import {
     name: "commons-cli-1.2",
+    host_supported: true,
+    sdk_version: "core_current",
     jars: ["commons-cli-1.2.jar"],
 }
diff --git a/common/ddmlib/ddmlib-prebuilt.jar b/common/ddmlib/ddmlib-prebuilt.jar
index b2c4f4e..ae0a1de 100644
--- a/common/ddmlib/ddmlib-prebuilt.jar
+++ b/common/ddmlib/ddmlib-prebuilt.jar
Binary files differ
diff --git a/common/frameworks/PREBUILT b/common/frameworks/PREBUILT
index 2580dca..71f186f 100644
--- a/common/frameworks/PREBUILT
+++ b/common/frameworks/PREBUILT
@@ -1,13 +1,17 @@
 The objects in this prebuilt directory can be built from
 	platform/frameworks/base
 
+Both are built using the aosp_arm64 variant.
+
 platformprotos-prebuilt.jar:
-Built from commit I2e7dd4868abda85d244e73592ff12d688f5c21fc.
-First AOSP build containing the change is aosp-master@7532584.
+Built from commit e72e4ca85bd1e8ecfba717283093275b9dcd2f8d.
+First AOSP build containing the change is aosp-master@8347157.
 
 platformtestprotos-prebuilt.jar:
-Built from change I82386a6c8a5e6ddf42d8377148001f4ede2f297f
+Built from commit e72e4ca85bd1e8ecfba717283093275b9dcd2f8d.
+First AOSP build containing the change is aosp-master@8347157.
 
 Note: Before dropping the jars, please run the following command to strip the
 jar manifest file, which causes hidden dependency on jars in the Class-Path.
+(Similar for platformtestprotos)
 $ zip -d platformprotos-prebuilt.jar META-INF/MANIFEST.MF
diff --git a/common/frameworks/platformprotos-prebuilt.jar b/common/frameworks/platformprotos-prebuilt.jar
index 6024892..a32e50e 100644
--- a/common/frameworks/platformprotos-prebuilt.jar
+++ b/common/frameworks/platformprotos-prebuilt.jar
Binary files differ
diff --git a/common/frameworks/platformtestprotos-prebuilt.jar b/common/frameworks/platformtestprotos-prebuilt.jar
index 77b9419..bf95702 100644
--- a/common/frameworks/platformtestprotos-prebuilt.jar
+++ b/common/frameworks/platformtestprotos-prebuilt.jar
Binary files differ
diff --git a/common/jacoco/Android.bp b/common/jacoco/Android.bp
index 9cd1065..b7fc330 100644
--- a/common/jacoco/Android.bp
+++ b/common/jacoco/Android.bp
@@ -15,11 +15,11 @@
     srcs: ["src/main/java/**/*.java"],
 
     static_libs: [
-        "asm-analysis-7.0",
-        "asm-commons-7.0",
-        "asm-7.0",
-        "asm-tree-7.0",
-        "asm-util-7.0",
+        "asm-analysis-9.2",
+        "asm-commons-9.2",
+        "asm-9.2",
+        "asm-tree-9.2",
+        "asm-util-9.2",
         "jvm-jacoco-report",
         "commons-cli-1.2",
     ],
diff --git a/common/robolectric/3.6.1/report-internal.mk b/common/robolectric/3.6.1/report-internal.mk
index 4989632..e8713e7 100644
--- a/common/robolectric/3.6.1/report-internal.mk
+++ b/common/robolectric/3.6.1/report-internal.mk
@@ -40,6 +40,9 @@
     $(my_coverage_output_zip):robotests-coverage/$(LOCAL_MODULE)/robolectric-html-coverage.zip \
     $(my_coverage_output):robotests-coverage/$(LOCAL_MODULE)/robolectric-coverage.xml)
 
+ALL_TARGETS.$(my_coverage_output_zip).META_LIC:=$(module_license_metadata)
+ALL_TARGETS.$(my_coverage_output).META_LIC:=$(module_license_metadata)
+
 # Running the coverage will always generate the report.
 $(my_target): $(my_coverage_output)
 
diff --git a/common/robolectric/3.6.1/robotest-internal.mk b/common/robolectric/3.6.1/robotest-internal.mk
index f8e4470..9bd9b5d 100644
--- a/common/robolectric/3.6.1/robotest-internal.mk
+++ b/common/robolectric/3.6.1/robotest-internal.mk
@@ -12,6 +12,9 @@
 my_target_output := $(intermediates)/$(my_filename_stem)-output.txt
 my_target_retval := $(intermediates)/$(my_filename_stem)-retval.txt
 
+ALL_TARGETS.$(my_target_output).META_LIC:=$(module_license_metadata)
+ALL_TARGETS.$(my_target_xml).META_LIC:=$(module_license_metadata)
+
 # We should always re-run the tests, even if nothing has changed.
 # So until the build system has a dedicated "no cache" option, claim
 # to write a file that is never produced.
diff --git a/common/robolectric/3.6.2/report-internal.mk b/common/robolectric/3.6.2/report-internal.mk
index 4989632..e8713e7 100644
--- a/common/robolectric/3.6.2/report-internal.mk
+++ b/common/robolectric/3.6.2/report-internal.mk
@@ -40,6 +40,9 @@
     $(my_coverage_output_zip):robotests-coverage/$(LOCAL_MODULE)/robolectric-html-coverage.zip \
     $(my_coverage_output):robotests-coverage/$(LOCAL_MODULE)/robolectric-coverage.xml)
 
+ALL_TARGETS.$(my_coverage_output_zip).META_LIC:=$(module_license_metadata)
+ALL_TARGETS.$(my_coverage_output).META_LIC:=$(module_license_metadata)
+
 # Running the coverage will always generate the report.
 $(my_target): $(my_coverage_output)
 
diff --git a/common/robolectric/3.6.2/robotest-internal.mk b/common/robolectric/3.6.2/robotest-internal.mk
index 746d9f4..81eebd0 100644
--- a/common/robolectric/3.6.2/robotest-internal.mk
+++ b/common/robolectric/3.6.2/robotest-internal.mk
@@ -12,6 +12,9 @@
 my_target_output := $(intermediates)/$(my_filename_stem)-output.txt
 my_target_retval := $(intermediates)/$(my_filename_stem)-retval.txt
 
+ALL_TARGETS.$(my_target_output).META_LIC:=$(module_license_metadata)
+ALL_TARGETS.$(my_target_xml).META_LIC:=$(module_license_metadata)
+
 # We should always re-run the tests, even if nothing has changed.
 # So until the build system has a dedicated "no cache" option, claim
 # to write a file that is never produced.
diff --git a/common/robolectric/4.3.1/report-internal.mk b/common/robolectric/4.3.1/report-internal.mk
index 4989632..e8713e7 100644
--- a/common/robolectric/4.3.1/report-internal.mk
+++ b/common/robolectric/4.3.1/report-internal.mk
@@ -40,6 +40,9 @@
     $(my_coverage_output_zip):robotests-coverage/$(LOCAL_MODULE)/robolectric-html-coverage.zip \
     $(my_coverage_output):robotests-coverage/$(LOCAL_MODULE)/robolectric-coverage.xml)
 
+ALL_TARGETS.$(my_coverage_output_zip).META_LIC:=$(module_license_metadata)
+ALL_TARGETS.$(my_coverage_output).META_LIC:=$(module_license_metadata)
+
 # Running the coverage will always generate the report.
 $(my_target): $(my_coverage_output)
 
diff --git a/common/robolectric/4.3.1/robotest-internal.mk b/common/robolectric/4.3.1/robotest-internal.mk
index f8e4470..9bd9b5d 100644
--- a/common/robolectric/4.3.1/robotest-internal.mk
+++ b/common/robolectric/4.3.1/robotest-internal.mk
@@ -12,6 +12,9 @@
 my_target_output := $(intermediates)/$(my_filename_stem)-output.txt
 my_target_retval := $(intermediates)/$(my_filename_stem)-retval.txt
 
+ALL_TARGETS.$(my_target_output).META_LIC:=$(module_license_metadata)
+ALL_TARGETS.$(my_target_xml).META_LIC:=$(module_license_metadata)
+
 # We should always re-run the tests, even if nothing has changed.
 # So until the build system has a dedicated "no cache" option, claim
 # to write a file that is never produced.
diff --git a/common/robolectric/4.4/report-internal.mk b/common/robolectric/4.4/report-internal.mk
index 4989632..e8713e7 100644
--- a/common/robolectric/4.4/report-internal.mk
+++ b/common/robolectric/4.4/report-internal.mk
@@ -40,6 +40,9 @@
     $(my_coverage_output_zip):robotests-coverage/$(LOCAL_MODULE)/robolectric-html-coverage.zip \
     $(my_coverage_output):robotests-coverage/$(LOCAL_MODULE)/robolectric-coverage.xml)
 
+ALL_TARGETS.$(my_coverage_output_zip).META_LIC:=$(module_license_metadata)
+ALL_TARGETS.$(my_coverage_output).META_LIC:=$(module_license_metadata)
+
 # Running the coverage will always generate the report.
 $(my_target): $(my_coverage_output)
 
diff --git a/common/robolectric/4.4/robotest-internal.mk b/common/robolectric/4.4/robotest-internal.mk
index f8e4470..9bd9b5d 100644
--- a/common/robolectric/4.4/robotest-internal.mk
+++ b/common/robolectric/4.4/robotest-internal.mk
@@ -12,6 +12,9 @@
 my_target_output := $(intermediates)/$(my_filename_stem)-output.txt
 my_target_retval := $(intermediates)/$(my_filename_stem)-retval.txt
 
+ALL_TARGETS.$(my_target_output).META_LIC:=$(module_license_metadata)
+ALL_TARGETS.$(my_target_xml).META_LIC:=$(module_license_metadata)
+
 # We should always re-run the tests, even if nothing has changed.
 # So until the build system has a dedicated "no cache" option, claim
 # to write a file that is never produced.
diff --git a/common/robolectric/4.5.1/report-internal.mk b/common/robolectric/4.5.1/report-internal.mk
index 4989632..e8713e7 100644
--- a/common/robolectric/4.5.1/report-internal.mk
+++ b/common/robolectric/4.5.1/report-internal.mk
@@ -40,6 +40,9 @@
     $(my_coverage_output_zip):robotests-coverage/$(LOCAL_MODULE)/robolectric-html-coverage.zip \
     $(my_coverage_output):robotests-coverage/$(LOCAL_MODULE)/robolectric-coverage.xml)
 
+ALL_TARGETS.$(my_coverage_output_zip).META_LIC:=$(module_license_metadata)
+ALL_TARGETS.$(my_coverage_output).META_LIC:=$(module_license_metadata)
+
 # Running the coverage will always generate the report.
 $(my_target): $(my_coverage_output)
 
diff --git a/common/robolectric/4.5.1/robotest-internal.mk b/common/robolectric/4.5.1/robotest-internal.mk
index 58a206a..a6c8910 100644
--- a/common/robolectric/4.5.1/robotest-internal.mk
+++ b/common/robolectric/4.5.1/robotest-internal.mk
@@ -12,6 +12,9 @@
 my_target_output := $(intermediates)/$(my_filename_stem)-output.txt
 my_target_retval := $(intermediates)/$(my_filename_stem)-retval.txt
 
+ALL_TARGETS.$(my_target_output).META_LIC:=$(module_license_metadata)
+ALL_TARGETS.$(my_target_xml).META_LIC:=$(module_license_metadata)
+
 # We should always re-run the tests, even if nothing has changed.
 # So until the build system has a dedicated "no cache" option, claim
 # to write a file that is never produced.
diff --git a/common/winscope/winscope.html b/common/winscope/winscope.html
index 2c79c18..e46fcc0 100644
--- a/common/winscope/winscope.html
+++ b/common/winscope/winscope.html
@@ -54289,9 +54289,9 @@
 /***/ "xOOu":
 /***/ (function(module, exports, __webpack_require__) {
 
-/* WEBPACK VAR INJECTION */(function(global, Buffer, setImmediate) {var require;var require;/*!
+/* WEBPACK VAR INJECTION */(function(Buffer, global, setImmediate) {var require;var require;/*!
 
-JSZip v3.6.0 - A JavaScript class for generating and reading zip files
+JSZip v3.7.1 - A JavaScript class for generating and reading zip files
 <http://stuartk.com/jszip>
 
 (c) 2009-2016 Stuart Knightley <stuart [at] stuartk.com>
@@ -54301,8 +54301,8 @@
 https://github.com/nodeca/pako/blob/master/LICENSE
 */
 
-!function(e){if(true)module.exports=e();else {}}(function(){return function s(a,o,u){function h(r,e){if(!o[r]){if(!a[r]){var t="function"==typeof require&&require;if(!e&&t)return require(r,!0);if(f)return f(r,!0);var n=new Error("Cannot find module '"+r+"'");throw n.code="MODULE_NOT_FOUND",n}var i=o[r]={exports:{}};a[r][0].call(i.exports,function(e){var t=a[r][1][e];return h(t||e)},i,i.exports,s,a,o,u)}return o[r].exports}for(var f="function"==typeof require&&require,e=0;e<u.length;e++)h(u[e]);return h}({1:[function(l,t,n){(function(r){!function(e){"object"==typeof n&&void 0!==t?t.exports=e():("undefined"!=typeof window?window:void 0!==r?r:"undefined"!=typeof self?self:this).JSZip=e()}(function(){return function s(a,o,u){function h(t,e){if(!o[t]){if(!a[t]){var r="function"==typeof l&&l;if(!e&&r)return r(t,!0);if(f)return f(t,!0);var n=new Error("Cannot find module '"+t+"'");throw n.code="MODULE_NOT_FOUND",n}var i=o[t]={exports:{}};a[t][0].call(i.exports,function(e){return h(a[t][1][e]||e)},i,i.exports,s,a,o,u)}return o[t].exports}for(var f="function"==typeof l&&l,e=0;e<u.length;e++)h(u[e]);return h}({1:[function(l,t,n){(function(r){!function(e){"object"==typeof n&&void 0!==t?t.exports=e():("undefined"!=typeof window?window:void 0!==r?r:"undefined"!=typeof self?self:this).JSZip=e()}(function(){return function s(a,o,u){function h(t,e){if(!o[t]){if(!a[t]){var r="function"==typeof l&&l;if(!e&&r)return r(t,!0);if(f)return f(t,!0);var n=new Error("Cannot find module '"+t+"'");throw n.code="MODULE_NOT_FOUND",n}var i=o[t]={exports:{}};a[t][0].call(i.exports,function(e){return h(a[t][1][e]||e)},i,i.exports,s,a,o,u)}return o[t].exports}for(var f="function"==typeof l&&l,e=0;e<u.length;e++)h(u[e]);return h}({1:[function(l,t,n){(function(r){!function(e){"object"==typeof n&&void 0!==t?t.exports=e():("undefined"!=typeof window?window:void 0!==r?r:"undefined"!=typeof self?self:this).JSZip=e()}(function(){return function s(a,o,u){function h(t,e){if(!o[t]){if(!a[t]){var r="function"==typeof l&&l;if(!e&&r)return r(t,!0);if(f)return f(t,!0);var n=new Error("Cannot find module '"+t+"'");throw n.code="MODULE_NOT_FOUND",n}var i=o[t]={exports:{}};a[t][0].call(i.exports,function(e){return h(a[t][1][e]||e)},i,i.exports,s,a,o,u)}return o[t].exports}for(var f="function"==typeof l&&l,e=0;e<u.length;e++)h(u[e]);return h}({1:[function(l,t,n){(function(r){!function(e){"object"==typeof n&&void 0!==t?t.exports=e():("undefined"!=typeof window?window:void 0!==r?r:"undefined"!=typeof self?self:this).JSZip=e()}(function(){return function s(a,o,u){function h(t,e){if(!o[t]){if(!a[t]){var r="function"==typeof l&&l;if(!e&&r)return r(t,!0);if(f)return f(t,!0);var n=new Error("Cannot find module '"+t+"'");throw n.code="MODULE_NOT_FOUND",n}var i=o[t]={exports:{}};a[t][0].call(i.exports,function(e){return h(a[t][1][e]||e)},i,i.exports,s,a,o,u)}return o[t].exports}for(var f="function"==typeof l&&l,e=0;e<u.length;e++)h(u[e]);return h}({1:[function(l,t,n){(function(r){!function(e){"object"==typeof n&&void 0!==t?t.exports=e():("undefined"!=typeof window?window:void 0!==r?r:"undefined"!=typeof self?self:this).JSZip=e()}(function(){return function s(a,o,u){function h(t,e){if(!o[t]){if(!a[t]){var r="function"==typeof l&&l;if(!e&&r)return r(t,!0);if(f)return f(t,!0);var n=new Error("Cannot find module '"+t+"'");throw n.code="MODULE_NOT_FOUND",n}var i=o[t]={exports:{}};a[t][0].call(i.exports,function(e){return h(a[t][1][e]||e)},i,i.exports,s,a,o,u)}return o[t].exports}for(var f="function"==typeof l&&l,e=0;e<u.length;e++)h(u[e]);return h}({1:[function(e,t,r){"use strict";var c=e("./utils"),l=e("./support"),p="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";r.encode=function(e){for(var t,r,n,i,s,a,o,u=[],h=0,f=e.length,l=f,d="string"!==c.getTypeOf(e);h<e.length;)l=f-h,n=d?(t=e[h++],r=h<f?e[h++]:0,h<f?e[h++]:0):(t=e.charCodeAt(h++),r=h<f?e.charCodeAt(h++):0,h<f?e.charCodeAt(h++):0),i=t>>2,s=(3&t)<<4|r>>4,a=1<l?(15&r)<<2|n>>6:64,o=2<l?63&n:64,u.push(p.charAt(i)+p.charAt(s)+p.charAt(a)+p.charAt(o));return u.join("")},r.decode=function(e){var t,r,n,i,s,a,o=0,u=0;if("data:"===e.substr(0,"data:".length))throw new Error("Invalid base64 input, it looks like a data url.");var h,f=3*(e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"")).length/4;if(e.charAt(e.length-1)===p.charAt(64)&&f--,e.charAt(e.length-2)===p.charAt(64)&&f--,f%1!=0)throw new Error("Invalid base64 input, bad content length.");for(h=l.uint8array?new Uint8Array(0|f):new Array(0|f);o<e.length;)t=p.indexOf(e.charAt(o++))<<2|(i=p.indexOf(e.charAt(o++)))>>4,r=(15&i)<<4|(s=p.indexOf(e.charAt(o++)))>>2,n=(3&s)<<6|(a=p.indexOf(e.charAt(o++))),h[u++]=t,64!==s&&(h[u++]=r),64!==a&&(h[u++]=n);return h}},{"./support":30,"./utils":32}],2:[function(e,t,r){"use strict";var n=e("./external"),i=e("./stream/DataWorker"),s=e("./stream/Crc32Probe"),a=e("./stream/DataLengthProbe");function o(e,t,r,n,i){this.compressedSize=e,this.uncompressedSize=t,this.crc32=r,this.compression=n,this.compressedContent=i}o.prototype={getContentWorker:function(){var e=new i(n.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new a("data_length")),t=this;return e.on("end",function(){if(this.streamInfo.data_length!==t.uncompressedSize)throw new Error("Bug : uncompressed data size mismatch")}),e},getCompressedWorker:function(){return new i(n.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize",this.compressedSize).withStreamInfo("uncompressedSize",this.uncompressedSize).withStreamInfo("crc32",this.crc32).withStreamInfo("compression",this.compression)}},o.createWorkerFrom=function(e,t,r){return e.pipe(new s).pipe(new a("uncompressedSize")).pipe(t.compressWorker(r)).pipe(new a("compressedSize")).withStreamInfo("compression",t)},t.exports=o},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(e,t,r){"use strict";var n=e("./stream/GenericWorker");r.STORE={magic:"\0\0",compressWorker:function(e){return new n("STORE compression")},uncompressWorker:function(){return new n("STORE decompression")}},r.DEFLATE=e("./flate")},{"./flate":7,"./stream/GenericWorker":28}],4:[function(e,t,r){"use strict";var n=e("./utils"),a=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t){return void 0!==e&&e.length?"string"!==n.getTypeOf(e)?function(e,t,r){var n=a,i=0+r;e^=-1;for(var s=0;s<i;s++)e=e>>>8^n[255&(e^t[s])];return-1^e}(0|t,e,e.length):function(e,t,r){var n=a,i=0+r;e^=-1;for(var s=0;s<i;s++)e=e>>>8^n[255&(e^t.charCodeAt(s))];return-1^e}(0|t,e,e.length):0}},{"./utils":32}],5:[function(e,t,r){"use strict";r.base64=!1,r.binary=!1,r.dir=!1,r.createFolders=!0,r.date=null,r.compression=null,r.compressionOptions=null,r.comment=null,r.unixPermissions=null,r.dosPermissions=null},{}],6:[function(e,t,r){"use strict";var n;n="undefined"!=typeof Promise?Promise:e("lie"),t.exports={Promise:n}},{lie:37}],7:[function(e,t,r){"use strict";var n="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Uint32Array,i=e("pako"),s=e("./utils"),a=e("./stream/GenericWorker"),o=n?"uint8array":"array";function u(e,t){a.call(this,"FlateWorker/"+e),this._pako=null,this._pakoAction=e,this._pakoOptions=t,this.meta={}}r.magic="\b\0",s.inherits(u,a),u.prototype.processChunk=function(e){this.meta=e.meta,null===this._pako&&this._createPako(),this._pako.push(s.transformTo(o,e.data),!1)},u.prototype.flush=function(){a.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},u.prototype.cleanUp=function(){a.prototype.cleanUp.call(this),this._pako=null},u.prototype._createPako=function(){this._pako=new i[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var t=this;this._pako.onData=function(e){t.push({data:e,meta:t.meta})}},r.compressWorker=function(e){return new u("Deflate",e)},r.uncompressWorker=function(){return new u("Inflate",{})}},{"./stream/GenericWorker":28,"./utils":32,pako:38}],8:[function(e,t,r){"use strict";function I(e,t){var r,n="";for(r=0;r<t;r++)n+=String.fromCharCode(255&e),e>>>=8;return n}function i(e,t,r,n,i,s){var a,o,u=e.file,h=e.compression,f=s!==B.utf8encode,l=O.transformTo("string",s(u.name)),d=O.transformTo("string",B.utf8encode(u.name)),c=u.comment,p=O.transformTo("string",s(c)),m=O.transformTo("string",B.utf8encode(c)),_=d.length!==u.name.length,g=m.length!==c.length,v="",b="",w="",y=u.dir,k=u.date,x={crc32:0,compressedSize:0,uncompressedSize:0};t&&!r||(x.crc32=e.crc32,x.compressedSize=e.compressedSize,x.uncompressedSize=e.uncompressedSize);var S=0;t&&(S|=8),f||!_&&!g||(S|=2048);var z,E=0,C=0;y&&(E|=16),"UNIX"===i?(C=798,E|=((z=u.unixPermissions)||(z=y?16893:33204),(65535&z)<<16)):(C=20,E|=63&(u.dosPermissions||0)),a=k.getUTCHours(),a<<=6,a|=k.getUTCMinutes(),a<<=5,a|=k.getUTCSeconds()/2,o=k.getUTCFullYear()-1980,o<<=4,o|=k.getUTCMonth()+1,o<<=5,o|=k.getUTCDate(),_&&(v+="up"+I((b=I(1,1)+I(T(l),4)+d).length,2)+b),g&&(v+="uc"+I((w=I(1,1)+I(T(p),4)+m).length,2)+w);var A="";return A+="\n\0",A+=I(S,2),A+=h.magic,A+=I(a,2),A+=I(o,2),A+=I(x.crc32,4),A+=I(x.compressedSize,4),A+=I(x.uncompressedSize,4),A+=I(l.length,2),A+=I(v.length,2),{fileRecord:R.LOCAL_FILE_HEADER+A+l+v,dirRecord:R.CENTRAL_FILE_HEADER+I(C,2)+A+I(p.length,2)+"\0\0\0\0"+I(E,4)+I(n,4)+l+v+p}}var O=e("../utils"),s=e("../stream/GenericWorker"),B=e("../utf8"),T=e("../crc32"),R=e("../signature");function n(e,t,r,n){s.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=t,this.zipPlatform=r,this.encodeFileName=n,this.streamFiles=e,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}O.inherits(n,s),n.prototype.push=function(e){var t=e.meta.percent||0,r=this.entriesCount,n=this._sources.length;this.accumulate?this.contentBuffer.push(e):(this.bytesWritten+=e.data.length,s.prototype.push.call(this,{data:e.data,meta:{currentFile:this.currentFile,percent:r?(t+100*(r-n-1))/r:100}}))},n.prototype.openedSource=function(e){this.currentSourceOffset=this.bytesWritten,this.currentFile=e.file.name;var t=this.streamFiles&&!e.file.dir;if(t){var r=i(e,t,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:r.fileRecord,meta:{percent:0}})}else this.accumulate=!0},n.prototype.closedSource=function(e){this.accumulate=!1;var t,r=this.streamFiles&&!e.file.dir,n=i(e,r,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(n.dirRecord),r)this.push({data:(t=e,R.DATA_DESCRIPTOR+I(t.crc32,4)+I(t.compressedSize,4)+I(t.uncompressedSize,4)),meta:{percent:100}});else for(this.push({data:n.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},n.prototype.flush=function(){for(var e=this.bytesWritten,t=0;t<this.dirRecords.length;t++)this.push({data:this.dirRecords[t],meta:{percent:100}});var r,n,i,s,a,o,u=this.bytesWritten-e,h=(r=this.dirRecords.length,n=u,i=e,s=this.zipComment,a=this.encodeFileName,o=O.transformTo("string",a(s)),R.CENTRAL_DIRECTORY_END+"\0\0\0\0"+I(r,2)+I(r,2)+I(n,4)+I(i,4)+I(o.length,2)+o);this.push({data:h,meta:{percent:100}})},n.prototype.prepareNextSource=function(){this.previous=this._sources.shift(),this.openedSource(this.previous.streamInfo),this.isPaused?this.previous.pause():this.previous.resume()},n.prototype.registerPrevious=function(e){this._sources.push(e);var t=this;return e.on("data",function(e){t.processChunk(e)}),e.on("end",function(){t.closedSource(t.previous.streamInfo),t._sources.length?t.prepareNextSource():t.end()}),e.on("error",function(e){t.error(e)}),this},n.prototype.resume=function(){return!!s.prototype.resume.call(this)&&(!this.previous&&this._sources.length?(this.prepareNextSource(),!0):this.previous||this._sources.length||this.generatedError?void 0:(this.end(),!0))},n.prototype.error=function(e){var t=this._sources;if(!s.prototype.error.call(this,e))return!1;for(var r=0;r<t.length;r++)try{t[r].error(e)}catch(e){}return!0},n.prototype.lock=function(){s.prototype.lock.call(this);for(var e=this._sources,t=0;t<e.length;t++)e[t].lock()},t.exports=n},{"../crc32":4,"../signature":23,"../stream/GenericWorker":28,"../utf8":31,"../utils":32}],9:[function(e,t,r){"use strict";var h=e("../compressions"),n=e("./ZipFileWorker");r.generateWorker=function(e,a,t){var o=new n(a.streamFiles,t,a.platform,a.encodeFileName),u=0;try{e.forEach(function(e,t){u++;var r=function(e,t){var r=e||t,n=h[r];if(!n)throw new Error(r+" is not a valid compression method !");return n}(t.options.compression,a.compression),n=t.options.compressionOptions||a.compressionOptions||{},i=t.dir,s=t.date;t._compressWorker(r,n).withStreamInfo("file",{name:e,dir:i,date:s,comment:t.comment||"",unixPermissions:t.unixPermissions,dosPermissions:t.dosPermissions}).pipe(o)}),o.entriesCount=u}catch(e){o.error(e)}return o}},{"../compressions":3,"./ZipFileWorker":8}],10:[function(e,t,r){"use strict";function n(){if(!(this instanceof n))return new n;if(arguments.length)throw new Error("The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.");this.files={},this.comment=null,this.root="",this.clone=function(){var e=new n;for(var t in this)"function"!=typeof this[t]&&(e[t]=this[t]);return e}}(n.prototype=e("./object")).loadAsync=e("./load"),n.support=e("./support"),n.defaults=e("./defaults"),n.version="3.5.0",n.loadAsync=function(e,t){return(new n).loadAsync(e,t)},n.external=e("./external"),t.exports=n},{"./defaults":5,"./external":6,"./load":11,"./object":15,"./support":30}],11:[function(e,t,r){"use strict";var n=e("./utils"),i=e("./external"),o=e("./utf8"),u=e("./zipEntries"),s=e("./stream/Crc32Probe"),h=e("./nodejsUtils");function f(n){return new i.Promise(function(e,t){var r=n.decompressed.getContentWorker().pipe(new s);r.on("error",function(e){t(e)}).on("end",function(){r.streamInfo.crc32!==n.decompressed.crc32?t(new Error("Corrupted zip : CRC32 mismatch")):e()}).resume()})}t.exports=function(e,s){var a=this;return s=n.extend(s||{},{base64:!1,checkCRC32:!1,optimizedBinaryString:!1,createFolders:!1,decodeFileName:o.utf8decode}),h.isNode&&h.isStream(e)?i.Promise.reject(new Error("JSZip can't accept a stream when loading a zip file.")):n.prepareContent("the loaded zip file",e,!0,s.optimizedBinaryString,s.base64).then(function(e){var t=new u(s);return t.load(e),t}).then(function(e){var t=[i.Promise.resolve(e)],r=e.files;if(s.checkCRC32)for(var n=0;n<r.length;n++)t.push(f(r[n]));return i.Promise.all(t)}).then(function(e){for(var t=e.shift(),r=t.files,n=0;n<r.length;n++){var i=r[n];a.file(i.fileNameStr,i.decompressed,{binary:!0,optimizedBinaryString:!0,date:i.date,dir:i.dir,comment:i.fileCommentStr.length?i.fileCommentStr:null,unixPermissions:i.unixPermissions,dosPermissions:i.dosPermissions,createFolders:s.createFolders})}return t.zipComment.length&&(a.comment=t.zipComment),a})}},{"./external":6,"./nodejsUtils":14,"./stream/Crc32Probe":25,"./utf8":31,"./utils":32,"./zipEntries":33}],12:[function(e,t,r){"use strict";var n=e("../utils"),i=e("../stream/GenericWorker");function s(e,t){i.call(this,"Nodejs stream input adapter for "+e),this._upstreamEnded=!1,this._bindStream(t)}n.inherits(s,i),s.prototype._bindStream=function(e){var t=this;(this._stream=e).pause(),e.on("data",function(e){t.push({data:e,meta:{percent:0}})}).on("error",function(e){t.isPaused?this.generatedError=e:t.error(e)}).on("end",function(){t.isPaused?t._upstreamEnded=!0:t.end()})},s.prototype.pause=function(){return!!i.prototype.pause.call(this)&&(this._stream.pause(),!0)},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(this._upstreamEnded?this.end():this._stream.resume(),!0)},t.exports=s},{"../stream/GenericWorker":28,"../utils":32}],13:[function(e,t,r){"use strict";var i=e("readable-stream").Readable;function n(e,t,r){i.call(this,t),this._helper=e;var n=this;e.on("data",function(e,t){n.push(e)||n._helper.pause(),r&&r(t)}).on("error",function(e){n.emit("error",e)}).on("end",function(){n.push(null)})}e("../utils").inherits(n,i),n.prototype._read=function(){this._helper.resume()},t.exports=n},{"../utils":32,"readable-stream":16}],14:[function(e,t,r){"use strict";t.exports={isNode:"undefined"!=typeof Buffer,newBufferFrom:function(e,t){if(Buffer.from&&Buffer.from!==Uint8Array.from)return Buffer.from(e,t);if("number"==typeof e)throw new Error('The "data" argument must not be a number');return new Buffer(e,t)},allocBuffer:function(e){if(Buffer.alloc)return Buffer.alloc(e);var t=new Buffer(e);return t.fill(0),t},isBuffer:function(e){return Buffer.isBuffer(e)},isStream:function(e){return e&&"function"==typeof e.on&&"function"==typeof e.pause&&"function"==typeof e.resume}}},{}],15:[function(e,t,r){"use strict";function s(e,t,r){var n,i=f.getTypeOf(t),s=f.extend(r||{},d);s.date=s.date||new Date,null!==s.compression&&(s.compression=s.compression.toUpperCase()),"string"==typeof s.unixPermissions&&(s.unixPermissions=parseInt(s.unixPermissions,8)),s.unixPermissions&&16384&s.unixPermissions&&(s.dir=!0),s.dosPermissions&&16&s.dosPermissions&&(s.dir=!0),s.dir&&(e=h(e)),s.createFolders&&(n=function(e){"/"===e.slice(-1)&&(e=e.substring(0,e.length-1));var t=e.lastIndexOf("/");return 0<t?e.substring(0,t):""}(e))&&g.call(this,n,!0);var a,o="string"===i&&!1===s.binary&&!1===s.base64;r&&void 0!==r.binary||(s.binary=!o),(t instanceof c&&0===t.uncompressedSize||s.dir||!t||0===t.length)&&(s.base64=!1,s.binary=!0,t="",s.compression="STORE",i="string"),a=t instanceof c||t instanceof l?t:m.isNode&&m.isStream(t)?new _(e,t):f.prepareContent(e,t,s.binary,s.optimizedBinaryString,s.base64);var u=new p(e,a,s);this.files[e]=u}function h(e){return"/"!==e.slice(-1)&&(e+="/"),e}var i=e("./utf8"),f=e("./utils"),l=e("./stream/GenericWorker"),a=e("./stream/StreamHelper"),d=e("./defaults"),c=e("./compressedObject"),p=e("./zipObject"),o=e("./generate"),m=e("./nodejsUtils"),_=e("./nodejs/NodejsStreamInputAdapter"),g=function(e,t){return t=void 0!==t?t:d.createFolders,e=h(e),this.files[e]||s.call(this,e,null,{dir:!0,createFolders:t}),this.files[e]};function u(e){return"[object RegExp]"===Object.prototype.toString.call(e)}var n={load:function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},forEach:function(e){var t,r,n;for(t in this.files)this.files.hasOwnProperty(t)&&(n=this.files[t],(r=t.slice(this.root.length,t.length))&&t.slice(0,this.root.length)===this.root&&e(r,n))},filter:function(r){var n=[];return this.forEach(function(e,t){r(e,t)&&n.push(t)}),n},file:function(e,t,r){if(1!==arguments.length)return e=this.root+e,s.call(this,e,t,r),this;if(u(e)){var n=e;return this.filter(function(e,t){return!t.dir&&n.test(e)})}var i=this.files[this.root+e];return i&&!i.dir?i:null},folder:function(r){if(!r)return this;if(u(r))return this.filter(function(e,t){return t.dir&&r.test(e)});var e=this.root+r,t=g.call(this,e),n=this.clone();return n.root=t.name,n},remove:function(r){r=this.root+r;var e=this.files[r];if(e||("/"!==r.slice(-1)&&(r+="/"),e=this.files[r]),e&&!e.dir)delete this.files[r];else for(var t=this.filter(function(e,t){return t.name.slice(0,r.length)===r}),n=0;n<t.length;n++)delete this.files[t[n].name];return this},generate:function(e){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},generateInternalStream:function(e){var t,r={};try{if((r=f.extend(e||{},{streamFiles:!1,compression:"STORE",compressionOptions:null,type:"",platform:"DOS",comment:null,mimeType:"application/zip",encodeFileName:i.utf8encode})).type=r.type.toLowerCase(),r.compression=r.compression.toUpperCase(),"binarystring"===r.type&&(r.type="string"),!r.type)throw new Error("No output type specified.");f.checkSupport(r.type),"darwin"!==r.platform&&"freebsd"!==r.platform&&"linux"!==r.platform&&"sunos"!==r.platform||(r.platform="UNIX"),"win32"===r.platform&&(r.platform="DOS");var n=r.comment||this.comment||"";t=o.generateWorker(this,r,n)}catch(e){(t=new l("error")).error(e)}return new a(t,r.type||"string",r.mimeType)},generateAsync:function(e,t){return this.generateInternalStream(e).accumulate(t)},generateNodeStream:function(e,t){return(e=e||{}).type||(e.type="nodebuffer"),this.generateInternalStream(e).toNodejsStream(t)}};t.exports=n},{"./compressedObject":2,"./defaults":5,"./generate":9,"./nodejs/NodejsStreamInputAdapter":12,"./nodejsUtils":14,"./stream/GenericWorker":28,"./stream/StreamHelper":29,"./utf8":31,"./utils":32,"./zipObject":35}],16:[function(e,t,r){t.exports=e("stream")},{stream:void 0}],17:[function(e,t,r){"use strict";var n=e("./DataReader");function i(e){n.call(this,e);for(var t=0;t<this.data.length;t++)e[t]=255&e[t]}e("../utils").inherits(i,n),i.prototype.byteAt=function(e){return this.data[this.zero+e]},i.prototype.lastIndexOfSignature=function(e){for(var t=e.charCodeAt(0),r=e.charCodeAt(1),n=e.charCodeAt(2),i=e.charCodeAt(3),s=this.length-4;0<=s;--s)if(this.data[s]===t&&this.data[s+1]===r&&this.data[s+2]===n&&this.data[s+3]===i)return s-this.zero;return-1},i.prototype.readAndCheckSignature=function(e){var t=e.charCodeAt(0),r=e.charCodeAt(1),n=e.charCodeAt(2),i=e.charCodeAt(3),s=this.readData(4);return t===s[0]&&r===s[1]&&n===s[2]&&i===s[3]},i.prototype.readData=function(e){if(this.checkOffset(e),0===e)return[];var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{"../utils":32,"./DataReader":18}],18:[function(e,t,r){"use strict";var n=e("../utils");function i(e){this.data=e,this.length=e.length,this.index=0,this.zero=0}i.prototype={checkOffset:function(e){this.checkIndex(this.index+e)},checkIndex:function(e){if(this.length<this.zero+e||e<0)throw new Error("End of data reached (data length = "+this.length+", asked index = "+e+"). Corrupted zip ?")},setIndex:function(e){this.checkIndex(e),this.index=e},skip:function(e){this.setIndex(this.index+e)},byteAt:function(e){},readInt:function(e){var t,r=0;for(this.checkOffset(e),t=this.index+e-1;t>=this.index;t--)r=(r<<8)+this.byteAt(t);return this.index+=e,r},readString:function(e){return n.transformTo("string",this.readData(e))},readData:function(e){},lastIndexOfSignature:function(e){},readAndCheckSignature:function(e){},readDate:function(){var e=this.readInt(4);return new Date(Date.UTC(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1))}},t.exports=i},{"../utils":32}],19:[function(e,t,r){"use strict";var n=e("./Uint8ArrayReader");function i(e){n.call(this,e)}e("../utils").inherits(i,n),i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(e,t,r){"use strict";var n=e("./DataReader");function i(e){n.call(this,e)}e("../utils").inherits(i,n),i.prototype.byteAt=function(e){return this.data.charCodeAt(this.zero+e)},i.prototype.lastIndexOfSignature=function(e){return this.data.lastIndexOf(e)-this.zero},i.prototype.readAndCheckSignature=function(e){return e===this.readData(4)},i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{"../utils":32,"./DataReader":18}],21:[function(e,t,r){"use strict";var n=e("./ArrayReader");function i(e){n.call(this,e)}e("../utils").inherits(i,n),i.prototype.readData=function(e){if(this.checkOffset(e),0===e)return new Uint8Array(0);var t=this.data.subarray(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{"../utils":32,"./ArrayReader":17}],22:[function(e,t,r){"use strict";var n=e("../utils"),i=e("../support"),s=e("./ArrayReader"),a=e("./StringReader"),o=e("./NodeBufferReader"),u=e("./Uint8ArrayReader");t.exports=function(e){var t=n.getTypeOf(e);return n.checkSupport(t),"string"!==t||i.uint8array?"nodebuffer"===t?new o(e):i.uint8array?new u(n.transformTo("uint8array",e)):new s(n.transformTo("array",e)):new a(e)}},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(e,t,r){"use strict";r.LOCAL_FILE_HEADER="PK",r.CENTRAL_FILE_HEADER="PK",r.CENTRAL_DIRECTORY_END="PK",r.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK",r.ZIP64_CENTRAL_DIRECTORY_END="PK",r.DATA_DESCRIPTOR="PK\b"},{}],24:[function(e,t,r){"use strict";var n=e("./GenericWorker"),i=e("../utils");function s(e){n.call(this,"ConvertWorker to "+e),this.destType=e}i.inherits(s,n),s.prototype.processChunk=function(e){this.push({data:i.transformTo(this.destType,e.data),meta:e.meta})},t.exports=s},{"../utils":32,"./GenericWorker":28}],25:[function(e,t,r){"use strict";var n=e("./GenericWorker"),i=e("../crc32");function s(){n.call(this,"Crc32Probe"),this.withStreamInfo("crc32",0)}e("../utils").inherits(s,n),s.prototype.processChunk=function(e){this.streamInfo.crc32=i(e.data,this.streamInfo.crc32||0),this.push(e)},t.exports=s},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(e,t,r){"use strict";var n=e("../utils"),i=e("./GenericWorker");function s(e){i.call(this,"DataLengthProbe for "+e),this.propName=e,this.withStreamInfo(e,0)}n.inherits(s,i),s.prototype.processChunk=function(e){if(e){var t=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=t+e.data.length}i.prototype.processChunk.call(this,e)},t.exports=s},{"../utils":32,"./GenericWorker":28}],27:[function(e,t,r){"use strict";var n=e("../utils"),i=e("./GenericWorker");function s(e){i.call(this,"DataWorker");var t=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type="",this._tickScheduled=!1,e.then(function(e){t.dataIsReady=!0,t.data=e,t.max=e&&e.length||0,t.type=n.getTypeOf(e),t.isPaused||t._tickAndRepeat()},function(e){t.error(e)})}n.inherits(s,i),s.prototype.cleanUp=function(){i.prototype.cleanUp.call(this),this.data=null},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,n.delay(this._tickAndRepeat,[],this)),!0)},s.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(n.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},s.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var e=null,t=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case"string":e=this.data.substring(this.index,t);break;case"uint8array":e=this.data.subarray(this.index,t);break;case"array":case"nodebuffer":e=this.data.slice(this.index,t)}return this.index=t,this.push({data:e,meta:{percent:this.max?this.index/this.max*100:0}})},t.exports=s},{"../utils":32,"./GenericWorker":28}],28:[function(e,t,r){"use strict";function n(e){this.name=e||"default",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}n.prototype={push:function(e){this.emit("data",e)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit("end"),this.cleanUp(),this.isFinished=!0}catch(e){this.emit("error",e)}return!0},error:function(e){return!this.isFinished&&(this.isPaused?this.generatedError=e:(this.isFinished=!0,this.emit("error",e),this.previous&&this.previous.error(e),this.cleanUp()),!0)},on:function(e,t){return this._listeners[e].push(t),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(e,t){if(this._listeners[e])for(var r=0;r<this._listeners[e].length;r++)this._listeners[e][r].call(this,t)},pipe:function(e){return e.registerPrevious(this)},registerPrevious:function(e){if(this.isLocked)throw new Error("The stream '"+this+"' has already been used.");this.streamInfo=e.streamInfo,this.mergeStreamInfo(),this.previous=e;var t=this;return e.on("data",function(e){t.processChunk(e)}),e.on("end",function(){t.end()}),e.on("error",function(e){t.error(e)}),this},pause:function(){return!this.isPaused&&!this.isFinished&&(this.isPaused=!0,this.previous&&this.previous.pause(),!0)},resume:function(){if(!this.isPaused||this.isFinished)return!1;var e=this.isPaused=!1;return this.generatedError&&(this.error(this.generatedError),e=!0),this.previous&&this.previous.resume(),!e},flush:function(){},processChunk:function(e){this.push(e)},withStreamInfo:function(e,t){return this.extraStreamInfo[e]=t,this.mergeStreamInfo(),this},mergeStreamInfo:function(){for(var e in this.extraStreamInfo)this.extraStreamInfo.hasOwnProperty(e)&&(this.streamInfo[e]=this.extraStreamInfo[e])},lock:function(){if(this.isLocked)throw new Error("The stream '"+this+"' has already been used.");this.isLocked=!0,this.previous&&this.previous.lock()},toString:function(){var e="Worker "+this.name;return this.previous?this.previous+" -> "+e:e}},t.exports=n},{}],29:[function(e,t,r){"use strict";var h=e("../utils"),i=e("./ConvertWorker"),s=e("./GenericWorker"),f=e("../base64"),n=e("../support"),a=e("../external"),o=null;if(n.nodestream)try{o=e("../nodejs/NodejsStreamOutputAdapter")}catch(e){}function u(e,t,r){var n=t;switch(t){case"blob":case"arraybuffer":n="uint8array";break;case"base64":n="string"}try{this._internalType=n,this._outputType=t,this._mimeType=r,h.checkSupport(n),this._worker=e.pipe(new i(n)),e.lock()}catch(e){this._worker=new s("error"),this._worker.error(e)}}u.prototype={accumulate:function(e){return o=this,u=e,new a.Promise(function(t,r){var n=[],i=o._internalType,s=o._outputType,a=o._mimeType;o.on("data",function(e,t){n.push(e),u&&u(t)}).on("error",function(e){n=[],r(e)}).on("end",function(){try{var e=function(e,t,r){switch(e){case"blob":return h.newBlob(h.transformTo("arraybuffer",t),r);case"base64":return f.encode(t);default:return h.transformTo(e,t)}}(s,function(e,t){var r,n=0,i=null,s=0;for(r=0;r<t.length;r++)s+=t[r].length;switch(e){case"string":return t.join("");case"array":return Array.prototype.concat.apply([],t);case"uint8array":for(i=new Uint8Array(s),r=0;r<t.length;r++)i.set(t[r],n),n+=t[r].length;return i;case"nodebuffer":return Buffer.concat(t);default:throw new Error("concat : unsupported type '"+e+"'")}}(i,n),a);t(e)}catch(e){r(e)}n=[]}).resume()});var o,u},on:function(e,t){var r=this;return"data"===e?this._worker.on(e,function(e){t.call(r,e.data,e.meta)}):this._worker.on(e,function(){h.delay(t,arguments,r)}),this},resume:function(){return h.delay(this._worker.resume,[],this._worker),this},pause:function(){return this._worker.pause(),this},toNodejsStream:function(e){if(h.checkSupport("nodestream"),"nodebuffer"!==this._outputType)throw new Error(this._outputType+" is not supported by this method");return new o(this,{objectMode:"nodebuffer"!==this._outputType},e)}},t.exports=u},{"../base64":1,"../external":6,"../nodejs/NodejsStreamOutputAdapter":13,"../support":30,"../utils":32,"./ConvertWorker":24,"./GenericWorker":28}],30:[function(e,t,r){"use strict";if(r.base64=!0,r.array=!0,r.string=!0,r.arraybuffer="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof Uint8Array,r.nodebuffer="undefined"!=typeof Buffer,r.uint8array="undefined"!=typeof Uint8Array,"undefined"==typeof ArrayBuffer)r.blob=!1;else{var n=new ArrayBuffer(0);try{r.blob=0===new Blob([n],{type:"application/zip"}).size}catch(e){try{var i=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);i.append(n),r.blob=0===i.getBlob("application/zip").size}catch(e){r.blob=!1}}}try{r.nodestream=!!e("readable-stream").Readable}catch(e){r.nodestream=!1}},{"readable-stream":16}],31:[function(e,t,s){"use strict";for(var o=e("./utils"),u=e("./support"),r=e("./nodejsUtils"),n=e("./stream/GenericWorker"),h=new Array(256),i=0;i<256;i++)h[i]=252<=i?6:248<=i?5:240<=i?4:224<=i?3:192<=i?2:1;function a(){n.call(this,"utf-8 decode"),this.leftOver=null}function f(){n.call(this,"utf-8 encode")}h[254]=h[254]=1,s.utf8encode=function(e){return u.nodebuffer?r.newBufferFrom(e,"utf-8"):function(e){var t,r,n,i,s,a=e.length,o=0;for(i=0;i<a;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),o+=r<128?1:r<2048?2:r<65536?3:4;for(t=u.uint8array?new Uint8Array(o):new Array(o),i=s=0;s<o;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),r<128?t[s++]=r:(r<2048?t[s++]=192|r>>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t}(e)},s.utf8decode=function(e){return u.nodebuffer?o.transformTo("nodebuffer",e).toString("utf-8"):function(e){var t,r,n,i,s=e.length,a=new Array(2*s);for(t=r=0;t<s;)if((n=e[t++])<128)a[r++]=n;else if(4<(i=h[n]))a[r++]=65533,t+=i-1;else{for(n&=2===i?31:3===i?15:7;1<i&&t<s;)n=n<<6|63&e[t++],i--;1<i?a[r++]=65533:n<65536?a[r++]=n:(n-=65536,a[r++]=55296|n>>10&1023,a[r++]=56320|1023&n)}return a.length!==r&&(a.subarray?a=a.subarray(0,r):a.length=r),o.applyFromCharCode(a)}(e=o.transformTo(u.uint8array?"uint8array":"array",e))},o.inherits(a,n),a.prototype.processChunk=function(e){var t=o.transformTo(u.uint8array?"uint8array":"array",e.data);if(this.leftOver&&this.leftOver.length){if(u.uint8array){var r=t;(t=new Uint8Array(r.length+this.leftOver.length)).set(this.leftOver,0),t.set(r,this.leftOver.length)}else t=this.leftOver.concat(t);this.leftOver=null}var n=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+h[e[r]]>t?r:t}(t),i=t;n!==t.length&&(u.uint8array?(i=t.subarray(0,n),this.leftOver=t.subarray(n,t.length)):(i=t.slice(0,n),this.leftOver=t.slice(n,t.length))),this.push({data:s.utf8decode(i),meta:e.meta})},a.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:s.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},s.Utf8DecodeWorker=a,o.inherits(f,n),f.prototype.processChunk=function(e){this.push({data:s.utf8encode(e.data),meta:e.meta})},s.Utf8EncodeWorker=f},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(e,t,o){"use strict";var u=e("./support"),h=e("./base64"),r=e("./nodejsUtils"),n=e("set-immediate-shim"),f=e("./external");function i(e){return e}function l(e,t){for(var r=0;r<e.length;++r)t[r]=255&e.charCodeAt(r);return t}o.newBlob=function(t,r){o.checkSupport("blob");try{return new Blob([t],{type:r})}catch(e){try{var n=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);return n.append(t),n.getBlob(r)}catch(e){throw new Error("Bug : can't construct the Blob.")}}};var s={stringifyByChunk:function(e,t,r){var n=[],i=0,s=e.length;if(s<=r)return String.fromCharCode.apply(null,e);for(;i<s;)"array"===t||"nodebuffer"===t?n.push(String.fromCharCode.apply(null,e.slice(i,Math.min(i+r,s)))):n.push(String.fromCharCode.apply(null,e.subarray(i,Math.min(i+r,s)))),i+=r;return n.join("")},stringifyByChar:function(e){for(var t="",r=0;r<e.length;r++)t+=String.fromCharCode(e[r]);return t},applyCanBeUsed:{uint8array:function(){try{return u.uint8array&&1===String.fromCharCode.apply(null,new Uint8Array(1)).length}catch(e){return!1}}(),nodebuffer:function(){try{return u.nodebuffer&&1===String.fromCharCode.apply(null,r.allocBuffer(1)).length}catch(e){return!1}}()}};function a(e){var t=65536,r=o.getTypeOf(e),n=!0;if("uint8array"===r?n=s.applyCanBeUsed.uint8array:"nodebuffer"===r&&(n=s.applyCanBeUsed.nodebuffer),n)for(;1<t;)try{return s.stringifyByChunk(e,r,t)}catch(e){t=Math.floor(t/2)}return s.stringifyByChar(e)}function d(e,t){for(var r=0;r<e.length;r++)t[r]=e[r];return t}o.applyFromCharCode=a;var c={};c.string={string:i,array:function(e){return l(e,new Array(e.length))},arraybuffer:function(e){return c.string.uint8array(e).buffer},uint8array:function(e){return l(e,new Uint8Array(e.length))},nodebuffer:function(e){return l(e,r.allocBuffer(e.length))}},c.array={string:a,array:i,arraybuffer:function(e){return new Uint8Array(e).buffer},uint8array:function(e){return new Uint8Array(e)},nodebuffer:function(e){return r.newBufferFrom(e)}},c.arraybuffer={string:function(e){return a(new Uint8Array(e))},array:function(e){return d(new Uint8Array(e),new Array(e.byteLength))},arraybuffer:i,uint8array:function(e){return new Uint8Array(e)},nodebuffer:function(e){return r.newBufferFrom(new Uint8Array(e))}},c.uint8array={string:a,array:function(e){return d(e,new Array(e.length))},arraybuffer:function(e){return e.buffer},uint8array:i,nodebuffer:function(e){return r.newBufferFrom(e)}},c.nodebuffer={string:a,array:function(e){return d(e,new Array(e.length))},arraybuffer:function(e){return c.nodebuffer.uint8array(e).buffer},uint8array:function(e){return d(e,new Uint8Array(e.length))},nodebuffer:i},o.transformTo=function(e,t){if(t=t||"",!e)return t;o.checkSupport(e);var r=o.getTypeOf(t);return c[r][e](t)},o.getTypeOf=function(e){return"string"==typeof e?"string":"[object Array]"===Object.prototype.toString.call(e)?"array":u.nodebuffer&&r.isBuffer(e)?"nodebuffer":u.uint8array&&e instanceof Uint8Array?"uint8array":u.arraybuffer&&e instanceof ArrayBuffer?"arraybuffer":void 0},o.checkSupport=function(e){if(!u[e.toLowerCase()])throw new Error(e+" is not supported by this platform")},o.MAX_VALUE_16BITS=65535,o.MAX_VALUE_32BITS=-1,o.pretty=function(e){var t,r,n="";for(r=0;r<(e||"").length;r++)n+="\\x"+((t=e.charCodeAt(r))<16?"0":"")+t.toString(16).toUpperCase();return n},o.delay=function(e,t,r){n(function(){e.apply(r||null,t||[])})},o.inherits=function(e,t){function r(){}r.prototype=t.prototype,e.prototype=new r},o.extend=function(){var e,t,r={};for(e=0;e<arguments.length;e++)for(t in arguments[e])arguments[e].hasOwnProperty(t)&&void 0===r[t]&&(r[t]=arguments[e][t]);return r},o.prepareContent=function(n,e,i,s,a){return f.Promise.resolve(e).then(function(n){return u.blob&&(n instanceof Blob||-1!==["[object File]","[object Blob]"].indexOf(Object.prototype.toString.call(n)))&&"undefined"!=typeof FileReader?new f.Promise(function(t,r){var e=new FileReader;e.onload=function(e){t(e.target.result)},e.onerror=function(e){r(e.target.error)},e.readAsArrayBuffer(n)}):n}).then(function(e){var t,r=o.getTypeOf(e);return r?("arraybuffer"===r?e=o.transformTo("uint8array",e):"string"===r&&(a?e=h.decode(e):i&&!0!==s&&(e=l(t=e,u.uint8array?new Uint8Array(t.length):new Array(t.length)))),e):f.Promise.reject(new Error("Can't read the data of '"+n+"'. Is it in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?"))})}},{"./base64":1,"./external":6,"./nodejsUtils":14,"./support":30,"set-immediate-shim":54}],33:[function(e,t,r){"use strict";var n=e("./reader/readerFor"),i=e("./utils"),s=e("./signature"),a=e("./zipEntry"),o=(e("./utf8"),e("./support"));function u(e){this.files=[],this.loadOptions=e}u.prototype={checkSignature:function(e){if(!this.reader.readAndCheckSignature(e)){this.reader.index-=4;var t=this.reader.readString(4);throw new Error("Corrupted zip or bug: unexpected signature ("+i.pretty(t)+", expected "+i.pretty(e)+")")}},isSignature:function(e,t){var r=this.reader.index;this.reader.setIndex(e);var n=this.reader.readString(4)===t;return this.reader.setIndex(r),n},readBlockEndOfCentral:function(){this.diskNumber=this.reader.readInt(2),this.diskWithCentralDirStart=this.reader.readInt(2),this.centralDirRecordsOnThisDisk=this.reader.readInt(2),this.centralDirRecords=this.reader.readInt(2),this.centralDirSize=this.reader.readInt(4),this.centralDirOffset=this.reader.readInt(4),this.zipCommentLength=this.reader.readInt(2);var e=this.reader.readData(this.zipCommentLength),t=o.uint8array?"uint8array":"array",r=i.transformTo(t,e);this.zipComment=this.loadOptions.decodeFileName(r)},readBlockZip64EndOfCentral:function(){this.zip64EndOfCentralSize=this.reader.readInt(8),this.reader.skip(4),this.diskNumber=this.reader.readInt(4),this.diskWithCentralDirStart=this.reader.readInt(4),this.centralDirRecordsOnThisDisk=this.reader.readInt(8),this.centralDirRecords=this.reader.readInt(8),this.centralDirSize=this.reader.readInt(8),this.centralDirOffset=this.reader.readInt(8),this.zip64ExtensibleData={};for(var e,t,r,n=this.zip64EndOfCentralSize-44;0<n;)e=this.reader.readInt(2),t=this.reader.readInt(4),r=this.reader.readData(t),this.zip64ExtensibleData[e]={id:e,length:t,value:r}},readBlockZip64EndOfCentralLocator:function(){if(this.diskWithZip64CentralDirStart=this.reader.readInt(4),this.relativeOffsetEndOfZip64CentralDir=this.reader.readInt(8),this.disksCount=this.reader.readInt(4),1<this.disksCount)throw new Error("Multi-volumes zip are not supported")},readLocalFiles:function(){var e,t;for(e=0;e<this.files.length;e++)t=this.files[e],this.reader.setIndex(t.localHeaderOffset),this.checkSignature(s.LOCAL_FILE_HEADER),t.readLocalPart(this.reader),t.handleUTF8(),t.processAttributes()},readCentralDir:function(){var e;for(this.reader.setIndex(this.centralDirOffset);this.reader.readAndCheckSignature(s.CENTRAL_FILE_HEADER);)(e=new a({zip64:this.zip64},this.loadOptions)).readCentralPart(this.reader),this.files.push(e);if(this.centralDirRecords!==this.files.length&&0!==this.centralDirRecords&&0===this.files.length)throw new Error("Corrupted zip or bug: expected "+this.centralDirRecords+" records in central dir, got "+this.files.length)},readEndOfCentral:function(){var e=this.reader.lastIndexOfSignature(s.CENTRAL_DIRECTORY_END);if(e<0)throw this.isSignature(0,s.LOCAL_FILE_HEADER)?new Error("Corrupted zip: can't find end of central directory"):new Error("Can't find end of central directory : is this a zip file ? If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html");this.reader.setIndex(e);var t=e;if(this.checkSignature(s.CENTRAL_DIRECTORY_END),this.readBlockEndOfCentral(),this.diskNumber===i.MAX_VALUE_16BITS||this.diskWithCentralDirStart===i.MAX_VALUE_16BITS||this.centralDirRecordsOnThisDisk===i.MAX_VALUE_16BITS||this.centralDirRecords===i.MAX_VALUE_16BITS||this.centralDirSize===i.MAX_VALUE_32BITS||this.centralDirOffset===i.MAX_VALUE_32BITS){if(this.zip64=!0,(e=this.reader.lastIndexOfSignature(s.ZIP64_CENTRAL_DIRECTORY_LOCATOR))<0)throw new Error("Corrupted zip: can't find the ZIP64 end of central directory locator");if(this.reader.setIndex(e),this.checkSignature(s.ZIP64_CENTRAL_DIRECTORY_LOCATOR),this.readBlockZip64EndOfCentralLocator(),!this.isSignature(this.relativeOffsetEndOfZip64CentralDir,s.ZIP64_CENTRAL_DIRECTORY_END)&&(this.relativeOffsetEndOfZip64CentralDir=this.reader.lastIndexOfSignature(s.ZIP64_CENTRAL_DIRECTORY_END),this.relativeOffsetEndOfZip64CentralDir<0))throw new Error("Corrupted zip: can't find the ZIP64 end of central directory");this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir),this.checkSignature(s.ZIP64_CENTRAL_DIRECTORY_END),this.readBlockZip64EndOfCentral()}var r=this.centralDirOffset+this.centralDirSize;this.zip64&&(r+=20,r+=12+this.zip64EndOfCentralSize);var n=t-r;if(0<n)this.isSignature(t,s.CENTRAL_FILE_HEADER)||(this.reader.zero=n);else if(n<0)throw new Error("Corrupted zip: missing "+Math.abs(n)+" bytes.")},prepareReader:function(e){this.reader=n(e)},load:function(e){this.prepareReader(e),this.readEndOfCentral(),this.readCentralDir(),this.readLocalFiles()}},t.exports=u},{"./reader/readerFor":22,"./signature":23,"./support":30,"./utf8":31,"./utils":32,"./zipEntry":34}],34:[function(e,t,r){"use strict";var n=e("./reader/readerFor"),s=e("./utils"),i=e("./compressedObject"),a=e("./crc32"),o=e("./utf8"),u=e("./compressions"),h=e("./support");function f(e,t){this.options=e,this.loadOptions=t}f.prototype={isEncrypted:function(){return 1==(1&this.bitFlag)},useUTF8:function(){return 2048==(2048&this.bitFlag)},readLocalPart:function(e){var t,r;if(e.skip(22),this.fileNameLength=e.readInt(2),r=e.readInt(2),this.fileName=e.readData(this.fileNameLength),e.skip(r),-1===this.compressedSize||-1===this.uncompressedSize)throw new Error("Bug or corrupted zip : didn't get enough information from the central directory (compressedSize === -1 || uncompressedSize === -1)");if(null===(t=function(e){for(var t in u)if(u.hasOwnProperty(t)&&u[t].magic===e)return u[t];return null}(this.compressionMethod)))throw new Error("Corrupted zip : compression "+s.pretty(this.compressionMethod)+" unknown (inner file : "+s.transformTo("string",this.fileName)+")");this.decompressed=new i(this.compressedSize,this.uncompressedSize,this.crc32,t,e.readData(this.compressedSize))},readCentralPart:function(e){this.versionMadeBy=e.readInt(2),e.skip(2),this.bitFlag=e.readInt(2),this.compressionMethod=e.readString(2),this.date=e.readDate(),this.crc32=e.readInt(4),this.compressedSize=e.readInt(4),this.uncompressedSize=e.readInt(4);var t=e.readInt(2);if(this.extraFieldsLength=e.readInt(2),this.fileCommentLength=e.readInt(2),this.diskNumberStart=e.readInt(2),this.internalFileAttributes=e.readInt(2),this.externalFileAttributes=e.readInt(4),this.localHeaderOffset=e.readInt(4),this.isEncrypted())throw new Error("Encrypted zip are not supported");e.skip(t),this.readExtraFields(e),this.parseZIP64ExtraField(e),this.fileComment=e.readData(this.fileCommentLength)},processAttributes:function(){this.unixPermissions=null,this.dosPermissions=null;var e=this.versionMadeBy>>8;this.dir=!!(16&this.externalFileAttributes),0==e&&(this.dosPermissions=63&this.externalFileAttributes),3==e&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||"/"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(e){if(this.extraFields[1]){var t=n(this.extraFields[1].value);this.uncompressedSize===s.MAX_VALUE_32BITS&&(this.uncompressedSize=t.readInt(8)),this.compressedSize===s.MAX_VALUE_32BITS&&(this.compressedSize=t.readInt(8)),this.localHeaderOffset===s.MAX_VALUE_32BITS&&(this.localHeaderOffset=t.readInt(8)),this.diskNumberStart===s.MAX_VALUE_32BITS&&(this.diskNumberStart=t.readInt(4))}},readExtraFields:function(e){var t,r,n,i=e.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});e.index+4<i;)t=e.readInt(2),r=e.readInt(2),n=e.readData(r),this.extraFields[t]={id:t,length:r,value:n};e.setIndex(i)},handleUTF8:function(){var e=h.uint8array?"uint8array":"array";if(this.useUTF8())this.fileNameStr=o.utf8decode(this.fileName),this.fileCommentStr=o.utf8decode(this.fileComment);else{var t=this.findExtraFieldUnicodePath();if(null!==t)this.fileNameStr=t;else{var r=s.transformTo(e,this.fileName);this.fileNameStr=this.loadOptions.decodeFileName(r)}var n=this.findExtraFieldUnicodeComment();if(null!==n)this.fileCommentStr=n;else{var i=s.transformTo(e,this.fileComment);this.fileCommentStr=this.loadOptions.decodeFileName(i)}}},findExtraFieldUnicodePath:function(){var e=this.extraFields[28789];if(e){var t=n(e.value);return 1!==t.readInt(1)?null:a(this.fileName)!==t.readInt(4)?null:o.utf8decode(t.readData(e.length-5))}return null},findExtraFieldUnicodeComment:function(){var e=this.extraFields[25461];if(e){var t=n(e.value);return 1!==t.readInt(1)?null:a(this.fileComment)!==t.readInt(4)?null:o.utf8decode(t.readData(e.length-5))}return null}},t.exports=f},{"./compressedObject":2,"./compressions":3,"./crc32":4,"./reader/readerFor":22,"./support":30,"./utf8":31,"./utils":32}],35:[function(e,t,r){"use strict";function n(e,t,r){this.name=e,this.dir=r.dir,this.date=r.date,this.comment=r.comment,this.unixPermissions=r.unixPermissions,this.dosPermissions=r.dosPermissions,this._data=t,this._dataBinary=r.binary,this.options={compression:r.compression,compressionOptions:r.compressionOptions}}var s=e("./stream/StreamHelper"),i=e("./stream/DataWorker"),a=e("./utf8"),o=e("./compressedObject"),u=e("./stream/GenericWorker");n.prototype={internalStream:function(e){var t=null,r="string";try{if(!e)throw new Error("No output type specified.");var n="string"===(r=e.toLowerCase())||"text"===r;"binarystring"!==r&&"text"!==r||(r="string"),t=this._decompressWorker();var i=!this._dataBinary;i&&!n&&(t=t.pipe(new a.Utf8EncodeWorker)),!i&&n&&(t=t.pipe(new a.Utf8DecodeWorker))}catch(e){(t=new u("error")).error(e)}return new s(t,r,"")},async:function(e,t){return this.internalStream(e).accumulate(t)},nodeStream:function(e,t){return this.internalStream(e||"nodebuffer").toNodejsStream(t)},_compressWorker:function(e,t){if(this._data instanceof o&&this._data.compression.magic===e.magic)return this._data.getCompressedWorker();var r=this._decompressWorker();return this._dataBinary||(r=r.pipe(new a.Utf8EncodeWorker)),o.createWorkerFrom(r,e,t)},_decompressWorker:function(){return this._data instanceof o?this._data.getContentWorker():this._data instanceof u?this._data:new i(this._data)}};for(var h=["asText","asBinary","asNodeBuffer","asUint8Array","asArrayBuffer"],f=function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},l=0;l<h.length;l++)n.prototype[h[l]]=f;t.exports=n},{"./compressedObject":2,"./stream/DataWorker":27,"./stream/GenericWorker":28,"./stream/StreamHelper":29,"./utf8":31}],36:[function(e,f,t){(function(t){"use strict";var r,n,e=t.MutationObserver||t.WebKitMutationObserver;if(e){var i=0,s=new e(h),a=t.document.createTextNode("");s.observe(a,{characterData:!0}),r=function(){a.data=i=++i%2}}else if(t.setImmediate||void 0===t.MessageChannel)r="document"in t&&"onreadystatechange"in t.document.createElement("script")?function(){var e=t.document.createElement("script");e.onreadystatechange=function(){h(),e.onreadystatechange=null,e.parentNode.removeChild(e),e=null},t.document.documentElement.appendChild(e)}:function(){setTimeout(h,0)};else{var o=new t.MessageChannel;o.port1.onmessage=h,r=function(){o.port2.postMessage(0)}}var u=[];function h(){var e,t;n=!0;for(var r=u.length;r;){for(t=u,u=[],e=-1;++e<r;)t[e]();r=u.length}n=!1}f.exports=function(e){1!==u.push(e)||n||r()}}).call(this,void 0!==r?r:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],37:[function(e,t,r){"use strict";var i=e("immediate");function h(){}var f={},s=["REJECTED"],a=["FULFILLED"],n=["PENDING"];function o(e){if("function"!=typeof e)throw new TypeError("resolver must be a function");this.state=n,this.queue=[],this.outcome=void 0,e!==h&&c(this,e)}function u(e,t,r){this.promise=e,"function"==typeof t&&(this.onFulfilled=t,this.callFulfilled=this.otherCallFulfilled),"function"==typeof r&&(this.onRejected=r,this.callRejected=this.otherCallRejected)}function l(t,r,n){i(function(){var e;try{e=r(n)}catch(e){return f.reject(t,e)}e===t?f.reject(t,new TypeError("Cannot resolve promise with itself")):f.resolve(t,e)})}function d(e){var t=e&&e.then;if(e&&("object"==typeof e||"function"==typeof e)&&"function"==typeof t)return function(){t.apply(e,arguments)}}function c(t,e){var r=!1;function n(e){r||(r=!0,f.reject(t,e))}function i(e){r||(r=!0,f.resolve(t,e))}var s=p(function(){e(i,n)});"error"===s.status&&n(s.value)}function p(e,t){var r={};try{r.value=e(t),r.status="success"}catch(e){r.status="error",r.value=e}return r}(t.exports=o).prototype.finally=function(t){if("function"!=typeof t)return this;var r=this.constructor;return this.then(function(e){return r.resolve(t()).then(function(){return e})},function(e){return r.resolve(t()).then(function(){throw e})})},o.prototype.catch=function(e){return this.then(null,e)},o.prototype.then=function(e,t){if("function"!=typeof e&&this.state===a||"function"!=typeof t&&this.state===s)return this;var r=new this.constructor(h);return this.state!==n?l(r,this.state===a?e:t,this.outcome):this.queue.push(new u(r,e,t)),r},u.prototype.callFulfilled=function(e){f.resolve(this.promise,e)},u.prototype.otherCallFulfilled=function(e){l(this.promise,this.onFulfilled,e)},u.prototype.callRejected=function(e){f.reject(this.promise,e)},u.prototype.otherCallRejected=function(e){l(this.promise,this.onRejected,e)},f.resolve=function(e,t){var r=p(d,t);if("error"===r.status)return f.reject(e,r.value);var n=r.value;if(n)c(e,n);else{e.state=a,e.outcome=t;for(var i=-1,s=e.queue.length;++i<s;)e.queue[i].callFulfilled(t)}return e},f.reject=function(e,t){e.state=s,e.outcome=t;for(var r=-1,n=e.queue.length;++r<n;)e.queue[r].callRejected(t);return e},o.resolve=function(e){return e instanceof this?e:f.resolve(new this(h),e)},o.reject=function(e){var t=new this(h);return f.reject(t,e)},o.all=function(e){var r=this;if("[object Array]"!==Object.prototype.toString.call(e))return this.reject(new TypeError("must be an array"));var n=e.length,i=!1;if(!n)return this.resolve([]);for(var s=new Array(n),a=0,t=-1,o=new this(h);++t<n;)u(e[t],t);return o;function u(e,t){r.resolve(e).then(function(e){s[t]=e,++a!==n||i||(i=!0,f.resolve(o,s))},function(e){i||(i=!0,f.reject(o,e))})}},o.race=function(e){if("[object Array]"!==Object.prototype.toString.call(e))return this.reject(new TypeError("must be an array"));var t=e.length,r=!1;if(!t)return this.resolve([]);for(var n,i=-1,s=new this(h);++i<t;)n=e[i],this.resolve(n).then(function(e){r||(r=!0,f.resolve(s,e))},function(e){r||(r=!0,f.reject(s,e))});return s}},{immediate:36}],38:[function(e,t,r){"use strict";var n={};(0,e("./lib/utils/common").assign)(n,e("./lib/deflate"),e("./lib/inflate"),e("./lib/zlib/constants")),t.exports=n},{"./lib/deflate":39,"./lib/inflate":40,"./lib/utils/common":41,"./lib/zlib/constants":44}],39:[function(e,t,r){"use strict";var a=e("./zlib/deflate"),o=e("./utils/common"),u=e("./utils/strings"),i=e("./zlib/messages"),s=e("./zlib/zstream"),h=Object.prototype.toString,f=0,l=-1,d=0,c=8;function p(e){if(!(this instanceof p))return new p(e);this.options=o.assign({level:l,method:c,chunkSize:16384,windowBits:15,memLevel:8,strategy:d,to:""},e||{});var t=this.options;t.raw&&0<t.windowBits?t.windowBits=-t.windowBits:t.gzip&&0<t.windowBits&&t.windowBits<16&&(t.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new s,this.strm.avail_out=0;var r=a.deflateInit2(this.strm,t.level,t.method,t.windowBits,t.memLevel,t.strategy);if(r!==f)throw new Error(i[r]);if(t.header&&a.deflateSetHeader(this.strm,t.header),t.dictionary){var n;if(n="string"==typeof t.dictionary?u.string2buf(t.dictionary):"[object ArrayBuffer]"===h.call(t.dictionary)?new Uint8Array(t.dictionary):t.dictionary,(r=a.deflateSetDictionary(this.strm,n))!==f)throw new Error(i[r]);this._dict_set=!0}}function n(e,t){var r=new p(t);if(r.push(e,!0),r.err)throw r.msg||i[r.err];return r.result}p.prototype.push=function(e,t){var r,n,i=this.strm,s=this.options.chunkSize;if(this.ended)return!1;n=t===~~t?t:!0===t?4:0,"string"==typeof e?i.input=u.string2buf(e):"[object ArrayBuffer]"===h.call(e)?i.input=new Uint8Array(e):i.input=e,i.next_in=0,i.avail_in=i.input.length;do{if(0===i.avail_out&&(i.output=new o.Buf8(s),i.next_out=0,i.avail_out=s),1!==(r=a.deflate(i,n))&&r!==f)return this.onEnd(r),!(this.ended=!0);0!==i.avail_out&&(0!==i.avail_in||4!==n&&2!==n)||("string"===this.options.to?this.onData(u.buf2binstring(o.shrinkBuf(i.output,i.next_out))):this.onData(o.shrinkBuf(i.output,i.next_out)))}while((0<i.avail_in||0===i.avail_out)&&1!==r);return 4===n?(r=a.deflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===f):2!==n||(this.onEnd(f),!(i.avail_out=0))},p.prototype.onData=function(e){this.chunks.push(e)},p.prototype.onEnd=function(e){e===f&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=o.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg},r.Deflate=p,r.deflate=n,r.deflateRaw=function(e,t){return(t=t||{}).raw=!0,n(e,t)},r.gzip=function(e,t){return(t=t||{}).gzip=!0,n(e,t)}},{"./utils/common":41,"./utils/strings":42,"./zlib/deflate":46,"./zlib/messages":51,"./zlib/zstream":53}],40:[function(e,t,r){"use strict";var d=e("./zlib/inflate"),c=e("./utils/common"),p=e("./utils/strings"),m=e("./zlib/constants"),n=e("./zlib/messages"),i=e("./zlib/zstream"),s=e("./zlib/gzheader"),_=Object.prototype.toString;function a(e){if(!(this instanceof a))return new a(e);this.options=c.assign({chunkSize:16384,windowBits:0,to:""},e||{});var t=this.options;t.raw&&0<=t.windowBits&&t.windowBits<16&&(t.windowBits=-t.windowBits,0===t.windowBits&&(t.windowBits=-15)),!(0<=t.windowBits&&t.windowBits<16)||e&&e.windowBits||(t.windowBits+=32),15<t.windowBits&&t.windowBits<48&&0==(15&t.windowBits)&&(t.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new i,this.strm.avail_out=0;var r=d.inflateInit2(this.strm,t.windowBits);if(r!==m.Z_OK)throw new Error(n[r]);this.header=new s,d.inflateGetHeader(this.strm,this.header)}function o(e,t){var r=new a(t);if(r.push(e,!0),r.err)throw r.msg||n[r.err];return r.result}a.prototype.push=function(e,t){var r,n,i,s,a,o,u=this.strm,h=this.options.chunkSize,f=this.options.dictionary,l=!1;if(this.ended)return!1;n=t===~~t?t:!0===t?m.Z_FINISH:m.Z_NO_FLUSH,"string"==typeof e?u.input=p.binstring2buf(e):"[object ArrayBuffer]"===_.call(e)?u.input=new Uint8Array(e):u.input=e,u.next_in=0,u.avail_in=u.input.length;do{if(0===u.avail_out&&(u.output=new c.Buf8(h),u.next_out=0,u.avail_out=h),(r=d.inflate(u,m.Z_NO_FLUSH))===m.Z_NEED_DICT&&f&&(o="string"==typeof f?p.string2buf(f):"[object ArrayBuffer]"===_.call(f)?new Uint8Array(f):f,r=d.inflateSetDictionary(this.strm,o)),r===m.Z_BUF_ERROR&&!0===l&&(r=m.Z_OK,l=!1),r!==m.Z_STREAM_END&&r!==m.Z_OK)return this.onEnd(r),!(this.ended=!0);u.next_out&&(0!==u.avail_out&&r!==m.Z_STREAM_END&&(0!==u.avail_in||n!==m.Z_FINISH&&n!==m.Z_SYNC_FLUSH)||("string"===this.options.to?(i=p.utf8border(u.output,u.next_out),s=u.next_out-i,a=p.buf2string(u.output,i),u.next_out=s,u.avail_out=h-s,s&&c.arraySet(u.output,u.output,i,s,0),this.onData(a)):this.onData(c.shrinkBuf(u.output,u.next_out)))),0===u.avail_in&&0===u.avail_out&&(l=!0)}while((0<u.avail_in||0===u.avail_out)&&r!==m.Z_STREAM_END);return r===m.Z_STREAM_END&&(n=m.Z_FINISH),n===m.Z_FINISH?(r=d.inflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===m.Z_OK):n!==m.Z_SYNC_FLUSH||(this.onEnd(m.Z_OK),!(u.avail_out=0))},a.prototype.onData=function(e){this.chunks.push(e)},a.prototype.onEnd=function(e){e===m.Z_OK&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=c.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg},r.Inflate=a,r.inflate=o,r.inflateRaw=function(e,t){return(t=t||{}).raw=!0,o(e,t)},r.ungzip=o},{"./utils/common":41,"./utils/strings":42,"./zlib/constants":44,"./zlib/gzheader":47,"./zlib/inflate":49,"./zlib/messages":51,"./zlib/zstream":53}],41:[function(e,t,r){"use strict";var n="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Int32Array;r.assign=function(e){for(var t=Array.prototype.slice.call(arguments,1);t.length;){var r=t.shift();if(r){if("object"!=typeof r)throw new TypeError(r+"must be non-object");for(var n in r)r.hasOwnProperty(n)&&(e[n]=r[n])}}return e},r.shrinkBuf=function(e,t){return e.length===t?e:e.subarray?e.subarray(0,t):(e.length=t,e)};var i={arraySet:function(e,t,r,n,i){if(t.subarray&&e.subarray)e.set(t.subarray(r,r+n),i);else for(var s=0;s<n;s++)e[i+s]=t[r+s]},flattenChunks:function(e){var t,r,n,i,s,a;for(t=n=0,r=e.length;t<r;t++)n+=e[t].length;for(a=new Uint8Array(n),t=i=0,r=e.length;t<r;t++)s=e[t],a.set(s,i),i+=s.length;return a}},s={arraySet:function(e,t,r,n,i){for(var s=0;s<n;s++)e[i+s]=t[r+s]},flattenChunks:function(e){return[].concat.apply([],e)}};r.setTyped=function(e){e?(r.Buf8=Uint8Array,r.Buf16=Uint16Array,r.Buf32=Int32Array,r.assign(r,i)):(r.Buf8=Array,r.Buf16=Array,r.Buf32=Array,r.assign(r,s))},r.setTyped(n)},{}],42:[function(e,t,r){"use strict";var u=e("./common"),i=!0,s=!0;try{String.fromCharCode.apply(null,[0])}catch(e){i=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(e){s=!1}for(var h=new u.Buf8(256),n=0;n<256;n++)h[n]=252<=n?6:248<=n?5:240<=n?4:224<=n?3:192<=n?2:1;function f(e,t){if(t<65537&&(e.subarray&&s||!e.subarray&&i))return String.fromCharCode.apply(null,u.shrinkBuf(e,t));for(var r="",n=0;n<t;n++)r+=String.fromCharCode(e[n]);return r}h[254]=h[254]=1,r.string2buf=function(e){var t,r,n,i,s,a=e.length,o=0;for(i=0;i<a;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),o+=r<128?1:r<2048?2:r<65536?3:4;for(t=new u.Buf8(o),i=s=0;s<o;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),r<128?t[s++]=r:(r<2048?t[s++]=192|r>>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t},r.buf2binstring=function(e){return f(e,e.length)},r.binstring2buf=function(e){for(var t=new u.Buf8(e.length),r=0,n=t.length;r<n;r++)t[r]=e.charCodeAt(r);return t},r.buf2string=function(e,t){var r,n,i,s,a=t||e.length,o=new Array(2*a);for(r=n=0;r<a;)if((i=e[r++])<128)o[n++]=i;else if(4<(s=h[i]))o[n++]=65533,r+=s-1;else{for(i&=2===s?31:3===s?15:7;1<s&&r<a;)i=i<<6|63&e[r++],s--;1<s?o[n++]=65533:i<65536?o[n++]=i:(i-=65536,o[n++]=55296|i>>10&1023,o[n++]=56320|1023&i)}return f(o,n)},r.utf8border=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+h[e[r]]>t?r:t}},{"./common":41}],43:[function(e,t,r){"use strict";t.exports=function(e,t,r,n){for(var i=65535&e|0,s=e>>>16&65535|0,a=0;0!==r;){for(r-=a=2e3<r?2e3:r;s=s+(i=i+t[n++]|0)|0,--a;);i%=65521,s%=65521}return i|s<<16|0}},{}],44:[function(e,t,r){"use strict";t.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],45:[function(e,t,r){"use strict";var o=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a<s;a++)e=e>>>8^i[255&(e^t[a])];return-1^e}},{}],46:[function(e,t,r){"use strict";var u,d=e("../utils/common"),h=e("./trees"),c=e("./adler32"),p=e("./crc32"),n=e("./messages"),f=0,l=0,m=-2,i=2,_=8,s=286,a=30,o=19,g=2*s+1,v=15,b=3,w=258,y=w+b+1,k=42,x=113;function S(e,t){return e.msg=n[t],t}function z(e){return(e<<1)-(4<e?9:0)}function E(e){for(var t=e.length;0<=--t;)e[t]=0}function C(e){var t=e.state,r=t.pending;r>e.avail_out&&(r=e.avail_out),0!==r&&(d.arraySet(e.output,t.pending_buf,t.pending_out,r,e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,0===t.pending&&(t.pending_out=0))}function A(e,t){h._tr_flush_block(e,0<=e.block_start?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,C(e.strm)}function I(e,t){e.pending_buf[e.pending++]=t}function O(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function B(e,t){var r,n,i=e.max_chain_length,s=e.strstart,a=e.prev_length,o=e.nice_match,u=e.strstart>e.w_size-y?e.strstart-(e.w_size-y):0,h=e.window,f=e.w_mask,l=e.prev,d=e.strstart+w,c=h[s+a-1],p=h[s+a];e.prev_length>=e.good_match&&(i>>=2),o>e.lookahead&&(o=e.lookahead);do{if(h[(r=t)+a]===p&&h[r+a-1]===c&&h[r]===h[s]&&h[++r]===h[s+1]){s+=2,r++;do{}while(h[++s]===h[++r]&&h[++s]===h[++r]&&h[++s]===h[++r]&&h[++s]===h[++r]&&h[++s]===h[++r]&&h[++s]===h[++r]&&h[++s]===h[++r]&&h[++s]===h[++r]&&s<d);if(n=w-(d-s),s=d-w,a<n){if(e.match_start=t,o<=(a=n))break;c=h[s+a-1],p=h[s+a]}}}while((t=l[t&f])>u&&0!=--i);return a<=e.lookahead?a:e.lookahead}function T(e){var t,r,n,i,s,a,o,u,h,f,l=e.w_size;do{if(i=e.window_size-e.lookahead-e.strstart,e.strstart>=l+(l-y)){for(d.arraySet(e.window,e.window,l,l,0),e.match_start-=l,e.strstart-=l,e.block_start-=l,t=r=e.hash_size;n=e.head[--t],e.head[t]=l<=n?n-l:0,--r;);for(t=r=l;n=e.prev[--t],e.prev[t]=l<=n?n-l:0,--r;);i+=l}if(0===e.strm.avail_in)break;if(a=e.strm,o=e.window,u=e.strstart+e.lookahead,f=void 0,(h=i)<(f=a.avail_in)&&(f=h),r=0===f?0:(a.avail_in-=f,d.arraySet(o,a.input,a.next_in,f,u),1===a.state.wrap?a.adler=c(a.adler,o,f,u):2===a.state.wrap&&(a.adler=p(a.adler,o,f,u)),a.next_in+=f,a.total_in+=f,f),e.lookahead+=r,e.lookahead+e.insert>=b)for(s=e.strstart-e.insert,e.ins_h=e.window[s],e.ins_h=(e.ins_h<<e.hash_shift^e.window[s+1])&e.hash_mask;e.insert&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[s+b-1])&e.hash_mask,e.prev[s&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=s,s++,e.insert--,!(e.lookahead+e.insert<b)););}while(e.lookahead<y&&0!==e.strm.avail_in)}function R(e,t){for(var r,n;;){if(e.lookahead<y){if(T(e),e.lookahead<y&&t===f)return 1;if(0===e.lookahead)break}if(r=0,e.lookahead>=b&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+b-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),0!==r&&e.strstart-r<=e.w_size-y&&(e.match_length=B(e,r)),e.match_length>=b)if(n=h._tr_tally(e,e.strstart-e.match_start,e.match_length-b),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=b){for(e.match_length--;e.strstart++,e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+b-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart,0!=--e.match_length;);e.strstart++}else e.strstart+=e.match_length,e.match_length=0,e.ins_h=e.window[e.strstart],e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+1])&e.hash_mask;else n=h._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++;if(n&&(A(e,!1),0===e.strm.avail_out))return 1}return e.insert=e.strstart<b-1?e.strstart:b-1,4===t?(A(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(A(e,!1),0===e.strm.avail_out)?1:2}function D(e,t){for(var r,n,i;;){if(e.lookahead<y){if(T(e),e.lookahead<y&&t===f)return 1;if(0===e.lookahead)break}if(r=0,e.lookahead>=b&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+b-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),e.prev_length=e.match_length,e.prev_match=e.match_start,e.match_length=b-1,0!==r&&e.prev_length<e.max_lazy_match&&e.strstart-r<=e.w_size-y&&(e.match_length=B(e,r),e.match_length<=5&&(1===e.strategy||e.match_length===b&&4096<e.strstart-e.match_start)&&(e.match_length=b-1)),e.prev_length>=b&&e.match_length<=e.prev_length){for(i=e.strstart+e.lookahead-b,n=h._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-b),e.lookahead-=e.prev_length-1,e.prev_length-=2;++e.strstart<=i&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+b-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),0!=--e.prev_length;);if(e.match_available=0,e.match_length=b-1,e.strstart++,n&&(A(e,!1),0===e.strm.avail_out))return 1}else if(e.match_available){if((n=h._tr_tally(e,0,e.window[e.strstart-1]))&&A(e,!1),e.strstart++,e.lookahead--,0===e.strm.avail_out)return 1}else e.match_available=1,e.strstart++,e.lookahead--}return e.match_available&&(n=h._tr_tally(e,0,e.window[e.strstart-1]),e.match_available=0),e.insert=e.strstart<b-1?e.strstart:b-1,4===t?(A(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(A(e,!1),0===e.strm.avail_out)?1:2}function F(e,t,r,n,i){this.good_length=e,this.max_lazy=t,this.nice_length=r,this.max_chain=n,this.func=i}function N(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=_,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new d.Buf16(2*g),this.dyn_dtree=new d.Buf16(2*(2*a+1)),this.bl_tree=new d.Buf16(2*(2*o+1)),E(this.dyn_ltree),E(this.dyn_dtree),E(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new d.Buf16(v+1),this.heap=new d.Buf16(2*s+1),E(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new d.Buf16(2*s+1),E(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function U(e){var t;return e&&e.state?(e.total_in=e.total_out=0,e.data_type=i,(t=e.state).pending=0,t.pending_out=0,t.wrap<0&&(t.wrap=-t.wrap),t.status=t.wrap?k:x,e.adler=2===t.wrap?0:1,t.last_flush=f,h._tr_init(t),l):S(e,m)}function P(e){var t,r=U(e);return r===l&&((t=e.state).window_size=2*t.w_size,E(t.head),t.max_lazy_match=u[t.level].max_lazy,t.good_match=u[t.level].good_length,t.nice_match=u[t.level].nice_length,t.max_chain_length=u[t.level].max_chain,t.strstart=0,t.block_start=0,t.lookahead=0,t.insert=0,t.match_length=t.prev_length=b-1,t.match_available=0,t.ins_h=0),r}function L(e,t,r,n,i,s){if(!e)return m;var a=1;if(-1===t&&(t=6),n<0?(a=0,n=-n):15<n&&(a=2,n-=16),i<1||9<i||r!==_||n<8||15<n||t<0||9<t||s<0||4<s)return S(e,m);8===n&&(n=9);var o=new N;return(e.state=o).strm=e,o.wrap=a,o.gzhead=null,o.w_bits=n,o.w_size=1<<o.w_bits,o.w_mask=o.w_size-1,o.hash_bits=i+7,o.hash_size=1<<o.hash_bits,o.hash_mask=o.hash_size-1,o.hash_shift=~~((o.hash_bits+b-1)/b),o.window=new d.Buf8(2*o.w_size),o.head=new d.Buf16(o.hash_size),o.prev=new d.Buf16(o.w_size),o.lit_bufsize=1<<i+6,o.pending_buf_size=4*o.lit_bufsize,o.pending_buf=new d.Buf8(o.pending_buf_size),o.d_buf=1*o.lit_bufsize,o.l_buf=3*o.lit_bufsize,o.level=t,o.strategy=s,o.method=r,P(e)}u=[new F(0,0,0,0,function(e,t){var r=65535;for(r>e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(T(e),0===e.lookahead&&t===f)return 1;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+r;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,A(e,!1),0===e.strm.avail_out))return 1;if(e.strstart-e.block_start>=e.w_size-y&&(A(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(A(e,!0),0===e.strm.avail_out?3:4):(e.strstart>e.block_start&&(A(e,!1),e.strm.avail_out),1)}),new F(4,4,8,4,R),new F(4,5,16,8,R),new F(4,6,32,32,R),new F(4,4,16,16,D),new F(8,16,32,32,D),new F(8,16,128,128,D),new F(8,32,128,256,D),new F(32,128,258,1024,D),new F(32,258,258,4096,D)],r.deflateInit=function(e,t){return L(e,t,_,15,8,0)},r.deflateInit2=L,r.deflateReset=P,r.deflateResetKeep=U,r.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?m:(e.state.gzhead=t,l):m},r.deflate=function(e,t){var r,n,i,s;if(!e||!e.state||5<t||t<0)return e?S(e,m):m;if(n=e.state,!e.output||!e.input&&0!==e.avail_in||666===n.status&&4!==t)return S(e,0===e.avail_out?-5:m);if(n.strm=e,r=n.last_flush,n.last_flush=t,n.status===k)if(2===n.wrap)e.adler=0,I(n,31),I(n,139),I(n,8),n.gzhead?(I(n,(n.gzhead.text?1:0)+(n.gzhead.hcrc?2:0)+(n.gzhead.extra?4:0)+(n.gzhead.name?8:0)+(n.gzhead.comment?16:0)),I(n,255&n.gzhead.time),I(n,n.gzhead.time>>8&255),I(n,n.gzhead.time>>16&255),I(n,n.gzhead.time>>24&255),I(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),I(n,255&n.gzhead.os),n.gzhead.extra&&n.gzhead.extra.length&&(I(n,255&n.gzhead.extra.length),I(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(e.adler=p(e.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=69):(I(n,0),I(n,0),I(n,0),I(n,0),I(n,0),I(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),I(n,3),n.status=x);else{var a=_+(n.w_bits-8<<4)<<8;a|=(2<=n.strategy||n.level<2?0:n.level<6?1:6===n.level?2:3)<<6,0!==n.strstart&&(a|=32),a+=31-a%31,n.status=x,O(n,a),0!==n.strstart&&(O(n,e.adler>>>16),O(n,65535&e.adler)),e.adler=1}if(69===n.status)if(n.gzhead.extra){for(i=n.pending;n.gzindex<(65535&n.gzhead.extra.length)&&(n.pending!==n.pending_buf_size||(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),C(e),i=n.pending,n.pending!==n.pending_buf_size));)I(n,255&n.gzhead.extra[n.gzindex]),n.gzindex++;n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),n.gzindex===n.gzhead.extra.length&&(n.gzindex=0,n.status=73)}else n.status=73;if(73===n.status)if(n.gzhead.name){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),C(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindex<n.gzhead.name.length?255&n.gzhead.name.charCodeAt(n.gzindex++):0,I(n,s)}while(0!==s);n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.gzindex=0,n.status=91)}else n.status=91;if(91===n.status)if(n.gzhead.comment){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),C(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindex<n.gzhead.comment.length?255&n.gzhead.comment.charCodeAt(n.gzindex++):0,I(n,s)}while(0!==s);n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.status=103)}else n.status=103;if(103===n.status&&(n.gzhead.hcrc?(n.pending+2>n.pending_buf_size&&C(e),n.pending+2<=n.pending_buf_size&&(I(n,255&e.adler),I(n,e.adler>>8&255),e.adler=0,n.status=x)):n.status=x),0!==n.pending){if(C(e),0===e.avail_out)return n.last_flush=-1,l}else if(0===e.avail_in&&z(t)<=z(r)&&4!==t)return S(e,-5);if(666===n.status&&0!==e.avail_in)return S(e,-5);if(0!==e.avail_in||0!==n.lookahead||t!==f&&666!==n.status){var o=2===n.strategy?function(e,t){for(var r;;){if(0===e.lookahead&&(T(e),0===e.lookahead)){if(t===f)return 1;break}if(e.match_length=0,r=h._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(A(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(A(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(A(e,!1),0===e.strm.avail_out)?1:2}(n,t):3===n.strategy?function(e,t){for(var r,n,i,s,a=e.window;;){if(e.lookahead<=w){if(T(e),e.lookahead<=w&&t===f)return 1;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=b&&0<e.strstart&&(n=a[i=e.strstart-1])===a[++i]&&n===a[++i]&&n===a[++i]){s=e.strstart+w;do{}while(n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&i<s);e.match_length=w-(s-i),e.match_length>e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=b?(r=h._tr_tally(e,1,e.match_length-b),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=h._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(A(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(A(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(A(e,!1),0===e.strm.avail_out)?1:2}(n,t):u[n.level].func(n,t);if(3!==o&&4!==o||(n.status=666),1===o||3===o)return 0===e.avail_out&&(n.last_flush=-1),l;if(2===o&&(1===t?h._tr_align(n):5!==t&&(h._tr_stored_block(n,0,0,!1),3===t&&(E(n.head),0===n.lookahead&&(n.strstart=0,n.block_start=0,n.insert=0))),C(e),0===e.avail_out))return n.last_flush=-1,l}return 4!==t?l:n.wrap<=0?1:(2===n.wrap?(I(n,255&e.adler),I(n,e.adler>>8&255),I(n,e.adler>>16&255),I(n,e.adler>>24&255),I(n,255&e.total_in),I(n,e.total_in>>8&255),I(n,e.total_in>>16&255),I(n,e.total_in>>24&255)):(O(n,e.adler>>>16),O(n,65535&e.adler)),C(e),0<n.wrap&&(n.wrap=-n.wrap),0!==n.pending?l:1)},r.deflateEnd=function(e){var t;return e&&e.state?(t=e.state.status)!==k&&69!==t&&73!==t&&91!==t&&103!==t&&t!==x&&666!==t?S(e,m):(e.state=null,t===x?S(e,-3):l):m},r.deflateSetDictionary=function(e,t){var r,n,i,s,a,o,u,h,f=t.length;if(!e||!e.state)return m;if(2===(s=(r=e.state).wrap)||1===s&&r.status!==k||r.lookahead)return m;for(1===s&&(e.adler=c(e.adler,t,f,0)),r.wrap=0,f>=r.w_size&&(0===s&&(E(r.head),r.strstart=0,r.block_start=0,r.insert=0),h=new d.Buf8(r.w_size),d.arraySet(h,t,f-r.w_size,r.w_size,0),t=h,f=r.w_size),a=e.avail_in,o=e.next_in,u=e.input,e.avail_in=f,e.next_in=0,e.input=t,T(r);r.lookahead>=b;){for(n=r.strstart,i=r.lookahead-(b-1);r.ins_h=(r.ins_h<<r.hash_shift^r.window[n+b-1])&r.hash_mask,r.prev[n&r.w_mask]=r.head[r.ins_h],r.head[r.ins_h]=n,n++,--i;);r.strstart=n,r.lookahead=b-1,T(r)}return r.strstart+=r.lookahead,r.block_start=r.strstart,r.insert=r.lookahead,r.lookahead=0,r.match_length=r.prev_length=b-1,r.match_available=0,e.next_in=o,e.input=u,e.avail_in=a,r.wrap=s,l},r.deflateInfo="pako deflate (from Nodeca project)"},{"../utils/common":41,"./adler32":43,"./crc32":45,"./messages":51,"./trees":52}],47:[function(e,t,r){"use strict";t.exports=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}},{}],48:[function(e,t,r){"use strict";t.exports=function(e,t){var r,n,i,s,a,o,u,h,f,l,d,c,p,m,_,g,v,b,w,y,k,x,S,z,E;r=e.state,n=e.next_in,z=e.input,i=n+(e.avail_in-5),s=e.next_out,E=e.output,a=s-(t-e.avail_out),o=s+(e.avail_out-257),u=r.dmax,h=r.wsize,f=r.whave,l=r.wnext,d=r.window,c=r.hold,p=r.bits,m=r.lencode,_=r.distcode,g=(1<<r.lenbits)-1,v=(1<<r.distbits)-1;e:do{p<15&&(c+=z[n++]<<p,p+=8,c+=z[n++]<<p,p+=8),b=m[c&g];t:for(;;){if(c>>>=w=b>>>24,p-=w,0==(w=b>>>16&255))E[s++]=65535&b;else{if(!(16&w)){if(0==(64&w)){b=m[(65535&b)+(c&(1<<w)-1)];continue t}if(32&w){r.mode=12;break e}e.msg="invalid literal/length code",r.mode=30;break e}y=65535&b,(w&=15)&&(p<w&&(c+=z[n++]<<p,p+=8),y+=c&(1<<w)-1,c>>>=w,p-=w),p<15&&(c+=z[n++]<<p,p+=8,c+=z[n++]<<p,p+=8),b=_[c&v];r:for(;;){if(c>>>=w=b>>>24,p-=w,!(16&(w=b>>>16&255))){if(0==(64&w)){b=_[(65535&b)+(c&(1<<w)-1)];continue r}e.msg="invalid distance code",r.mode=30;break e}if(k=65535&b,p<(w&=15)&&(c+=z[n++]<<p,(p+=8)<w&&(c+=z[n++]<<p,p+=8)),u<(k+=c&(1<<w)-1)){e.msg="invalid distance too far back",r.mode=30;break e}if(c>>>=w,p-=w,(w=s-a)<k){if(f<(w=k-w)&&r.sane){e.msg="invalid distance too far back",r.mode=30;break e}if(S=d,(x=0)===l){if(x+=h-w,w<y){for(y-=w;E[s++]=d[x++],--w;);x=s-k,S=E}}else if(l<w){if(x+=h+l-w,(w-=l)<y){for(y-=w;E[s++]=d[x++],--w;);if(x=0,l<y){for(y-=w=l;E[s++]=d[x++],--w;);x=s-k,S=E}}}else if(x+=l-w,w<y){for(y-=w;E[s++]=d[x++],--w;);x=s-k,S=E}for(;2<y;)E[s++]=S[x++],E[s++]=S[x++],E[s++]=S[x++],y-=3;y&&(E[s++]=S[x++],1<y&&(E[s++]=S[x++]))}else{for(x=s-k;E[s++]=E[x++],E[s++]=E[x++],E[s++]=E[x++],2<(y-=3););y&&(E[s++]=E[x++],1<y&&(E[s++]=E[x++]))}break}}break}}while(n<i&&s<o);n-=y=p>>3,c&=(1<<(p-=y<<3))-1,e.next_in=n,e.next_out=s,e.avail_in=n<i?i-n+5:5-(n-i),e.avail_out=s<o?o-s+257:257-(s-o),r.hold=c,r.bits=p}},{}],49:[function(e,t,r){"use strict";var I=e("../utils/common"),O=e("./adler32"),B=e("./crc32"),T=e("./inffast"),R=e("./inftrees"),D=1,F=2,N=0,U=-2,P=1,n=852,i=592;function L(e){return(e>>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function s(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new I.Buf16(320),this.work=new I.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function a(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=P,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new I.Buf32(n),t.distcode=t.distdyn=new I.Buf32(i),t.sane=1,t.back=-1,N):U}function o(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,a(e)):U}function u(e,t){var r,n;return e&&e.state?(n=e.state,t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||15<t)?U:(null!==n.window&&n.wbits!==t&&(n.window=null),n.wrap=r,n.wbits=t,o(e))):U}function h(e,t){var r,n;return e?(n=new s,(e.state=n).window=null,(r=u(e,t))!==N&&(e.state=null),r):U}var f,l,d=!0;function j(e){if(d){var t;for(f=new I.Buf32(512),l=new I.Buf32(32),t=0;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(R(D,e.lens,0,288,f,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;R(F,e.lens,0,32,l,0,e.work,{bits:5}),d=!1}e.lencode=f,e.lenbits=9,e.distcode=l,e.distbits=5}function Z(e,t,r,n){var i,s=e.state;return null===s.window&&(s.wsize=1<<s.wbits,s.wnext=0,s.whave=0,s.window=new I.Buf8(s.wsize)),n>=s.wsize?(I.arraySet(s.window,t,r-s.wsize,s.wsize,0),s.wnext=0,s.whave=s.wsize):(n<(i=s.wsize-s.wnext)&&(i=n),I.arraySet(s.window,t,r-n,i,s.wnext),(n-=i)?(I.arraySet(s.window,t,r-n,n,0),s.wnext=n,s.whave=s.wsize):(s.wnext+=i,s.wnext===s.wsize&&(s.wnext=0),s.whave<s.wsize&&(s.whave+=i))),0}r.inflateReset=o,r.inflateReset2=u,r.inflateResetKeep=a,r.inflateInit=function(e){return h(e,15)},r.inflateInit2=h,r.inflate=function(e,t){var r,n,i,s,a,o,u,h,f,l,d,c,p,m,_,g,v,b,w,y,k,x,S,z,E=0,C=new I.Buf8(4),A=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!e||!e.state||!e.output||!e.input&&0!==e.avail_in)return U;12===(r=e.state).mode&&(r.mode=13),a=e.next_out,i=e.output,u=e.avail_out,s=e.next_in,n=e.input,o=e.avail_in,h=r.hold,f=r.bits,l=o,d=u,x=N;e:for(;;)switch(r.mode){case P:if(0===r.wrap){r.mode=13;break}for(;f<16;){if(0===o)break e;o--,h+=n[s++]<<f,f+=8}if(2&r.wrap&&35615===h){C[r.check=0]=255&h,C[1]=h>>>8&255,r.check=B(r.check,C,2,0),f=h=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&h)<<8)+(h>>8))%31){e.msg="incorrect header check",r.mode=30;break}if(8!=(15&h)){e.msg="unknown compression method",r.mode=30;break}if(f-=4,k=8+(15&(h>>>=4)),0===r.wbits)r.wbits=k;else if(k>r.wbits){e.msg="invalid window size",r.mode=30;break}r.dmax=1<<k,e.adler=r.check=1,r.mode=512&h?10:12,f=h=0;break;case 2:for(;f<16;){if(0===o)break e;o--,h+=n[s++]<<f,f+=8}if(r.flags=h,8!=(255&r.flags)){e.msg="unknown compression method",r.mode=30;break}if(57344&r.flags){e.msg="unknown header flags set",r.mode=30;break}r.head&&(r.head.text=h>>8&1),512&r.flags&&(C[0]=255&h,C[1]=h>>>8&255,r.check=B(r.check,C,2,0)),f=h=0,r.mode=3;case 3:for(;f<32;){if(0===o)break e;o--,h+=n[s++]<<f,f+=8}r.head&&(r.head.time=h),512&r.flags&&(C[0]=255&h,C[1]=h>>>8&255,C[2]=h>>>16&255,C[3]=h>>>24&255,r.check=B(r.check,C,4,0)),f=h=0,r.mode=4;case 4:for(;f<16;){if(0===o)break e;o--,h+=n[s++]<<f,f+=8}r.head&&(r.head.xflags=255&h,r.head.os=h>>8),512&r.flags&&(C[0]=255&h,C[1]=h>>>8&255,r.check=B(r.check,C,2,0)),f=h=0,r.mode=5;case 5:if(1024&r.flags){for(;f<16;){if(0===o)break e;o--,h+=n[s++]<<f,f+=8}r.length=h,r.head&&(r.head.extra_len=h),512&r.flags&&(C[0]=255&h,C[1]=h>>>8&255,r.check=B(r.check,C,2,0)),f=h=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(o<(c=r.length)&&(c=o),c&&(r.head&&(k=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),I.arraySet(r.head.extra,n,s,c,k)),512&r.flags&&(r.check=B(r.check,n,c,s)),o-=c,s+=c,r.length-=c),r.length))break e;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===o)break e;for(c=0;k=n[s+c++],r.head&&k&&r.length<65536&&(r.head.name+=String.fromCharCode(k)),k&&c<o;);if(512&r.flags&&(r.check=B(r.check,n,c,s)),o-=c,s+=c,k)break e}else r.head&&(r.head.name=null);r.length=0,r.mode=8;case 8:if(4096&r.flags){if(0===o)break e;for(c=0;k=n[s+c++],r.head&&k&&r.length<65536&&(r.head.comment+=String.fromCharCode(k)),k&&c<o;);if(512&r.flags&&(r.check=B(r.check,n,c,s)),o-=c,s+=c,k)break e}else r.head&&(r.head.comment=null);r.mode=9;case 9:if(512&r.flags){for(;f<16;){if(0===o)break e;o--,h+=n[s++]<<f,f+=8}if(h!==(65535&r.check)){e.msg="header crc mismatch",r.mode=30;break}f=h=0}r.head&&(r.head.hcrc=r.flags>>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=12;break;case 10:for(;f<32;){if(0===o)break e;o--,h+=n[s++]<<f,f+=8}e.adler=r.check=L(h),f=h=0,r.mode=11;case 11:if(0===r.havedict)return e.next_out=a,e.avail_out=u,e.next_in=s,e.avail_in=o,r.hold=h,r.bits=f,2;e.adler=r.check=1,r.mode=12;case 12:if(5===t||6===t)break e;case 13:if(r.last){h>>>=7&f,f-=7&f,r.mode=27;break}for(;f<3;){if(0===o)break e;o--,h+=n[s++]<<f,f+=8}switch(r.last=1&h,f-=1,3&(h>>>=1)){case 0:r.mode=14;break;case 1:if(j(r),r.mode=20,6!==t)break;h>>>=2,f-=2;break e;case 2:r.mode=17;break;case 3:e.msg="invalid block type",r.mode=30}h>>>=2,f-=2;break;case 14:for(h>>>=7&f,f-=7&f;f<32;){if(0===o)break e;o--,h+=n[s++]<<f,f+=8}if((65535&h)!=(h>>>16^65535)){e.msg="invalid stored block lengths",r.mode=30;break}if(r.length=65535&h,f=h=0,r.mode=15,6===t)break e;case 15:r.mode=16;case 16:if(c=r.length){if(o<c&&(c=o),u<c&&(c=u),0===c)break e;I.arraySet(i,n,s,c,a),o-=c,s+=c,u-=c,a+=c,r.length-=c;break}r.mode=12;break;case 17:for(;f<14;){if(0===o)break e;o--,h+=n[s++]<<f,f+=8}if(r.nlen=257+(31&h),h>>>=5,f-=5,r.ndist=1+(31&h),h>>>=5,f-=5,r.ncode=4+(15&h),h>>>=4,f-=4,286<r.nlen||30<r.ndist){e.msg="too many length or distance symbols",r.mode=30;break}r.have=0,r.mode=18;case 18:for(;r.have<r.ncode;){for(;f<3;){if(0===o)break e;o--,h+=n[s++]<<f,f+=8}r.lens[A[r.have++]]=7&h,h>>>=3,f-=3}for(;r.have<19;)r.lens[A[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,S={bits:r.lenbits},x=R(0,r.lens,0,19,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg="invalid code lengths set",r.mode=30;break}r.have=0,r.mode=19;case 19:for(;r.have<r.nlen+r.ndist;){for(;g=(E=r.lencode[h&(1<<r.lenbits)-1])>>>16&255,v=65535&E,!((_=E>>>24)<=f);){if(0===o)break e;o--,h+=n[s++]<<f,f+=8}if(v<16)h>>>=_,f-=_,r.lens[r.have++]=v;else{if(16===v){for(z=_+2;f<z;){if(0===o)break e;o--,h+=n[s++]<<f,f+=8}if(h>>>=_,f-=_,0===r.have){e.msg="invalid bit length repeat",r.mode=30;break}k=r.lens[r.have-1],c=3+(3&h),h>>>=2,f-=2}else if(17===v){for(z=_+3;f<z;){if(0===o)break e;o--,h+=n[s++]<<f,f+=8}f-=_,k=0,c=3+(7&(h>>>=_)),h>>>=3,f-=3}else{for(z=_+7;f<z;){if(0===o)break e;o--,h+=n[s++]<<f,f+=8}f-=_,k=0,c=11+(127&(h>>>=_)),h>>>=7,f-=7}if(r.have+c>r.nlen+r.ndist){e.msg="invalid bit length repeat",r.mode=30;break}for(;c--;)r.lens[r.have++]=k}}if(30===r.mode)break;if(0===r.lens[256]){e.msg="invalid code -- missing end-of-block",r.mode=30;break}if(r.lenbits=9,S={bits:r.lenbits},x=R(D,r.lens,0,r.nlen,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg="invalid literal/lengths set",r.mode=30;break}if(r.distbits=6,r.distcode=r.distdyn,S={bits:r.distbits},x=R(F,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,S),r.distbits=S.bits,x){e.msg="invalid distances set",r.mode=30;break}if(r.mode=20,6===t)break e;case 20:r.mode=21;case 21:if(6<=o&&258<=u){e.next_out=a,e.avail_out=u,e.next_in=s,e.avail_in=o,r.hold=h,r.bits=f,T(e,d),a=e.next_out,i=e.output,u=e.avail_out,s=e.next_in,n=e.input,o=e.avail_in,h=r.hold,f=r.bits,12===r.mode&&(r.back=-1);break}for(r.back=0;g=(E=r.lencode[h&(1<<r.lenbits)-1])>>>16&255,v=65535&E,!((_=E>>>24)<=f);){if(0===o)break e;o--,h+=n[s++]<<f,f+=8}if(g&&0==(240&g)){for(b=_,w=g,y=v;g=(E=r.lencode[y+((h&(1<<b+w)-1)>>b)])>>>16&255,v=65535&E,!(b+(_=E>>>24)<=f);){if(0===o)break e;o--,h+=n[s++]<<f,f+=8}h>>>=b,f-=b,r.back+=b}if(h>>>=_,f-=_,r.back+=_,r.length=v,0===g){r.mode=26;break}if(32&g){r.back=-1,r.mode=12;break}if(64&g){e.msg="invalid literal/length code",r.mode=30;break}r.extra=15&g,r.mode=22;case 22:if(r.extra){for(z=r.extra;f<z;){if(0===o)break e;o--,h+=n[s++]<<f,f+=8}r.length+=h&(1<<r.extra)-1,h>>>=r.extra,f-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;g=(E=r.distcode[h&(1<<r.distbits)-1])>>>16&255,v=65535&E,!((_=E>>>24)<=f);){if(0===o)break e;o--,h+=n[s++]<<f,f+=8}if(0==(240&g)){for(b=_,w=g,y=v;g=(E=r.distcode[y+((h&(1<<b+w)-1)>>b)])>>>16&255,v=65535&E,!(b+(_=E>>>24)<=f);){if(0===o)break e;o--,h+=n[s++]<<f,f+=8}h>>>=b,f-=b,r.back+=b}if(h>>>=_,f-=_,r.back+=_,64&g){e.msg="invalid distance code",r.mode=30;break}r.offset=v,r.extra=15&g,r.mode=24;case 24:if(r.extra){for(z=r.extra;f<z;){if(0===o)break e;o--,h+=n[s++]<<f,f+=8}r.offset+=h&(1<<r.extra)-1,h>>>=r.extra,f-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg="invalid distance too far back",r.mode=30;break}r.mode=25;case 25:if(0===u)break e;if(c=d-u,r.offset>c){if((c=r.offset-c)>r.whave&&r.sane){e.msg="invalid distance too far back",r.mode=30;break}p=c>r.wnext?(c-=r.wnext,r.wsize-c):r.wnext-c,c>r.length&&(c=r.length),m=r.window}else m=i,p=a-r.offset,c=r.length;for(u<c&&(c=u),u-=c,r.length-=c;i[a++]=m[p++],--c;);0===r.length&&(r.mode=21);break;case 26:if(0===u)break e;i[a++]=r.length,u--,r.mode=21;break;case 27:if(r.wrap){for(;f<32;){if(0===o)break e;o--,h|=n[s++]<<f,f+=8}if(d-=u,e.total_out+=d,r.total+=d,d&&(e.adler=r.check=r.flags?B(r.check,i,d,a-d):O(r.check,i,d,a-d)),d=u,(r.flags?h:L(h))!==r.check){e.msg="incorrect data check",r.mode=30;break}f=h=0}r.mode=28;case 28:if(r.wrap&&r.flags){for(;f<32;){if(0===o)break e;o--,h+=n[s++]<<f,f+=8}if(h!==(4294967295&r.total)){e.msg="incorrect length check",r.mode=30;break}f=h=0}r.mode=29;case 29:x=1;break e;case 30:x=-3;break e;case 31:return-4;case 32:default:return U}return e.next_out=a,e.avail_out=u,e.next_in=s,e.avail_in=o,r.hold=h,r.bits=f,(r.wsize||d!==e.avail_out&&r.mode<30&&(r.mode<27||4!==t))&&Z(e,e.output,e.next_out,d-e.avail_out)?(r.mode=31,-4):(l-=e.avail_in,d-=e.avail_out,e.total_in+=l,e.total_out+=d,r.total+=d,r.wrap&&d&&(e.adler=r.check=r.flags?B(r.check,i,d,e.next_out-d):O(r.check,i,d,e.next_out-d)),e.data_type=r.bits+(r.last?64:0)+(12===r.mode?128:0)+(20===r.mode||15===r.mode?256:0),(0==l&&0===d||4===t)&&x===N&&(x=-5),x)},r.inflateEnd=function(e){if(!e||!e.state)return U;var t=e.state;return t.window&&(t.window=null),e.state=null,N},r.inflateGetHeader=function(e,t){var r;return e&&e.state?0==(2&(r=e.state).wrap)?U:((r.head=t).done=!1,N):U},r.inflateSetDictionary=function(e,t){var r,n=t.length;return e&&e.state?0!==(r=e.state).wrap&&11!==r.mode?U:11===r.mode&&O(1,t,n,0)!==r.check?-3:Z(e,t,n,n)?(r.mode=31,-4):(r.havedict=1,N):U},r.inflateInfo="pako inflate (from Nodeca project)"},{"../utils/common":41,"./adler32":43,"./crc32":45,"./inffast":48,"./inftrees":50}],50:[function(e,t,r){"use strict";var D=e("../utils/common"),F=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],N=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],U=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],P=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];t.exports=function(e,t,r,n,i,s,a,o){var u,h,f,l,d,c,p,m,_,g=o.bits,v=0,b=0,w=0,y=0,k=0,x=0,S=0,z=0,E=0,C=0,A=null,I=0,O=new D.Buf16(16),B=new D.Buf16(16),T=null,R=0;for(v=0;v<=15;v++)O[v]=0;for(b=0;b<n;b++)O[t[r+b]]++;for(k=g,y=15;1<=y&&0===O[y];y--);if(y<k&&(k=y),0===y)return i[s++]=20971520,i[s++]=20971520,o.bits=1,0;for(w=1;w<y&&0===O[w];w++);for(k<w&&(k=w),v=z=1;v<=15;v++)if(z<<=1,(z-=O[v])<0)return-1;if(0<z&&(0===e||1!==y))return-1;for(B[1]=0,v=1;v<15;v++)B[v+1]=B[v]+O[v];for(b=0;b<n;b++)0!==t[r+b]&&(a[B[t[r+b]]++]=b);if(c=0===e?(A=T=a,19):1===e?(A=F,I-=257,T=N,R-=257,256):(A=U,T=P,-1),v=w,d=s,S=b=C=0,f=-1,l=(E=1<<(x=k))-1,1===e&&852<E||2===e&&592<E)return 1;for(;;){for(p=v-S,_=a[b]<c?(m=0,a[b]):a[b]>c?(m=T[R+a[b]],A[I+a[b]]):(m=96,0),u=1<<v-S,w=h=1<<x;i[d+(C>>S)+(h-=u)]=p<<24|m<<16|_|0,0!==h;);for(u=1<<v-1;C&u;)u>>=1;if(0!==u?(C&=u-1,C+=u):C=0,b++,0==--O[v]){if(v===y)break;v=t[r+a[b]]}if(k<v&&(C&l)!==f){for(0===S&&(S=k),d+=w,z=1<<(x=v-S);x+S<y&&!((z-=O[x+S])<=0);)x++,z<<=1;if(E+=1<<x,1===e&&852<E||2===e&&592<E)return 1;i[f=C&l]=k<<24|x<<16|d-s|0}}return 0!==C&&(i[d+C]=v-S<<24|64<<16|0),o.bits=k,0}},{"../utils/common":41}],51:[function(e,t,r){"use strict";t.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],52:[function(e,t,r){"use strict";var o=e("../utils/common");function n(e){for(var t=e.length;0<=--t;)e[t]=0}var _=15,i=16,u=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],h=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],a=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],f=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],l=new Array(576);n(l);var d=new Array(60);n(d);var c=new Array(512);n(c);var p=new Array(256);n(p);var m=new Array(29);n(m);var g,v,b,w=new Array(30);function y(e,t,r,n,i){this.static_tree=e,this.extra_bits=t,this.extra_base=r,this.elems=n,this.max_length=i,this.has_stree=e&&e.length}function s(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}function k(e){return e<256?c[e]:c[256+(e>>>7)]}function x(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function S(e,t,r){e.bi_valid>i-r?(e.bi_buf|=t<<e.bi_valid&65535,x(e,e.bi_buf),e.bi_buf=t>>i-e.bi_valid,e.bi_valid+=r-i):(e.bi_buf|=t<<e.bi_valid&65535,e.bi_valid+=r)}function z(e,t,r){S(e,r[2*t],r[2*t+1])}function E(e,t){for(var r=0;r|=1&e,e>>>=1,r<<=1,0<--t;);return r>>>1}function C(e,t,r){var n,i,s=new Array(_+1),a=0;for(n=1;n<=_;n++)s[n]=a=a+r[n-1]<<1;for(i=0;i<=t;i++){var o=e[2*i+1];0!==o&&(e[2*i]=E(s[o]++,o))}}function A(e){var t;for(t=0;t<286;t++)e.dyn_ltree[2*t]=0;for(t=0;t<30;t++)e.dyn_dtree[2*t]=0;for(t=0;t<19;t++)e.bl_tree[2*t]=0;e.dyn_ltree[512]=1,e.opt_len=e.static_len=0,e.last_lit=e.matches=0}function I(e){8<e.bi_valid?x(e,e.bi_buf):0<e.bi_valid&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0}function O(e,t,r,n){var i=2*t,s=2*r;return e[i]<e[s]||e[i]===e[s]&&n[t]<=n[r]}function B(e,t,r){for(var n=e.heap[r],i=r<<1;i<=e.heap_len&&(i<e.heap_len&&O(t,e.heap[i+1],e.heap[i],e.depth)&&i++,!O(t,n,e.heap[i],e.depth));)e.heap[r]=e.heap[i],r=i,i<<=1;e.heap[r]=n}function T(e,t,r){var n,i,s,a,o=0;if(0!==e.last_lit)for(;n=e.pending_buf[e.d_buf+2*o]<<8|e.pending_buf[e.d_buf+2*o+1],i=e.pending_buf[e.l_buf+o],o++,0===n?z(e,i,t):(z(e,(s=p[i])+256+1,t),0!==(a=u[s])&&S(e,i-=m[s],a),z(e,s=k(--n),r),0!==(a=h[s])&&S(e,n-=w[s],a)),o<e.last_lit;);z(e,256,t)}function R(e,t){var r,n,i,s=t.dyn_tree,a=t.stat_desc.static_tree,o=t.stat_desc.has_stree,u=t.stat_desc.elems,h=-1;for(e.heap_len=0,e.heap_max=573,r=0;r<u;r++)0!==s[2*r]?(e.heap[++e.heap_len]=h=r,e.depth[r]=0):s[2*r+1]=0;for(;e.heap_len<2;)s[2*(i=e.heap[++e.heap_len]=h<2?++h:0)]=1,e.depth[i]=0,e.opt_len--,o&&(e.static_len-=a[2*i+1]);for(t.max_code=h,r=e.heap_len>>1;1<=r;r--)B(e,s,r);for(i=u;r=e.heap[1],e.heap[1]=e.heap[e.heap_len--],B(e,s,1),n=e.heap[1],e.heap[--e.heap_max]=r,e.heap[--e.heap_max]=n,s[2*i]=s[2*r]+s[2*n],e.depth[i]=(e.depth[r]>=e.depth[n]?e.depth[r]:e.depth[n])+1,s[2*r+1]=s[2*n+1]=i,e.heap[1]=i++,B(e,s,1),2<=e.heap_len;);e.heap[--e.heap_max]=e.heap[1],function(e,t){var r,n,i,s,a,o,u=t.dyn_tree,h=t.max_code,f=t.stat_desc.static_tree,l=t.stat_desc.has_stree,d=t.stat_desc.extra_bits,c=t.stat_desc.extra_base,p=t.stat_desc.max_length,m=0;for(s=0;s<=_;s++)e.bl_count[s]=0;for(u[2*e.heap[e.heap_max]+1]=0,r=e.heap_max+1;r<573;r++)p<(s=u[2*u[2*(n=e.heap[r])+1]+1]+1)&&(s=p,m++),u[2*n+1]=s,h<n||(e.bl_count[s]++,a=0,c<=n&&(a=d[n-c]),o=u[2*n],e.opt_len+=o*(s+a),l&&(e.static_len+=o*(f[2*n+1]+a)));if(0!==m){do{for(s=p-1;0===e.bl_count[s];)s--;e.bl_count[s]--,e.bl_count[s+1]+=2,e.bl_count[p]--,m-=2}while(0<m);for(s=p;0!==s;s--)for(n=e.bl_count[s];0!==n;)h<(i=e.heap[--r])||(u[2*i+1]!==s&&(e.opt_len+=(s-u[2*i+1])*u[2*i],u[2*i+1]=s),n--)}}(e,t),C(s,h,e.bl_count)}function D(e,t,r){var n,i,s=-1,a=t[1],o=0,u=7,h=4;for(0===a&&(u=138,h=3),t[2*(r+1)+1]=65535,n=0;n<=r;n++)i=a,a=t[2*(n+1)+1],++o<u&&i===a||(o<h?e.bl_tree[2*i]+=o:0!==i?(i!==s&&e.bl_tree[2*i]++,e.bl_tree[32]++):o<=10?e.bl_tree[34]++:e.bl_tree[36]++,s=i,h=(o=0)===a?(u=138,3):i===a?(u=6,3):(u=7,4))}function F(e,t,r){var n,i,s=-1,a=t[1],o=0,u=7,h=4;for(0===a&&(u=138,h=3),n=0;n<=r;n++)if(i=a,a=t[2*(n+1)+1],!(++o<u&&i===a)){if(o<h)for(;z(e,i,e.bl_tree),0!=--o;);else 0!==i?(i!==s&&(z(e,i,e.bl_tree),o--),z(e,16,e.bl_tree),S(e,o-3,2)):o<=10?(z(e,17,e.bl_tree),S(e,o-3,3)):(z(e,18,e.bl_tree),S(e,o-11,7));s=i,h=(o=0)===a?(u=138,3):i===a?(u=6,3):(u=7,4)}}n(w);var N=!1;function U(e,t,r,n){var i,s,a;S(e,0+(n?1:0),3),s=t,a=r,I(i=e),x(i,a),x(i,~a),o.arraySet(i.pending_buf,i.window,s,a,i.pending),i.pending+=a}r._tr_init=function(e){N||(function(){var e,t,r,n,i,s=new Array(_+1);for(n=r=0;n<28;n++)for(m[n]=r,e=0;e<1<<u[n];e++)p[r++]=n;for(p[r-1]=n,n=i=0;n<16;n++)for(w[n]=i,e=0;e<1<<h[n];e++)c[i++]=n;for(i>>=7;n<30;n++)for(w[n]=i<<7,e=0;e<1<<h[n]-7;e++)c[256+i++]=n;for(t=0;t<=_;t++)s[t]=0;for(e=0;e<=143;)l[2*e+1]=8,e++,s[8]++;for(;e<=255;)l[2*e+1]=9,e++,s[9]++;for(;e<=279;)l[2*e+1]=7,e++,s[7]++;for(;e<=287;)l[2*e+1]=8,e++,s[8]++;for(C(l,287,s),e=0;e<30;e++)d[2*e+1]=5,d[2*e]=E(e,5);g=new y(l,u,257,286,_),v=new y(d,h,0,30,_),b=new y(new Array(0),a,0,19,7)}(),N=!0),e.l_desc=new s(e.dyn_ltree,g),e.d_desc=new s(e.dyn_dtree,v),e.bl_desc=new s(e.bl_tree,b),e.bi_buf=0,e.bi_valid=0,A(e)},r._tr_stored_block=U,r._tr_flush_block=function(e,t,r,n){var i,s,a=0;0<e.level?(2===e.strm.data_type&&(e.strm.data_type=function(e){var t,r=4093624447;for(t=0;t<=31;t++,r>>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return 0;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return 1;for(t=32;t<256;t++)if(0!==e.dyn_ltree[2*t])return 1;return 0}(e)),R(e,e.l_desc),R(e,e.d_desc),a=function(e){var t;for(D(e,e.dyn_ltree,e.l_desc.max_code),D(e,e.dyn_dtree,e.d_desc.max_code),R(e,e.bl_desc),t=18;3<=t&&0===e.bl_tree[2*f[t]+1];t--);return e.opt_len+=3*(t+1)+5+5+4,t}(e),i=e.opt_len+3+7>>>3,(s=e.static_len+3+7>>>3)<=i&&(i=s)):i=s=r+5,r+4<=i&&-1!==t?U(e,t,r,n):4===e.strategy||s===i?(S(e,2+(n?1:0),3),T(e,l,d)):(S(e,4+(n?1:0),3),function(e,t,r,n){var i;for(S(e,t-257,5),S(e,r-1,5),S(e,n-4,4),i=0;i<n;i++)S(e,e.bl_tree[2*f[i]+1],3);F(e,e.dyn_ltree,t-1),F(e,e.dyn_dtree,r-1)}(e,e.l_desc.max_code+1,e.d_desc.max_code+1,a+1),T(e,e.dyn_ltree,e.dyn_dtree)),A(e),n&&I(e)},r._tr_tally=function(e,t,r){return e.pending_buf[e.d_buf+2*e.last_lit]=t>>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(p[r]+256+1)]++,e.dyn_dtree[2*k(t)]++),e.last_lit===e.lit_bufsize-1},r._tr_align=function(e){var t;S(e,2,3),z(e,256,l),16===(t=e).bi_valid?(x(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):8<=t.bi_valid&&(t.pending_buf[t.pending++]=255&t.bi_buf,t.bi_buf>>=8,t.bi_valid-=8)}},{"../utils/common":41}],53:[function(e,t,r){"use strict";t.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(e,t,r){"use strict";t.exports="function"==typeof setImmediate?setImmediate:function(){var e=[].slice.apply(arguments);e.splice(1,0,0),setTimeout.apply(null,e)}},{}]},{},[10])(10)})}).call(this,void 0!==r?r:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[1])(1)})}).call(this,void 0!==r?r:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[1])(1)})}).call(this,void 0!==r?r:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[1])(1)})}).call(this,void 0!==r?r:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[1])(1)})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[1])(1)});
-/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__("yLpj"), __webpack_require__("tjlA").Buffer, __webpack_require__("URgk").setImmediate))
+!function(t){if(true)module.exports=t();else {}}(function(){return function s(a,o,h){function u(r,t){if(!o[r]){if(!a[r]){var e="function"==typeof require&&require;if(!t&&e)return require(r,!0);if(l)return l(r,!0);var i=new Error("Cannot find module '"+r+"'");throw i.code="MODULE_NOT_FOUND",i}var n=o[r]={exports:{}};a[r][0].call(n.exports,function(t){var e=a[r][1][t];return u(e||t)},n,n.exports,s,a,o,h)}return o[r].exports}for(var l="function"==typeof require&&require,t=0;t<h.length;t++)u(h[t]);return u}({1:[function(t,e,r){"use strict";var c=t("./utils"),d=t("./support"),p="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";r.encode=function(t){for(var e,r,i,n,s,a,o,h=[],u=0,l=t.length,f=l,d="string"!==c.getTypeOf(t);u<t.length;)f=l-u,i=d?(e=t[u++],r=u<l?t[u++]:0,u<l?t[u++]:0):(e=t.charCodeAt(u++),r=u<l?t.charCodeAt(u++):0,u<l?t.charCodeAt(u++):0),n=e>>2,s=(3&e)<<4|r>>4,a=1<f?(15&r)<<2|i>>6:64,o=2<f?63&i:64,h.push(p.charAt(n)+p.charAt(s)+p.charAt(a)+p.charAt(o));return h.join("")},r.decode=function(t){var e,r,i,n,s,a,o=0,h=0,u="data:";if(t.substr(0,u.length)===u)throw new Error("Invalid base64 input, it looks like a data url.");var l,f=3*(t=t.replace(/[^A-Za-z0-9\+\/\=]/g,"")).length/4;if(t.charAt(t.length-1)===p.charAt(64)&&f--,t.charAt(t.length-2)===p.charAt(64)&&f--,f%1!=0)throw new Error("Invalid base64 input, bad content length.");for(l=d.uint8array?new Uint8Array(0|f):new Array(0|f);o<t.length;)e=p.indexOf(t.charAt(o++))<<2|(n=p.indexOf(t.charAt(o++)))>>4,r=(15&n)<<4|(s=p.indexOf(t.charAt(o++)))>>2,i=(3&s)<<6|(a=p.indexOf(t.charAt(o++))),l[h++]=e,64!==s&&(l[h++]=r),64!==a&&(l[h++]=i);return l}},{"./support":30,"./utils":32}],2:[function(t,e,r){"use strict";var i=t("./external"),n=t("./stream/DataWorker"),s=t("./stream/Crc32Probe"),a=t("./stream/DataLengthProbe");function o(t,e,r,i,n){this.compressedSize=t,this.uncompressedSize=e,this.crc32=r,this.compression=i,this.compressedContent=n}o.prototype={getContentWorker:function(){var t=new n(i.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new a("data_length")),e=this;return t.on("end",function(){if(this.streamInfo.data_length!==e.uncompressedSize)throw new Error("Bug : uncompressed data size mismatch")}),t},getCompressedWorker:function(){return new n(i.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize",this.compressedSize).withStreamInfo("uncompressedSize",this.uncompressedSize).withStreamInfo("crc32",this.crc32).withStreamInfo("compression",this.compression)}},o.createWorkerFrom=function(t,e,r){return t.pipe(new s).pipe(new a("uncompressedSize")).pipe(e.compressWorker(r)).pipe(new a("compressedSize")).withStreamInfo("compression",e)},e.exports=o},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(t,e,r){"use strict";var i=t("./stream/GenericWorker");r.STORE={magic:"\0\0",compressWorker:function(t){return new i("STORE compression")},uncompressWorker:function(){return new i("STORE decompression")}},r.DEFLATE=t("./flate")},{"./flate":7,"./stream/GenericWorker":28}],4:[function(t,e,r){"use strict";var i=t("./utils");var o=function(){for(var t,e=[],r=0;r<256;r++){t=r;for(var i=0;i<8;i++)t=1&t?3988292384^t>>>1:t>>>1;e[r]=t}return e}();e.exports=function(t,e){return void 0!==t&&t.length?"string"!==i.getTypeOf(t)?function(t,e,r,i){var n=o,s=i+r;t^=-1;for(var a=i;a<s;a++)t=t>>>8^n[255&(t^e[a])];return-1^t}(0|e,t,t.length,0):function(t,e,r,i){var n=o,s=i+r;t^=-1;for(var a=i;a<s;a++)t=t>>>8^n[255&(t^e.charCodeAt(a))];return-1^t}(0|e,t,t.length,0):0}},{"./utils":32}],5:[function(t,e,r){"use strict";r.base64=!1,r.binary=!1,r.dir=!1,r.createFolders=!0,r.date=null,r.compression=null,r.compressionOptions=null,r.comment=null,r.unixPermissions=null,r.dosPermissions=null},{}],6:[function(t,e,r){"use strict";var i=null;i="undefined"!=typeof Promise?Promise:t("lie"),e.exports={Promise:i}},{lie:37}],7:[function(t,e,r){"use strict";var i="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Uint32Array,n=t("pako"),s=t("./utils"),a=t("./stream/GenericWorker"),o=i?"uint8array":"array";function h(t,e){a.call(this,"FlateWorker/"+t),this._pako=null,this._pakoAction=t,this._pakoOptions=e,this.meta={}}r.magic="\b\0",s.inherits(h,a),h.prototype.processChunk=function(t){this.meta=t.meta,null===this._pako&&this._createPako(),this._pako.push(s.transformTo(o,t.data),!1)},h.prototype.flush=function(){a.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},h.prototype.cleanUp=function(){a.prototype.cleanUp.call(this),this._pako=null},h.prototype._createPako=function(){this._pako=new n[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var e=this;this._pako.onData=function(t){e.push({data:t,meta:e.meta})}},r.compressWorker=function(t){return new h("Deflate",t)},r.uncompressWorker=function(){return new h("Inflate",{})}},{"./stream/GenericWorker":28,"./utils":32,pako:38}],8:[function(t,e,r){"use strict";function A(t,e){var r,i="";for(r=0;r<e;r++)i+=String.fromCharCode(255&t),t>>>=8;return i}function i(t,e,r,i,n,s){var a,o,h=t.file,u=t.compression,l=s!==O.utf8encode,f=I.transformTo("string",s(h.name)),d=I.transformTo("string",O.utf8encode(h.name)),c=h.comment,p=I.transformTo("string",s(c)),m=I.transformTo("string",O.utf8encode(c)),_=d.length!==h.name.length,g=m.length!==c.length,b="",v="",y="",w=h.dir,k=h.date,x={crc32:0,compressedSize:0,uncompressedSize:0};e&&!r||(x.crc32=t.crc32,x.compressedSize=t.compressedSize,x.uncompressedSize=t.uncompressedSize);var S=0;e&&(S|=8),l||!_&&!g||(S|=2048);var z=0,C=0;w&&(z|=16),"UNIX"===n?(C=798,z|=function(t,e){var r=t;return t||(r=e?16893:33204),(65535&r)<<16}(h.unixPermissions,w)):(C=20,z|=function(t){return 63&(t||0)}(h.dosPermissions)),a=k.getUTCHours(),a<<=6,a|=k.getUTCMinutes(),a<<=5,a|=k.getUTCSeconds()/2,o=k.getUTCFullYear()-1980,o<<=4,o|=k.getUTCMonth()+1,o<<=5,o|=k.getUTCDate(),_&&(v=A(1,1)+A(B(f),4)+d,b+="up"+A(v.length,2)+v),g&&(y=A(1,1)+A(B(p),4)+m,b+="uc"+A(y.length,2)+y);var E="";return E+="\n\0",E+=A(S,2),E+=u.magic,E+=A(a,2),E+=A(o,2),E+=A(x.crc32,4),E+=A(x.compressedSize,4),E+=A(x.uncompressedSize,4),E+=A(f.length,2),E+=A(b.length,2),{fileRecord:R.LOCAL_FILE_HEADER+E+f+b,dirRecord:R.CENTRAL_FILE_HEADER+A(C,2)+E+A(p.length,2)+"\0\0\0\0"+A(z,4)+A(i,4)+f+b+p}}var I=t("../utils"),n=t("../stream/GenericWorker"),O=t("../utf8"),B=t("../crc32"),R=t("../signature");function s(t,e,r,i){n.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=e,this.zipPlatform=r,this.encodeFileName=i,this.streamFiles=t,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}I.inherits(s,n),s.prototype.push=function(t){var e=t.meta.percent||0,r=this.entriesCount,i=this._sources.length;this.accumulate?this.contentBuffer.push(t):(this.bytesWritten+=t.data.length,n.prototype.push.call(this,{data:t.data,meta:{currentFile:this.currentFile,percent:r?(e+100*(r-i-1))/r:100}}))},s.prototype.openedSource=function(t){this.currentSourceOffset=this.bytesWritten,this.currentFile=t.file.name;var e=this.streamFiles&&!t.file.dir;if(e){var r=i(t,e,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:r.fileRecord,meta:{percent:0}})}else this.accumulate=!0},s.prototype.closedSource=function(t){this.accumulate=!1;var e=this.streamFiles&&!t.file.dir,r=i(t,e,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(r.dirRecord),e)this.push({data:function(t){return R.DATA_DESCRIPTOR+A(t.crc32,4)+A(t.compressedSize,4)+A(t.uncompressedSize,4)}(t),meta:{percent:100}});else for(this.push({data:r.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},s.prototype.flush=function(){for(var t=this.bytesWritten,e=0;e<this.dirRecords.length;e++)this.push({data:this.dirRecords[e],meta:{percent:100}});var r=this.bytesWritten-t,i=function(t,e,r,i,n){var s=I.transformTo("string",n(i));return R.CENTRAL_DIRECTORY_END+"\0\0\0\0"+A(t,2)+A(t,2)+A(e,4)+A(r,4)+A(s.length,2)+s}(this.dirRecords.length,r,t,this.zipComment,this.encodeFileName);this.push({data:i,meta:{percent:100}})},s.prototype.prepareNextSource=function(){this.previous=this._sources.shift(),this.openedSource(this.previous.streamInfo),this.isPaused?this.previous.pause():this.previous.resume()},s.prototype.registerPrevious=function(t){this._sources.push(t);var e=this;return t.on("data",function(t){e.processChunk(t)}),t.on("end",function(){e.closedSource(e.previous.streamInfo),e._sources.length?e.prepareNextSource():e.end()}),t.on("error",function(t){e.error(t)}),this},s.prototype.resume=function(){return!!n.prototype.resume.call(this)&&(!this.previous&&this._sources.length?(this.prepareNextSource(),!0):this.previous||this._sources.length||this.generatedError?void 0:(this.end(),!0))},s.prototype.error=function(t){var e=this._sources;if(!n.prototype.error.call(this,t))return!1;for(var r=0;r<e.length;r++)try{e[r].error(t)}catch(t){}return!0},s.prototype.lock=function(){n.prototype.lock.call(this);for(var t=this._sources,e=0;e<t.length;e++)t[e].lock()},e.exports=s},{"../crc32":4,"../signature":23,"../stream/GenericWorker":28,"../utf8":31,"../utils":32}],9:[function(t,e,r){"use strict";var u=t("../compressions"),i=t("./ZipFileWorker");r.generateWorker=function(t,a,e){var o=new i(a.streamFiles,e,a.platform,a.encodeFileName),h=0;try{t.forEach(function(t,e){h++;var r=function(t,e){var r=t||e,i=u[r];if(!i)throw new Error(r+" is not a valid compression method !");return i}(e.options.compression,a.compression),i=e.options.compressionOptions||a.compressionOptions||{},n=e.dir,s=e.date;e._compressWorker(r,i).withStreamInfo("file",{name:t,dir:n,date:s,comment:e.comment||"",unixPermissions:e.unixPermissions,dosPermissions:e.dosPermissions}).pipe(o)}),o.entriesCount=h}catch(t){o.error(t)}return o}},{"../compressions":3,"./ZipFileWorker":8}],10:[function(t,e,r){"use strict";function i(){if(!(this instanceof i))return new i;if(arguments.length)throw new Error("The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.");this.files=Object.create(null),this.comment=null,this.root="",this.clone=function(){var t=new i;for(var e in this)"function"!=typeof this[e]&&(t[e]=this[e]);return t}}(i.prototype=t("./object")).loadAsync=t("./load"),i.support=t("./support"),i.defaults=t("./defaults"),i.version="3.7.1",i.loadAsync=function(t,e){return(new i).loadAsync(t,e)},i.external=t("./external"),e.exports=i},{"./defaults":5,"./external":6,"./load":11,"./object":15,"./support":30}],11:[function(t,e,r){"use strict";var i=t("./utils"),n=t("./external"),o=t("./utf8"),h=t("./zipEntries"),s=t("./stream/Crc32Probe"),u=t("./nodejsUtils");function l(i){return new n.Promise(function(t,e){var r=i.decompressed.getContentWorker().pipe(new s);r.on("error",function(t){e(t)}).on("end",function(){r.streamInfo.crc32!==i.decompressed.crc32?e(new Error("Corrupted zip : CRC32 mismatch")):t()}).resume()})}e.exports=function(t,s){var a=this;return s=i.extend(s||{},{base64:!1,checkCRC32:!1,optimizedBinaryString:!1,createFolders:!1,decodeFileName:o.utf8decode}),u.isNode&&u.isStream(t)?n.Promise.reject(new Error("JSZip can't accept a stream when loading a zip file.")):i.prepareContent("the loaded zip file",t,!0,s.optimizedBinaryString,s.base64).then(function(t){var e=new h(s);return e.load(t),e}).then(function(t){var e=[n.Promise.resolve(t)],r=t.files;if(s.checkCRC32)for(var i=0;i<r.length;i++)e.push(l(r[i]));return n.Promise.all(e)}).then(function(t){for(var e=t.shift(),r=e.files,i=0;i<r.length;i++){var n=r[i];a.file(n.fileNameStr,n.decompressed,{binary:!0,optimizedBinaryString:!0,date:n.date,dir:n.dir,comment:n.fileCommentStr.length?n.fileCommentStr:null,unixPermissions:n.unixPermissions,dosPermissions:n.dosPermissions,createFolders:s.createFolders})}return e.zipComment.length&&(a.comment=e.zipComment),a})}},{"./external":6,"./nodejsUtils":14,"./stream/Crc32Probe":25,"./utf8":31,"./utils":32,"./zipEntries":33}],12:[function(t,e,r){"use strict";var i=t("../utils"),n=t("../stream/GenericWorker");function s(t,e){n.call(this,"Nodejs stream input adapter for "+t),this._upstreamEnded=!1,this._bindStream(e)}i.inherits(s,n),s.prototype._bindStream=function(t){var e=this;(this._stream=t).pause(),t.on("data",function(t){e.push({data:t,meta:{percent:0}})}).on("error",function(t){e.isPaused?this.generatedError=t:e.error(t)}).on("end",function(){e.isPaused?e._upstreamEnded=!0:e.end()})},s.prototype.pause=function(){return!!n.prototype.pause.call(this)&&(this._stream.pause(),!0)},s.prototype.resume=function(){return!!n.prototype.resume.call(this)&&(this._upstreamEnded?this.end():this._stream.resume(),!0)},e.exports=s},{"../stream/GenericWorker":28,"../utils":32}],13:[function(t,e,r){"use strict";var n=t("readable-stream").Readable;function i(t,e,r){n.call(this,e),this._helper=t;var i=this;t.on("data",function(t,e){i.push(t)||i._helper.pause(),r&&r(e)}).on("error",function(t){i.emit("error",t)}).on("end",function(){i.push(null)})}t("../utils").inherits(i,n),i.prototype._read=function(){this._helper.resume()},e.exports=i},{"../utils":32,"readable-stream":16}],14:[function(t,e,r){"use strict";e.exports={isNode:"undefined"!=typeof Buffer,newBufferFrom:function(t,e){if(Buffer.from&&Buffer.from!==Uint8Array.from)return Buffer.from(t,e);if("number"==typeof t)throw new Error('The "data" argument must not be a number');return new Buffer(t,e)},allocBuffer:function(t){if(Buffer.alloc)return Buffer.alloc(t);var e=new Buffer(t);return e.fill(0),e},isBuffer:function(t){return Buffer.isBuffer(t)},isStream:function(t){return t&&"function"==typeof t.on&&"function"==typeof t.pause&&"function"==typeof t.resume}}},{}],15:[function(t,e,r){"use strict";function s(t,e,r){var i,n=u.getTypeOf(e),s=u.extend(r||{},f);s.date=s.date||new Date,null!==s.compression&&(s.compression=s.compression.toUpperCase()),"string"==typeof s.unixPermissions&&(s.unixPermissions=parseInt(s.unixPermissions,8)),s.unixPermissions&&16384&s.unixPermissions&&(s.dir=!0),s.dosPermissions&&16&s.dosPermissions&&(s.dir=!0),s.dir&&(t=g(t)),s.createFolders&&(i=_(t))&&b.call(this,i,!0);var a="string"===n&&!1===s.binary&&!1===s.base64;r&&void 0!==r.binary||(s.binary=!a),(e instanceof d&&0===e.uncompressedSize||s.dir||!e||0===e.length)&&(s.base64=!1,s.binary=!0,e="",s.compression="STORE",n="string");var o=null;o=e instanceof d||e instanceof l?e:p.isNode&&p.isStream(e)?new m(t,e):u.prepareContent(t,e,s.binary,s.optimizedBinaryString,s.base64);var h=new c(t,o,s);this.files[t]=h}var n=t("./utf8"),u=t("./utils"),l=t("./stream/GenericWorker"),a=t("./stream/StreamHelper"),f=t("./defaults"),d=t("./compressedObject"),c=t("./zipObject"),o=t("./generate"),p=t("./nodejsUtils"),m=t("./nodejs/NodejsStreamInputAdapter"),_=function(t){"/"===t.slice(-1)&&(t=t.substring(0,t.length-1));var e=t.lastIndexOf("/");return 0<e?t.substring(0,e):""},g=function(t){return"/"!==t.slice(-1)&&(t+="/"),t},b=function(t,e){return e=void 0!==e?e:f.createFolders,t=g(t),this.files[t]||s.call(this,t,null,{dir:!0,createFolders:e}),this.files[t]};function h(t){return"[object RegExp]"===Object.prototype.toString.call(t)}var i={load:function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},forEach:function(t){var e,r,i;for(e in this.files)i=this.files[e],(r=e.slice(this.root.length,e.length))&&e.slice(0,this.root.length)===this.root&&t(r,i)},filter:function(r){var i=[];return this.forEach(function(t,e){r(t,e)&&i.push(e)}),i},file:function(t,e,r){if(1!==arguments.length)return t=this.root+t,s.call(this,t,e,r),this;if(h(t)){var i=t;return this.filter(function(t,e){return!e.dir&&i.test(t)})}var n=this.files[this.root+t];return n&&!n.dir?n:null},folder:function(r){if(!r)return this;if(h(r))return this.filter(function(t,e){return e.dir&&r.test(t)});var t=this.root+r,e=b.call(this,t),i=this.clone();return i.root=e.name,i},remove:function(r){r=this.root+r;var t=this.files[r];if(t||("/"!==r.slice(-1)&&(r+="/"),t=this.files[r]),t&&!t.dir)delete this.files[r];else for(var e=this.filter(function(t,e){return e.name.slice(0,r.length)===r}),i=0;i<e.length;i++)delete this.files[e[i].name];return this},generate:function(t){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},generateInternalStream:function(t){var e,r={};try{if((r=u.extend(t||{},{streamFiles:!1,compression:"STORE",compressionOptions:null,type:"",platform:"DOS",comment:null,mimeType:"application/zip",encodeFileName:n.utf8encode})).type=r.type.toLowerCase(),r.compression=r.compression.toUpperCase(),"binarystring"===r.type&&(r.type="string"),!r.type)throw new Error("No output type specified.");u.checkSupport(r.type),"darwin"!==r.platform&&"freebsd"!==r.platform&&"linux"!==r.platform&&"sunos"!==r.platform||(r.platform="UNIX"),"win32"===r.platform&&(r.platform="DOS");var i=r.comment||this.comment||"";e=o.generateWorker(this,r,i)}catch(t){(e=new l("error")).error(t)}return new a(e,r.type||"string",r.mimeType)},generateAsync:function(t,e){return this.generateInternalStream(t).accumulate(e)},generateNodeStream:function(t,e){return(t=t||{}).type||(t.type="nodebuffer"),this.generateInternalStream(t).toNodejsStream(e)}};e.exports=i},{"./compressedObject":2,"./defaults":5,"./generate":9,"./nodejs/NodejsStreamInputAdapter":12,"./nodejsUtils":14,"./stream/GenericWorker":28,"./stream/StreamHelper":29,"./utf8":31,"./utils":32,"./zipObject":35}],16:[function(t,e,r){e.exports=t("stream")},{stream:void 0}],17:[function(t,e,r){"use strict";var i=t("./DataReader");function n(t){i.call(this,t);for(var e=0;e<this.data.length;e++)t[e]=255&t[e]}t("../utils").inherits(n,i),n.prototype.byteAt=function(t){return this.data[this.zero+t]},n.prototype.lastIndexOfSignature=function(t){for(var e=t.charCodeAt(0),r=t.charCodeAt(1),i=t.charCodeAt(2),n=t.charCodeAt(3),s=this.length-4;0<=s;--s)if(this.data[s]===e&&this.data[s+1]===r&&this.data[s+2]===i&&this.data[s+3]===n)return s-this.zero;return-1},n.prototype.readAndCheckSignature=function(t){var e=t.charCodeAt(0),r=t.charCodeAt(1),i=t.charCodeAt(2),n=t.charCodeAt(3),s=this.readData(4);return e===s[0]&&r===s[1]&&i===s[2]&&n===s[3]},n.prototype.readData=function(t){if(this.checkOffset(t),0===t)return[];var e=this.data.slice(this.zero+this.index,this.zero+this.index+t);return this.index+=t,e},e.exports=n},{"../utils":32,"./DataReader":18}],18:[function(t,e,r){"use strict";var i=t("../utils");function n(t){this.data=t,this.length=t.length,this.index=0,this.zero=0}n.prototype={checkOffset:function(t){this.checkIndex(this.index+t)},checkIndex:function(t){if(this.length<this.zero+t||t<0)throw new Error("End of data reached (data length = "+this.length+", asked index = "+t+"). Corrupted zip ?")},setIndex:function(t){this.checkIndex(t),this.index=t},skip:function(t){this.setIndex(this.index+t)},byteAt:function(t){},readInt:function(t){var e,r=0;for(this.checkOffset(t),e=this.index+t-1;e>=this.index;e--)r=(r<<8)+this.byteAt(e);return this.index+=t,r},readString:function(t){return i.transformTo("string",this.readData(t))},readData:function(t){},lastIndexOfSignature:function(t){},readAndCheckSignature:function(t){},readDate:function(){var t=this.readInt(4);return new Date(Date.UTC(1980+(t>>25&127),(t>>21&15)-1,t>>16&31,t>>11&31,t>>5&63,(31&t)<<1))}},e.exports=n},{"../utils":32}],19:[function(t,e,r){"use strict";var i=t("./Uint8ArrayReader");function n(t){i.call(this,t)}t("../utils").inherits(n,i),n.prototype.readData=function(t){this.checkOffset(t);var e=this.data.slice(this.zero+this.index,this.zero+this.index+t);return this.index+=t,e},e.exports=n},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(t,e,r){"use strict";var i=t("./DataReader");function n(t){i.call(this,t)}t("../utils").inherits(n,i),n.prototype.byteAt=function(t){return this.data.charCodeAt(this.zero+t)},n.prototype.lastIndexOfSignature=function(t){return this.data.lastIndexOf(t)-this.zero},n.prototype.readAndCheckSignature=function(t){return t===this.readData(4)},n.prototype.readData=function(t){this.checkOffset(t);var e=this.data.slice(this.zero+this.index,this.zero+this.index+t);return this.index+=t,e},e.exports=n},{"../utils":32,"./DataReader":18}],21:[function(t,e,r){"use strict";var i=t("./ArrayReader");function n(t){i.call(this,t)}t("../utils").inherits(n,i),n.prototype.readData=function(t){if(this.checkOffset(t),0===t)return new Uint8Array(0);var e=this.data.subarray(this.zero+this.index,this.zero+this.index+t);return this.index+=t,e},e.exports=n},{"../utils":32,"./ArrayReader":17}],22:[function(t,e,r){"use strict";var i=t("../utils"),n=t("../support"),s=t("./ArrayReader"),a=t("./StringReader"),o=t("./NodeBufferReader"),h=t("./Uint8ArrayReader");e.exports=function(t){var e=i.getTypeOf(t);return i.checkSupport(e),"string"!==e||n.uint8array?"nodebuffer"===e?new o(t):n.uint8array?new h(i.transformTo("uint8array",t)):new s(i.transformTo("array",t)):new a(t)}},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(t,e,r){"use strict";r.LOCAL_FILE_HEADER="PK",r.CENTRAL_FILE_HEADER="PK",r.CENTRAL_DIRECTORY_END="PK",r.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK",r.ZIP64_CENTRAL_DIRECTORY_END="PK",r.DATA_DESCRIPTOR="PK\b"},{}],24:[function(t,e,r){"use strict";var i=t("./GenericWorker"),n=t("../utils");function s(t){i.call(this,"ConvertWorker to "+t),this.destType=t}n.inherits(s,i),s.prototype.processChunk=function(t){this.push({data:n.transformTo(this.destType,t.data),meta:t.meta})},e.exports=s},{"../utils":32,"./GenericWorker":28}],25:[function(t,e,r){"use strict";var i=t("./GenericWorker"),n=t("../crc32");function s(){i.call(this,"Crc32Probe"),this.withStreamInfo("crc32",0)}t("../utils").inherits(s,i),s.prototype.processChunk=function(t){this.streamInfo.crc32=n(t.data,this.streamInfo.crc32||0),this.push(t)},e.exports=s},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(t,e,r){"use strict";var i=t("../utils"),n=t("./GenericWorker");function s(t){n.call(this,"DataLengthProbe for "+t),this.propName=t,this.withStreamInfo(t,0)}i.inherits(s,n),s.prototype.processChunk=function(t){if(t){var e=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=e+t.data.length}n.prototype.processChunk.call(this,t)},e.exports=s},{"../utils":32,"./GenericWorker":28}],27:[function(t,e,r){"use strict";var i=t("../utils"),n=t("./GenericWorker");function s(t){n.call(this,"DataWorker");var e=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type="",this._tickScheduled=!1,t.then(function(t){e.dataIsReady=!0,e.data=t,e.max=t&&t.length||0,e.type=i.getTypeOf(t),e.isPaused||e._tickAndRepeat()},function(t){e.error(t)})}i.inherits(s,n),s.prototype.cleanUp=function(){n.prototype.cleanUp.call(this),this.data=null},s.prototype.resume=function(){return!!n.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,i.delay(this._tickAndRepeat,[],this)),!0)},s.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(i.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},s.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var t=null,e=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case"string":t=this.data.substring(this.index,e);break;case"uint8array":t=this.data.subarray(this.index,e);break;case"array":case"nodebuffer":t=this.data.slice(this.index,e)}return this.index=e,this.push({data:t,meta:{percent:this.max?this.index/this.max*100:0}})},e.exports=s},{"../utils":32,"./GenericWorker":28}],28:[function(t,e,r){"use strict";function i(t){this.name=t||"default",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}i.prototype={push:function(t){this.emit("data",t)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit("end"),this.cleanUp(),this.isFinished=!0}catch(t){this.emit("error",t)}return!0},error:function(t){return!this.isFinished&&(this.isPaused?this.generatedError=t:(this.isFinished=!0,this.emit("error",t),this.previous&&this.previous.error(t),this.cleanUp()),!0)},on:function(t,e){return this._listeners[t].push(e),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(t,e){if(this._listeners[t])for(var r=0;r<this._listeners[t].length;r++)this._listeners[t][r].call(this,e)},pipe:function(t){return t.registerPrevious(this)},registerPrevious:function(t){if(this.isLocked)throw new Error("The stream '"+this+"' has already been used.");this.streamInfo=t.streamInfo,this.mergeStreamInfo(),this.previous=t;var e=this;return t.on("data",function(t){e.processChunk(t)}),t.on("end",function(){e.end()}),t.on("error",function(t){e.error(t)}),this},pause:function(){return!this.isPaused&&!this.isFinished&&(this.isPaused=!0,this.previous&&this.previous.pause(),!0)},resume:function(){if(!this.isPaused||this.isFinished)return!1;var t=this.isPaused=!1;return this.generatedError&&(this.error(this.generatedError),t=!0),this.previous&&this.previous.resume(),!t},flush:function(){},processChunk:function(t){this.push(t)},withStreamInfo:function(t,e){return this.extraStreamInfo[t]=e,this.mergeStreamInfo(),this},mergeStreamInfo:function(){for(var t in this.extraStreamInfo)this.extraStreamInfo.hasOwnProperty(t)&&(this.streamInfo[t]=this.extraStreamInfo[t])},lock:function(){if(this.isLocked)throw new Error("The stream '"+this+"' has already been used.");this.isLocked=!0,this.previous&&this.previous.lock()},toString:function(){var t="Worker "+this.name;return this.previous?this.previous+" -> "+t:t}},e.exports=i},{}],29:[function(t,e,r){"use strict";var h=t("../utils"),n=t("./ConvertWorker"),s=t("./GenericWorker"),u=t("../base64"),i=t("../support"),a=t("../external"),o=null;if(i.nodestream)try{o=t("../nodejs/NodejsStreamOutputAdapter")}catch(t){}function l(t,o){return new a.Promise(function(e,r){var i=[],n=t._internalType,s=t._outputType,a=t._mimeType;t.on("data",function(t,e){i.push(t),o&&o(e)}).on("error",function(t){i=[],r(t)}).on("end",function(){try{var t=function(t,e,r){switch(t){case"blob":return h.newBlob(h.transformTo("arraybuffer",e),r);case"base64":return u.encode(e);default:return h.transformTo(t,e)}}(s,function(t,e){var r,i=0,n=null,s=0;for(r=0;r<e.length;r++)s+=e[r].length;switch(t){case"string":return e.join("");case"array":return Array.prototype.concat.apply([],e);case"uint8array":for(n=new Uint8Array(s),r=0;r<e.length;r++)n.set(e[r],i),i+=e[r].length;return n;case"nodebuffer":return Buffer.concat(e);default:throw new Error("concat : unsupported type '"+t+"'")}}(n,i),a);e(t)}catch(t){r(t)}i=[]}).resume()})}function f(t,e,r){var i=e;switch(e){case"blob":case"arraybuffer":i="uint8array";break;case"base64":i="string"}try{this._internalType=i,this._outputType=e,this._mimeType=r,h.checkSupport(i),this._worker=t.pipe(new n(i)),t.lock()}catch(t){this._worker=new s("error"),this._worker.error(t)}}f.prototype={accumulate:function(t){return l(this,t)},on:function(t,e){var r=this;return"data"===t?this._worker.on(t,function(t){e.call(r,t.data,t.meta)}):this._worker.on(t,function(){h.delay(e,arguments,r)}),this},resume:function(){return h.delay(this._worker.resume,[],this._worker),this},pause:function(){return this._worker.pause(),this},toNodejsStream:function(t){if(h.checkSupport("nodestream"),"nodebuffer"!==this._outputType)throw new Error(this._outputType+" is not supported by this method");return new o(this,{objectMode:"nodebuffer"!==this._outputType},t)}},e.exports=f},{"../base64":1,"../external":6,"../nodejs/NodejsStreamOutputAdapter":13,"../support":30,"../utils":32,"./ConvertWorker":24,"./GenericWorker":28}],30:[function(t,e,r){"use strict";if(r.base64=!0,r.array=!0,r.string=!0,r.arraybuffer="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof Uint8Array,r.nodebuffer="undefined"!=typeof Buffer,r.uint8array="undefined"!=typeof Uint8Array,"undefined"==typeof ArrayBuffer)r.blob=!1;else{var i=new ArrayBuffer(0);try{r.blob=0===new Blob([i],{type:"application/zip"}).size}catch(t){try{var n=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);n.append(i),r.blob=0===n.getBlob("application/zip").size}catch(t){r.blob=!1}}}try{r.nodestream=!!t("readable-stream").Readable}catch(t){r.nodestream=!1}},{"readable-stream":16}],31:[function(t,e,s){"use strict";for(var o=t("./utils"),h=t("./support"),r=t("./nodejsUtils"),i=t("./stream/GenericWorker"),u=new Array(256),n=0;n<256;n++)u[n]=252<=n?6:248<=n?5:240<=n?4:224<=n?3:192<=n?2:1;u[254]=u[254]=1;function a(){i.call(this,"utf-8 decode"),this.leftOver=null}function l(){i.call(this,"utf-8 encode")}s.utf8encode=function(t){return h.nodebuffer?r.newBufferFrom(t,"utf-8"):function(t){var e,r,i,n,s,a=t.length,o=0;for(n=0;n<a;n++)55296==(64512&(r=t.charCodeAt(n)))&&n+1<a&&56320==(64512&(i=t.charCodeAt(n+1)))&&(r=65536+(r-55296<<10)+(i-56320),n++),o+=r<128?1:r<2048?2:r<65536?3:4;for(e=h.uint8array?new Uint8Array(o):new Array(o),n=s=0;s<o;n++)55296==(64512&(r=t.charCodeAt(n)))&&n+1<a&&56320==(64512&(i=t.charCodeAt(n+1)))&&(r=65536+(r-55296<<10)+(i-56320),n++),r<128?e[s++]=r:(r<2048?e[s++]=192|r>>>6:(r<65536?e[s++]=224|r>>>12:(e[s++]=240|r>>>18,e[s++]=128|r>>>12&63),e[s++]=128|r>>>6&63),e[s++]=128|63&r);return e}(t)},s.utf8decode=function(t){return h.nodebuffer?o.transformTo("nodebuffer",t).toString("utf-8"):function(t){var e,r,i,n,s=t.length,a=new Array(2*s);for(e=r=0;e<s;)if((i=t[e++])<128)a[r++]=i;else if(4<(n=u[i]))a[r++]=65533,e+=n-1;else{for(i&=2===n?31:3===n?15:7;1<n&&e<s;)i=i<<6|63&t[e++],n--;1<n?a[r++]=65533:i<65536?a[r++]=i:(i-=65536,a[r++]=55296|i>>10&1023,a[r++]=56320|1023&i)}return a.length!==r&&(a.subarray?a=a.subarray(0,r):a.length=r),o.applyFromCharCode(a)}(t=o.transformTo(h.uint8array?"uint8array":"array",t))},o.inherits(a,i),a.prototype.processChunk=function(t){var e=o.transformTo(h.uint8array?"uint8array":"array",t.data);if(this.leftOver&&this.leftOver.length){if(h.uint8array){var r=e;(e=new Uint8Array(r.length+this.leftOver.length)).set(this.leftOver,0),e.set(r,this.leftOver.length)}else e=this.leftOver.concat(e);this.leftOver=null}var i=function(t,e){var r;for((e=e||t.length)>t.length&&(e=t.length),r=e-1;0<=r&&128==(192&t[r]);)r--;return r<0?e:0===r?e:r+u[t[r]]>e?r:e}(e),n=e;i!==e.length&&(h.uint8array?(n=e.subarray(0,i),this.leftOver=e.subarray(i,e.length)):(n=e.slice(0,i),this.leftOver=e.slice(i,e.length))),this.push({data:s.utf8decode(n),meta:t.meta})},a.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:s.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},s.Utf8DecodeWorker=a,o.inherits(l,i),l.prototype.processChunk=function(t){this.push({data:s.utf8encode(t.data),meta:t.meta})},s.Utf8EncodeWorker=l},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(t,e,a){"use strict";var o=t("./support"),h=t("./base64"),r=t("./nodejsUtils"),i=t("set-immediate-shim"),u=t("./external");function n(t){return t}function l(t,e){for(var r=0;r<t.length;++r)e[r]=255&t.charCodeAt(r);return e}a.newBlob=function(e,r){a.checkSupport("blob");try{return new Blob([e],{type:r})}catch(t){try{var i=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);return i.append(e),i.getBlob(r)}catch(t){throw new Error("Bug : can't construct the Blob.")}}};var s={stringifyByChunk:function(t,e,r){var i=[],n=0,s=t.length;if(s<=r)return String.fromCharCode.apply(null,t);for(;n<s;)"array"===e||"nodebuffer"===e?i.push(String.fromCharCode.apply(null,t.slice(n,Math.min(n+r,s)))):i.push(String.fromCharCode.apply(null,t.subarray(n,Math.min(n+r,s)))),n+=r;return i.join("")},stringifyByChar:function(t){for(var e="",r=0;r<t.length;r++)e+=String.fromCharCode(t[r]);return e},applyCanBeUsed:{uint8array:function(){try{return o.uint8array&&1===String.fromCharCode.apply(null,new Uint8Array(1)).length}catch(t){return!1}}(),nodebuffer:function(){try{return o.nodebuffer&&1===String.fromCharCode.apply(null,r.allocBuffer(1)).length}catch(t){return!1}}()}};function f(t){var e=65536,r=a.getTypeOf(t),i=!0;if("uint8array"===r?i=s.applyCanBeUsed.uint8array:"nodebuffer"===r&&(i=s.applyCanBeUsed.nodebuffer),i)for(;1<e;)try{return s.stringifyByChunk(t,r,e)}catch(t){e=Math.floor(e/2)}return s.stringifyByChar(t)}function d(t,e){for(var r=0;r<t.length;r++)e[r]=t[r];return e}a.applyFromCharCode=f;var c={};c.string={string:n,array:function(t){return l(t,new Array(t.length))},arraybuffer:function(t){return c.string.uint8array(t).buffer},uint8array:function(t){return l(t,new Uint8Array(t.length))},nodebuffer:function(t){return l(t,r.allocBuffer(t.length))}},c.array={string:f,array:n,arraybuffer:function(t){return new Uint8Array(t).buffer},uint8array:function(t){return new Uint8Array(t)},nodebuffer:function(t){return r.newBufferFrom(t)}},c.arraybuffer={string:function(t){return f(new Uint8Array(t))},array:function(t){return d(new Uint8Array(t),new Array(t.byteLength))},arraybuffer:n,uint8array:function(t){return new Uint8Array(t)},nodebuffer:function(t){return r.newBufferFrom(new Uint8Array(t))}},c.uint8array={string:f,array:function(t){return d(t,new Array(t.length))},arraybuffer:function(t){return t.buffer},uint8array:n,nodebuffer:function(t){return r.newBufferFrom(t)}},c.nodebuffer={string:f,array:function(t){return d(t,new Array(t.length))},arraybuffer:function(t){return c.nodebuffer.uint8array(t).buffer},uint8array:function(t){return d(t,new Uint8Array(t.length))},nodebuffer:n},a.transformTo=function(t,e){if(e=e||"",!t)return e;a.checkSupport(t);var r=a.getTypeOf(e);return c[r][t](e)},a.getTypeOf=function(t){return"string"==typeof t?"string":"[object Array]"===Object.prototype.toString.call(t)?"array":o.nodebuffer&&r.isBuffer(t)?"nodebuffer":o.uint8array&&t instanceof Uint8Array?"uint8array":o.arraybuffer&&t instanceof ArrayBuffer?"arraybuffer":void 0},a.checkSupport=function(t){if(!o[t.toLowerCase()])throw new Error(t+" is not supported by this platform")},a.MAX_VALUE_16BITS=65535,a.MAX_VALUE_32BITS=-1,a.pretty=function(t){var e,r,i="";for(r=0;r<(t||"").length;r++)i+="\\x"+((e=t.charCodeAt(r))<16?"0":"")+e.toString(16).toUpperCase();return i},a.delay=function(t,e,r){i(function(){t.apply(r||null,e||[])})},a.inherits=function(t,e){function r(){}r.prototype=e.prototype,t.prototype=new r},a.extend=function(){var t,e,r={};for(t=0;t<arguments.length;t++)for(e in arguments[t])arguments[t].hasOwnProperty(e)&&void 0===r[e]&&(r[e]=arguments[t][e]);return r},a.prepareContent=function(r,t,i,n,s){return u.Promise.resolve(t).then(function(i){return o.blob&&(i instanceof Blob||-1!==["[object File]","[object Blob]"].indexOf(Object.prototype.toString.call(i)))&&"undefined"!=typeof FileReader?new u.Promise(function(e,r){var t=new FileReader;t.onload=function(t){e(t.target.result)},t.onerror=function(t){r(t.target.error)},t.readAsArrayBuffer(i)}):i}).then(function(t){var e=a.getTypeOf(t);return e?("arraybuffer"===e?t=a.transformTo("uint8array",t):"string"===e&&(s?t=h.decode(t):i&&!0!==n&&(t=function(t){return l(t,o.uint8array?new Uint8Array(t.length):new Array(t.length))}(t))),t):u.Promise.reject(new Error("Can't read the data of '"+r+"'. Is it in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?"))})}},{"./base64":1,"./external":6,"./nodejsUtils":14,"./support":30,"set-immediate-shim":54}],33:[function(t,e,r){"use strict";var i=t("./reader/readerFor"),n=t("./utils"),s=t("./signature"),a=t("./zipEntry"),o=(t("./utf8"),t("./support"));function h(t){this.files=[],this.loadOptions=t}h.prototype={checkSignature:function(t){if(!this.reader.readAndCheckSignature(t)){this.reader.index-=4;var e=this.reader.readString(4);throw new Error("Corrupted zip or bug: unexpected signature ("+n.pretty(e)+", expected "+n.pretty(t)+")")}},isSignature:function(t,e){var r=this.reader.index;this.reader.setIndex(t);var i=this.reader.readString(4)===e;return this.reader.setIndex(r),i},readBlockEndOfCentral:function(){this.diskNumber=this.reader.readInt(2),this.diskWithCentralDirStart=this.reader.readInt(2),this.centralDirRecordsOnThisDisk=this.reader.readInt(2),this.centralDirRecords=this.reader.readInt(2),this.centralDirSize=this.reader.readInt(4),this.centralDirOffset=this.reader.readInt(4),this.zipCommentLength=this.reader.readInt(2);var t=this.reader.readData(this.zipCommentLength),e=o.uint8array?"uint8array":"array",r=n.transformTo(e,t);this.zipComment=this.loadOptions.decodeFileName(r)},readBlockZip64EndOfCentral:function(){this.zip64EndOfCentralSize=this.reader.readInt(8),this.reader.skip(4),this.diskNumber=this.reader.readInt(4),this.diskWithCentralDirStart=this.reader.readInt(4),this.centralDirRecordsOnThisDisk=this.reader.readInt(8),this.centralDirRecords=this.reader.readInt(8),this.centralDirSize=this.reader.readInt(8),this.centralDirOffset=this.reader.readInt(8),this.zip64ExtensibleData={};for(var t,e,r,i=this.zip64EndOfCentralSize-44;0<i;)t=this.reader.readInt(2),e=this.reader.readInt(4),r=this.reader.readData(e),this.zip64ExtensibleData[t]={id:t,length:e,value:r}},readBlockZip64EndOfCentralLocator:function(){if(this.diskWithZip64CentralDirStart=this.reader.readInt(4),this.relativeOffsetEndOfZip64CentralDir=this.reader.readInt(8),this.disksCount=this.reader.readInt(4),1<this.disksCount)throw new Error("Multi-volumes zip are not supported")},readLocalFiles:function(){var t,e;for(t=0;t<this.files.length;t++)e=this.files[t],this.reader.setIndex(e.localHeaderOffset),this.checkSignature(s.LOCAL_FILE_HEADER),e.readLocalPart(this.reader),e.handleUTF8(),e.processAttributes()},readCentralDir:function(){var t;for(this.reader.setIndex(this.centralDirOffset);this.reader.readAndCheckSignature(s.CENTRAL_FILE_HEADER);)(t=new a({zip64:this.zip64},this.loadOptions)).readCentralPart(this.reader),this.files.push(t);if(this.centralDirRecords!==this.files.length&&0!==this.centralDirRecords&&0===this.files.length)throw new Error("Corrupted zip or bug: expected "+this.centralDirRecords+" records in central dir, got "+this.files.length)},readEndOfCentral:function(){var t=this.reader.lastIndexOfSignature(s.CENTRAL_DIRECTORY_END);if(t<0)throw!this.isSignature(0,s.LOCAL_FILE_HEADER)?new Error("Can't find end of central directory : is this a zip file ? If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html"):new Error("Corrupted zip: can't find end of central directory");this.reader.setIndex(t);var e=t;if(this.checkSignature(s.CENTRAL_DIRECTORY_END),this.readBlockEndOfCentral(),this.diskNumber===n.MAX_VALUE_16BITS||this.diskWithCentralDirStart===n.MAX_VALUE_16BITS||this.centralDirRecordsOnThisDisk===n.MAX_VALUE_16BITS||this.centralDirRecords===n.MAX_VALUE_16BITS||this.centralDirSize===n.MAX_VALUE_32BITS||this.centralDirOffset===n.MAX_VALUE_32BITS){if(this.zip64=!0,(t=this.reader.lastIndexOfSignature(s.ZIP64_CENTRAL_DIRECTORY_LOCATOR))<0)throw new Error("Corrupted zip: can't find the ZIP64 end of central directory locator");if(this.reader.setIndex(t),this.checkSignature(s.ZIP64_CENTRAL_DIRECTORY_LOCATOR),this.readBlockZip64EndOfCentralLocator(),!this.isSignature(this.relativeOffsetEndOfZip64CentralDir,s.ZIP64_CENTRAL_DIRECTORY_END)&&(this.relativeOffsetEndOfZip64CentralDir=this.reader.lastIndexOfSignature(s.ZIP64_CENTRAL_DIRECTORY_END),this.relativeOffsetEndOfZip64CentralDir<0))throw new Error("Corrupted zip: can't find the ZIP64 end of central directory");this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir),this.checkSignature(s.ZIP64_CENTRAL_DIRECTORY_END),this.readBlockZip64EndOfCentral()}var r=this.centralDirOffset+this.centralDirSize;this.zip64&&(r+=20,r+=12+this.zip64EndOfCentralSize);var i=e-r;if(0<i)this.isSignature(e,s.CENTRAL_FILE_HEADER)||(this.reader.zero=i);else if(i<0)throw new Error("Corrupted zip: missing "+Math.abs(i)+" bytes.")},prepareReader:function(t){this.reader=i(t)},load:function(t){this.prepareReader(t),this.readEndOfCentral(),this.readCentralDir(),this.readLocalFiles()}},e.exports=h},{"./reader/readerFor":22,"./signature":23,"./support":30,"./utf8":31,"./utils":32,"./zipEntry":34}],34:[function(t,e,r){"use strict";var i=t("./reader/readerFor"),s=t("./utils"),n=t("./compressedObject"),a=t("./crc32"),o=t("./utf8"),h=t("./compressions"),u=t("./support");function l(t,e){this.options=t,this.loadOptions=e}l.prototype={isEncrypted:function(){return 1==(1&this.bitFlag)},useUTF8:function(){return 2048==(2048&this.bitFlag)},readLocalPart:function(t){var e,r;if(t.skip(22),this.fileNameLength=t.readInt(2),r=t.readInt(2),this.fileName=t.readData(this.fileNameLength),t.skip(r),-1===this.compressedSize||-1===this.uncompressedSize)throw new Error("Bug or corrupted zip : didn't get enough information from the central directory (compressedSize === -1 || uncompressedSize === -1)");if(null===(e=function(t){for(var e in h)if(h.hasOwnProperty(e)&&h[e].magic===t)return h[e];return null}(this.compressionMethod)))throw new Error("Corrupted zip : compression "+s.pretty(this.compressionMethod)+" unknown (inner file : "+s.transformTo("string",this.fileName)+")");this.decompressed=new n(this.compressedSize,this.uncompressedSize,this.crc32,e,t.readData(this.compressedSize))},readCentralPart:function(t){this.versionMadeBy=t.readInt(2),t.skip(2),this.bitFlag=t.readInt(2),this.compressionMethod=t.readString(2),this.date=t.readDate(),this.crc32=t.readInt(4),this.compressedSize=t.readInt(4),this.uncompressedSize=t.readInt(4);var e=t.readInt(2);if(this.extraFieldsLength=t.readInt(2),this.fileCommentLength=t.readInt(2),this.diskNumberStart=t.readInt(2),this.internalFileAttributes=t.readInt(2),this.externalFileAttributes=t.readInt(4),this.localHeaderOffset=t.readInt(4),this.isEncrypted())throw new Error("Encrypted zip are not supported");t.skip(e),this.readExtraFields(t),this.parseZIP64ExtraField(t),this.fileComment=t.readData(this.fileCommentLength)},processAttributes:function(){this.unixPermissions=null,this.dosPermissions=null;var t=this.versionMadeBy>>8;this.dir=!!(16&this.externalFileAttributes),0==t&&(this.dosPermissions=63&this.externalFileAttributes),3==t&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||"/"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(t){if(this.extraFields[1]){var e=i(this.extraFields[1].value);this.uncompressedSize===s.MAX_VALUE_32BITS&&(this.uncompressedSize=e.readInt(8)),this.compressedSize===s.MAX_VALUE_32BITS&&(this.compressedSize=e.readInt(8)),this.localHeaderOffset===s.MAX_VALUE_32BITS&&(this.localHeaderOffset=e.readInt(8)),this.diskNumberStart===s.MAX_VALUE_32BITS&&(this.diskNumberStart=e.readInt(4))}},readExtraFields:function(t){var e,r,i,n=t.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});t.index+4<n;)e=t.readInt(2),r=t.readInt(2),i=t.readData(r),this.extraFields[e]={id:e,length:r,value:i};t.setIndex(n)},handleUTF8:function(){var t=u.uint8array?"uint8array":"array";if(this.useUTF8())this.fileNameStr=o.utf8decode(this.fileName),this.fileCommentStr=o.utf8decode(this.fileComment);else{var e=this.findExtraFieldUnicodePath();if(null!==e)this.fileNameStr=e;else{var r=s.transformTo(t,this.fileName);this.fileNameStr=this.loadOptions.decodeFileName(r)}var i=this.findExtraFieldUnicodeComment();if(null!==i)this.fileCommentStr=i;else{var n=s.transformTo(t,this.fileComment);this.fileCommentStr=this.loadOptions.decodeFileName(n)}}},findExtraFieldUnicodePath:function(){var t=this.extraFields[28789];if(t){var e=i(t.value);return 1!==e.readInt(1)?null:a(this.fileName)!==e.readInt(4)?null:o.utf8decode(e.readData(t.length-5))}return null},findExtraFieldUnicodeComment:function(){var t=this.extraFields[25461];if(t){var e=i(t.value);return 1!==e.readInt(1)?null:a(this.fileComment)!==e.readInt(4)?null:o.utf8decode(e.readData(t.length-5))}return null}},e.exports=l},{"./compressedObject":2,"./compressions":3,"./crc32":4,"./reader/readerFor":22,"./support":30,"./utf8":31,"./utils":32}],35:[function(t,e,r){"use strict";function i(t,e,r){this.name=t,this.dir=r.dir,this.date=r.date,this.comment=r.comment,this.unixPermissions=r.unixPermissions,this.dosPermissions=r.dosPermissions,this._data=e,this._dataBinary=r.binary,this.options={compression:r.compression,compressionOptions:r.compressionOptions}}var s=t("./stream/StreamHelper"),n=t("./stream/DataWorker"),a=t("./utf8"),o=t("./compressedObject"),h=t("./stream/GenericWorker");i.prototype={internalStream:function(t){var e=null,r="string";try{if(!t)throw new Error("No output type specified.");var i="string"===(r=t.toLowerCase())||"text"===r;"binarystring"!==r&&"text"!==r||(r="string"),e=this._decompressWorker();var n=!this._dataBinary;n&&!i&&(e=e.pipe(new a.Utf8EncodeWorker)),!n&&i&&(e=e.pipe(new a.Utf8DecodeWorker))}catch(t){(e=new h("error")).error(t)}return new s(e,r,"")},async:function(t,e){return this.internalStream(t).accumulate(e)},nodeStream:function(t,e){return this.internalStream(t||"nodebuffer").toNodejsStream(e)},_compressWorker:function(t,e){if(this._data instanceof o&&this._data.compression.magic===t.magic)return this._data.getCompressedWorker();var r=this._decompressWorker();return this._dataBinary||(r=r.pipe(new a.Utf8EncodeWorker)),o.createWorkerFrom(r,t,e)},_decompressWorker:function(){return this._data instanceof o?this._data.getContentWorker():this._data instanceof h?this._data:new n(this._data)}};for(var u=["asText","asBinary","asNodeBuffer","asUint8Array","asArrayBuffer"],l=function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},f=0;f<u.length;f++)i.prototype[u[f]]=l;e.exports=i},{"./compressedObject":2,"./stream/DataWorker":27,"./stream/GenericWorker":28,"./stream/StreamHelper":29,"./utf8":31}],36:[function(t,l,e){(function(e){"use strict";var r,i,t=e.MutationObserver||e.WebKitMutationObserver;if(t){var n=0,s=new t(u),a=e.document.createTextNode("");s.observe(a,{characterData:!0}),r=function(){a.data=n=++n%2}}else if(e.setImmediate||void 0===e.MessageChannel)r="document"in e&&"onreadystatechange"in e.document.createElement("script")?function(){var t=e.document.createElement("script");t.onreadystatechange=function(){u(),t.onreadystatechange=null,t.parentNode.removeChild(t),t=null},e.document.documentElement.appendChild(t)}:function(){setTimeout(u,0)};else{var o=new e.MessageChannel;o.port1.onmessage=u,r=function(){o.port2.postMessage(0)}}var h=[];function u(){var t,e;i=!0;for(var r=h.length;r;){for(e=h,h=[],t=-1;++t<r;)e[t]();r=h.length}i=!1}l.exports=function(t){1!==h.push(t)||i||r()}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],37:[function(t,e,r){"use strict";var n=t("immediate");function u(){}var l={},s=["REJECTED"],a=["FULFILLED"],i=["PENDING"];function o(t){if("function"!=typeof t)throw new TypeError("resolver must be a function");this.state=i,this.queue=[],this.outcome=void 0,t!==u&&c(this,t)}function h(t,e,r){this.promise=t,"function"==typeof e&&(this.onFulfilled=e,this.callFulfilled=this.otherCallFulfilled),"function"==typeof r&&(this.onRejected=r,this.callRejected=this.otherCallRejected)}function f(e,r,i){n(function(){var t;try{t=r(i)}catch(t){return l.reject(e,t)}t===e?l.reject(e,new TypeError("Cannot resolve promise with itself")):l.resolve(e,t)})}function d(t){var e=t&&t.then;if(t&&("object"==typeof t||"function"==typeof t)&&"function"==typeof e)return function(){e.apply(t,arguments)}}function c(e,t){var r=!1;function i(t){r||(r=!0,l.reject(e,t))}function n(t){r||(r=!0,l.resolve(e,t))}var s=p(function(){t(n,i)});"error"===s.status&&i(s.value)}function p(t,e){var r={};try{r.value=t(e),r.status="success"}catch(t){r.status="error",r.value=t}return r}(e.exports=o).prototype.finally=function(e){if("function"!=typeof e)return this;var r=this.constructor;return this.then(function(t){return r.resolve(e()).then(function(){return t})},function(t){return r.resolve(e()).then(function(){throw t})})},o.prototype.catch=function(t){return this.then(null,t)},o.prototype.then=function(t,e){if("function"!=typeof t&&this.state===a||"function"!=typeof e&&this.state===s)return this;var r=new this.constructor(u);this.state!==i?f(r,this.state===a?t:e,this.outcome):this.queue.push(new h(r,t,e));return r},h.prototype.callFulfilled=function(t){l.resolve(this.promise,t)},h.prototype.otherCallFulfilled=function(t){f(this.promise,this.onFulfilled,t)},h.prototype.callRejected=function(t){l.reject(this.promise,t)},h.prototype.otherCallRejected=function(t){f(this.promise,this.onRejected,t)},l.resolve=function(t,e){var r=p(d,e);if("error"===r.status)return l.reject(t,r.value);var i=r.value;if(i)c(t,i);else{t.state=a,t.outcome=e;for(var n=-1,s=t.queue.length;++n<s;)t.queue[n].callFulfilled(e)}return t},l.reject=function(t,e){t.state=s,t.outcome=e;for(var r=-1,i=t.queue.length;++r<i;)t.queue[r].callRejected(e);return t},o.resolve=function(t){if(t instanceof this)return t;return l.resolve(new this(u),t)},o.reject=function(t){var e=new this(u);return l.reject(e,t)},o.all=function(t){var r=this;if("[object Array]"!==Object.prototype.toString.call(t))return this.reject(new TypeError("must be an array"));var i=t.length,n=!1;if(!i)return this.resolve([]);var s=new Array(i),a=0,e=-1,o=new this(u);for(;++e<i;)h(t[e],e);return o;function h(t,e){r.resolve(t).then(function(t){s[e]=t,++a!==i||n||(n=!0,l.resolve(o,s))},function(t){n||(n=!0,l.reject(o,t))})}},o.race=function(t){var e=this;if("[object Array]"!==Object.prototype.toString.call(t))return this.reject(new TypeError("must be an array"));var r=t.length,i=!1;if(!r)return this.resolve([]);var n=-1,s=new this(u);for(;++n<r;)a=t[n],e.resolve(a).then(function(t){i||(i=!0,l.resolve(s,t))},function(t){i||(i=!0,l.reject(s,t))});var a;return s}},{immediate:36}],38:[function(t,e,r){"use strict";var i={};(0,t("./lib/utils/common").assign)(i,t("./lib/deflate"),t("./lib/inflate"),t("./lib/zlib/constants")),e.exports=i},{"./lib/deflate":39,"./lib/inflate":40,"./lib/utils/common":41,"./lib/zlib/constants":44}],39:[function(t,e,r){"use strict";var a=t("./zlib/deflate"),o=t("./utils/common"),h=t("./utils/strings"),n=t("./zlib/messages"),s=t("./zlib/zstream"),u=Object.prototype.toString,l=0,f=-1,d=0,c=8;function p(t){if(!(this instanceof p))return new p(t);this.options=o.assign({level:f,method:c,chunkSize:16384,windowBits:15,memLevel:8,strategy:d,to:""},t||{});var e=this.options;e.raw&&0<e.windowBits?e.windowBits=-e.windowBits:e.gzip&&0<e.windowBits&&e.windowBits<16&&(e.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new s,this.strm.avail_out=0;var r=a.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(r!==l)throw new Error(n[r]);if(e.header&&a.deflateSetHeader(this.strm,e.header),e.dictionary){var i;if(i="string"==typeof e.dictionary?h.string2buf(e.dictionary):"[object ArrayBuffer]"===u.call(e.dictionary)?new Uint8Array(e.dictionary):e.dictionary,(r=a.deflateSetDictionary(this.strm,i))!==l)throw new Error(n[r]);this._dict_set=!0}}function i(t,e){var r=new p(e);if(r.push(t,!0),r.err)throw r.msg||n[r.err];return r.result}p.prototype.push=function(t,e){var r,i,n=this.strm,s=this.options.chunkSize;if(this.ended)return!1;i=e===~~e?e:!0===e?4:0,"string"==typeof t?n.input=h.string2buf(t):"[object ArrayBuffer]"===u.call(t)?n.input=new Uint8Array(t):n.input=t,n.next_in=0,n.avail_in=n.input.length;do{if(0===n.avail_out&&(n.output=new o.Buf8(s),n.next_out=0,n.avail_out=s),1!==(r=a.deflate(n,i))&&r!==l)return this.onEnd(r),!(this.ended=!0);0!==n.avail_out&&(0!==n.avail_in||4!==i&&2!==i)||("string"===this.options.to?this.onData(h.buf2binstring(o.shrinkBuf(n.output,n.next_out))):this.onData(o.shrinkBuf(n.output,n.next_out)))}while((0<n.avail_in||0===n.avail_out)&&1!==r);return 4===i?(r=a.deflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===l):2!==i||(this.onEnd(l),!(n.avail_out=0))},p.prototype.onData=function(t){this.chunks.push(t)},p.prototype.onEnd=function(t){t===l&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=o.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg},r.Deflate=p,r.deflate=i,r.deflateRaw=function(t,e){return(e=e||{}).raw=!0,i(t,e)},r.gzip=function(t,e){return(e=e||{}).gzip=!0,i(t,e)}},{"./utils/common":41,"./utils/strings":42,"./zlib/deflate":46,"./zlib/messages":51,"./zlib/zstream":53}],40:[function(t,e,r){"use strict";var d=t("./zlib/inflate"),c=t("./utils/common"),p=t("./utils/strings"),m=t("./zlib/constants"),i=t("./zlib/messages"),n=t("./zlib/zstream"),s=t("./zlib/gzheader"),_=Object.prototype.toString;function a(t){if(!(this instanceof a))return new a(t);this.options=c.assign({chunkSize:16384,windowBits:0,to:""},t||{});var e=this.options;e.raw&&0<=e.windowBits&&e.windowBits<16&&(e.windowBits=-e.windowBits,0===e.windowBits&&(e.windowBits=-15)),!(0<=e.windowBits&&e.windowBits<16)||t&&t.windowBits||(e.windowBits+=32),15<e.windowBits&&e.windowBits<48&&0==(15&e.windowBits)&&(e.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new n,this.strm.avail_out=0;var r=d.inflateInit2(this.strm,e.windowBits);if(r!==m.Z_OK)throw new Error(i[r]);this.header=new s,d.inflateGetHeader(this.strm,this.header)}function o(t,e){var r=new a(e);if(r.push(t,!0),r.err)throw r.msg||i[r.err];return r.result}a.prototype.push=function(t,e){var r,i,n,s,a,o,h=this.strm,u=this.options.chunkSize,l=this.options.dictionary,f=!1;if(this.ended)return!1;i=e===~~e?e:!0===e?m.Z_FINISH:m.Z_NO_FLUSH,"string"==typeof t?h.input=p.binstring2buf(t):"[object ArrayBuffer]"===_.call(t)?h.input=new Uint8Array(t):h.input=t,h.next_in=0,h.avail_in=h.input.length;do{if(0===h.avail_out&&(h.output=new c.Buf8(u),h.next_out=0,h.avail_out=u),(r=d.inflate(h,m.Z_NO_FLUSH))===m.Z_NEED_DICT&&l&&(o="string"==typeof l?p.string2buf(l):"[object ArrayBuffer]"===_.call(l)?new Uint8Array(l):l,r=d.inflateSetDictionary(this.strm,o)),r===m.Z_BUF_ERROR&&!0===f&&(r=m.Z_OK,f=!1),r!==m.Z_STREAM_END&&r!==m.Z_OK)return this.onEnd(r),!(this.ended=!0);h.next_out&&(0!==h.avail_out&&r!==m.Z_STREAM_END&&(0!==h.avail_in||i!==m.Z_FINISH&&i!==m.Z_SYNC_FLUSH)||("string"===this.options.to?(n=p.utf8border(h.output,h.next_out),s=h.next_out-n,a=p.buf2string(h.output,n),h.next_out=s,h.avail_out=u-s,s&&c.arraySet(h.output,h.output,n,s,0),this.onData(a)):this.onData(c.shrinkBuf(h.output,h.next_out)))),0===h.avail_in&&0===h.avail_out&&(f=!0)}while((0<h.avail_in||0===h.avail_out)&&r!==m.Z_STREAM_END);return r===m.Z_STREAM_END&&(i=m.Z_FINISH),i===m.Z_FINISH?(r=d.inflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===m.Z_OK):i!==m.Z_SYNC_FLUSH||(this.onEnd(m.Z_OK),!(h.avail_out=0))},a.prototype.onData=function(t){this.chunks.push(t)},a.prototype.onEnd=function(t){t===m.Z_OK&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=c.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg},r.Inflate=a,r.inflate=o,r.inflateRaw=function(t,e){return(e=e||{}).raw=!0,o(t,e)},r.ungzip=o},{"./utils/common":41,"./utils/strings":42,"./zlib/constants":44,"./zlib/gzheader":47,"./zlib/inflate":49,"./zlib/messages":51,"./zlib/zstream":53}],41:[function(t,e,r){"use strict";var i="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Int32Array;r.assign=function(t){for(var e=Array.prototype.slice.call(arguments,1);e.length;){var r=e.shift();if(r){if("object"!=typeof r)throw new TypeError(r+"must be non-object");for(var i in r)r.hasOwnProperty(i)&&(t[i]=r[i])}}return t},r.shrinkBuf=function(t,e){return t.length===e?t:t.subarray?t.subarray(0,e):(t.length=e,t)};var n={arraySet:function(t,e,r,i,n){if(e.subarray&&t.subarray)t.set(e.subarray(r,r+i),n);else for(var s=0;s<i;s++)t[n+s]=e[r+s]},flattenChunks:function(t){var e,r,i,n,s,a;for(e=i=0,r=t.length;e<r;e++)i+=t[e].length;for(a=new Uint8Array(i),e=n=0,r=t.length;e<r;e++)s=t[e],a.set(s,n),n+=s.length;return a}},s={arraySet:function(t,e,r,i,n){for(var s=0;s<i;s++)t[n+s]=e[r+s]},flattenChunks:function(t){return[].concat.apply([],t)}};r.setTyped=function(t){t?(r.Buf8=Uint8Array,r.Buf16=Uint16Array,r.Buf32=Int32Array,r.assign(r,n)):(r.Buf8=Array,r.Buf16=Array,r.Buf32=Array,r.assign(r,s))},r.setTyped(i)},{}],42:[function(t,e,r){"use strict";var h=t("./common"),n=!0,s=!0;try{String.fromCharCode.apply(null,[0])}catch(t){n=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(t){s=!1}for(var u=new h.Buf8(256),i=0;i<256;i++)u[i]=252<=i?6:248<=i?5:240<=i?4:224<=i?3:192<=i?2:1;function l(t,e){if(e<65537&&(t.subarray&&s||!t.subarray&&n))return String.fromCharCode.apply(null,h.shrinkBuf(t,e));for(var r="",i=0;i<e;i++)r+=String.fromCharCode(t[i]);return r}u[254]=u[254]=1,r.string2buf=function(t){var e,r,i,n,s,a=t.length,o=0;for(n=0;n<a;n++)55296==(64512&(r=t.charCodeAt(n)))&&n+1<a&&56320==(64512&(i=t.charCodeAt(n+1)))&&(r=65536+(r-55296<<10)+(i-56320),n++),o+=r<128?1:r<2048?2:r<65536?3:4;for(e=new h.Buf8(o),n=s=0;s<o;n++)55296==(64512&(r=t.charCodeAt(n)))&&n+1<a&&56320==(64512&(i=t.charCodeAt(n+1)))&&(r=65536+(r-55296<<10)+(i-56320),n++),r<128?e[s++]=r:(r<2048?e[s++]=192|r>>>6:(r<65536?e[s++]=224|r>>>12:(e[s++]=240|r>>>18,e[s++]=128|r>>>12&63),e[s++]=128|r>>>6&63),e[s++]=128|63&r);return e},r.buf2binstring=function(t){return l(t,t.length)},r.binstring2buf=function(t){for(var e=new h.Buf8(t.length),r=0,i=e.length;r<i;r++)e[r]=t.charCodeAt(r);return e},r.buf2string=function(t,e){var r,i,n,s,a=e||t.length,o=new Array(2*a);for(r=i=0;r<a;)if((n=t[r++])<128)o[i++]=n;else if(4<(s=u[n]))o[i++]=65533,r+=s-1;else{for(n&=2===s?31:3===s?15:7;1<s&&r<a;)n=n<<6|63&t[r++],s--;1<s?o[i++]=65533:n<65536?o[i++]=n:(n-=65536,o[i++]=55296|n>>10&1023,o[i++]=56320|1023&n)}return l(o,i)},r.utf8border=function(t,e){var r;for((e=e||t.length)>t.length&&(e=t.length),r=e-1;0<=r&&128==(192&t[r]);)r--;return r<0?e:0===r?e:r+u[t[r]]>e?r:e}},{"./common":41}],43:[function(t,e,r){"use strict";e.exports=function(t,e,r,i){for(var n=65535&t|0,s=t>>>16&65535|0,a=0;0!==r;){for(r-=a=2e3<r?2e3:r;s=s+(n=n+e[i++]|0)|0,--a;);n%=65521,s%=65521}return n|s<<16|0}},{}],44:[function(t,e,r){"use strict";e.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],45:[function(t,e,r){"use strict";var o=function(){for(var t,e=[],r=0;r<256;r++){t=r;for(var i=0;i<8;i++)t=1&t?3988292384^t>>>1:t>>>1;e[r]=t}return e}();e.exports=function(t,e,r,i){var n=o,s=i+r;t^=-1;for(var a=i;a<s;a++)t=t>>>8^n[255&(t^e[a])];return-1^t}},{}],46:[function(t,e,r){"use strict";var h,d=t("../utils/common"),u=t("./trees"),c=t("./adler32"),p=t("./crc32"),i=t("./messages"),l=0,f=4,m=0,_=-2,g=-1,b=4,n=2,v=8,y=9,s=286,a=30,o=19,w=2*s+1,k=15,x=3,S=258,z=S+x+1,C=42,E=113,A=1,I=2,O=3,B=4;function R(t,e){return t.msg=i[e],e}function T(t){return(t<<1)-(4<t?9:0)}function D(t){for(var e=t.length;0<=--e;)t[e]=0}function F(t){var e=t.state,r=e.pending;r>t.avail_out&&(r=t.avail_out),0!==r&&(d.arraySet(t.output,e.pending_buf,e.pending_out,r,t.next_out),t.next_out+=r,e.pending_out+=r,t.total_out+=r,t.avail_out-=r,e.pending-=r,0===e.pending&&(e.pending_out=0))}function N(t,e){u._tr_flush_block(t,0<=t.block_start?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,F(t.strm)}function U(t,e){t.pending_buf[t.pending++]=e}function P(t,e){t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e}function L(t,e){var r,i,n=t.max_chain_length,s=t.strstart,a=t.prev_length,o=t.nice_match,h=t.strstart>t.w_size-z?t.strstart-(t.w_size-z):0,u=t.window,l=t.w_mask,f=t.prev,d=t.strstart+S,c=u[s+a-1],p=u[s+a];t.prev_length>=t.good_match&&(n>>=2),o>t.lookahead&&(o=t.lookahead);do{if(u[(r=e)+a]===p&&u[r+a-1]===c&&u[r]===u[s]&&u[++r]===u[s+1]){s+=2,r++;do{}while(u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&s<d);if(i=S-(d-s),s=d-S,a<i){if(t.match_start=e,o<=(a=i))break;c=u[s+a-1],p=u[s+a]}}}while((e=f[e&l])>h&&0!=--n);return a<=t.lookahead?a:t.lookahead}function j(t){var e,r,i,n,s,a,o,h,u,l,f=t.w_size;do{if(n=t.window_size-t.lookahead-t.strstart,t.strstart>=f+(f-z)){for(d.arraySet(t.window,t.window,f,f,0),t.match_start-=f,t.strstart-=f,t.block_start-=f,e=r=t.hash_size;i=t.head[--e],t.head[e]=f<=i?i-f:0,--r;);for(e=r=f;i=t.prev[--e],t.prev[e]=f<=i?i-f:0,--r;);n+=f}if(0===t.strm.avail_in)break;if(a=t.strm,o=t.window,h=t.strstart+t.lookahead,u=n,l=void 0,l=a.avail_in,u<l&&(l=u),r=0===l?0:(a.avail_in-=l,d.arraySet(o,a.input,a.next_in,l,h),1===a.state.wrap?a.adler=c(a.adler,o,l,h):2===a.state.wrap&&(a.adler=p(a.adler,o,l,h)),a.next_in+=l,a.total_in+=l,l),t.lookahead+=r,t.lookahead+t.insert>=x)for(s=t.strstart-t.insert,t.ins_h=t.window[s],t.ins_h=(t.ins_h<<t.hash_shift^t.window[s+1])&t.hash_mask;t.insert&&(t.ins_h=(t.ins_h<<t.hash_shift^t.window[s+x-1])&t.hash_mask,t.prev[s&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=s,s++,t.insert--,!(t.lookahead+t.insert<x)););}while(t.lookahead<z&&0!==t.strm.avail_in)}function Z(t,e){for(var r,i;;){if(t.lookahead<z){if(j(t),t.lookahead<z&&e===l)return A;if(0===t.lookahead)break}if(r=0,t.lookahead>=x&&(t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+x-1])&t.hash_mask,r=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),0!==r&&t.strstart-r<=t.w_size-z&&(t.match_length=L(t,r)),t.match_length>=x)if(i=u._tr_tally(t,t.strstart-t.match_start,t.match_length-x),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=x){for(t.match_length--;t.strstart++,t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+x-1])&t.hash_mask,r=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart,0!=--t.match_length;);t.strstart++}else t.strstart+=t.match_length,t.match_length=0,t.ins_h=t.window[t.strstart],t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+1])&t.hash_mask;else i=u._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;if(i&&(N(t,!1),0===t.strm.avail_out))return A}return t.insert=t.strstart<x-1?t.strstart:x-1,e===f?(N(t,!0),0===t.strm.avail_out?O:B):t.last_lit&&(N(t,!1),0===t.strm.avail_out)?A:I}function W(t,e){for(var r,i,n;;){if(t.lookahead<z){if(j(t),t.lookahead<z&&e===l)return A;if(0===t.lookahead)break}if(r=0,t.lookahead>=x&&(t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+x-1])&t.hash_mask,r=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),t.prev_length=t.match_length,t.prev_match=t.match_start,t.match_length=x-1,0!==r&&t.prev_length<t.max_lazy_match&&t.strstart-r<=t.w_size-z&&(t.match_length=L(t,r),t.match_length<=5&&(1===t.strategy||t.match_length===x&&4096<t.strstart-t.match_start)&&(t.match_length=x-1)),t.prev_length>=x&&t.match_length<=t.prev_length){for(n=t.strstart+t.lookahead-x,i=u._tr_tally(t,t.strstart-1-t.prev_match,t.prev_length-x),t.lookahead-=t.prev_length-1,t.prev_length-=2;++t.strstart<=n&&(t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+x-1])&t.hash_mask,r=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),0!=--t.prev_length;);if(t.match_available=0,t.match_length=x-1,t.strstart++,i&&(N(t,!1),0===t.strm.avail_out))return A}else if(t.match_available){if((i=u._tr_tally(t,0,t.window[t.strstart-1]))&&N(t,!1),t.strstart++,t.lookahead--,0===t.strm.avail_out)return A}else t.match_available=1,t.strstart++,t.lookahead--}return t.match_available&&(i=u._tr_tally(t,0,t.window[t.strstart-1]),t.match_available=0),t.insert=t.strstart<x-1?t.strstart:x-1,e===f?(N(t,!0),0===t.strm.avail_out?O:B):t.last_lit&&(N(t,!1),0===t.strm.avail_out)?A:I}function M(t,e,r,i,n){this.good_length=t,this.max_lazy=e,this.nice_length=r,this.max_chain=i,this.func=n}function H(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=v,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new d.Buf16(2*w),this.dyn_dtree=new d.Buf16(2*(2*a+1)),this.bl_tree=new d.Buf16(2*(2*o+1)),D(this.dyn_ltree),D(this.dyn_dtree),D(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new d.Buf16(k+1),this.heap=new d.Buf16(2*s+1),D(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new d.Buf16(2*s+1),D(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function G(t){var e;return t&&t.state?(t.total_in=t.total_out=0,t.data_type=n,(e=t.state).pending=0,e.pending_out=0,e.wrap<0&&(e.wrap=-e.wrap),e.status=e.wrap?C:E,t.adler=2===e.wrap?0:1,e.last_flush=l,u._tr_init(e),m):R(t,_)}function K(t){var e=G(t);return e===m&&function(t){t.window_size=2*t.w_size,D(t.head),t.max_lazy_match=h[t.level].max_lazy,t.good_match=h[t.level].good_length,t.nice_match=h[t.level].nice_length,t.max_chain_length=h[t.level].max_chain,t.strstart=0,t.block_start=0,t.lookahead=0,t.insert=0,t.match_length=t.prev_length=x-1,t.match_available=0,t.ins_h=0}(t.state),e}function Y(t,e,r,i,n,s){if(!t)return _;var a=1;if(e===g&&(e=6),i<0?(a=0,i=-i):15<i&&(a=2,i-=16),n<1||y<n||r!==v||i<8||15<i||e<0||9<e||s<0||b<s)return R(t,_);8===i&&(i=9);var o=new H;return(t.state=o).strm=t,o.wrap=a,o.gzhead=null,o.w_bits=i,o.w_size=1<<o.w_bits,o.w_mask=o.w_size-1,o.hash_bits=n+7,o.hash_size=1<<o.hash_bits,o.hash_mask=o.hash_size-1,o.hash_shift=~~((o.hash_bits+x-1)/x),o.window=new d.Buf8(2*o.w_size),o.head=new d.Buf16(o.hash_size),o.prev=new d.Buf16(o.w_size),o.lit_bufsize=1<<n+6,o.pending_buf_size=4*o.lit_bufsize,o.pending_buf=new d.Buf8(o.pending_buf_size),o.d_buf=1*o.lit_bufsize,o.l_buf=3*o.lit_bufsize,o.level=e,o.strategy=s,o.method=r,K(t)}h=[new M(0,0,0,0,function(t,e){var r=65535;for(r>t.pending_buf_size-5&&(r=t.pending_buf_size-5);;){if(t.lookahead<=1){if(j(t),0===t.lookahead&&e===l)return A;if(0===t.lookahead)break}t.strstart+=t.lookahead,t.lookahead=0;var i=t.block_start+r;if((0===t.strstart||t.strstart>=i)&&(t.lookahead=t.strstart-i,t.strstart=i,N(t,!1),0===t.strm.avail_out))return A;if(t.strstart-t.block_start>=t.w_size-z&&(N(t,!1),0===t.strm.avail_out))return A}return t.insert=0,e===f?(N(t,!0),0===t.strm.avail_out?O:B):(t.strstart>t.block_start&&(N(t,!1),t.strm.avail_out),A)}),new M(4,4,8,4,Z),new M(4,5,16,8,Z),new M(4,6,32,32,Z),new M(4,4,16,16,W),new M(8,16,32,32,W),new M(8,16,128,128,W),new M(8,32,128,256,W),new M(32,128,258,1024,W),new M(32,258,258,4096,W)],r.deflateInit=function(t,e){return Y(t,e,v,15,8,0)},r.deflateInit2=Y,r.deflateReset=K,r.deflateResetKeep=G,r.deflateSetHeader=function(t,e){return t&&t.state?2!==t.state.wrap?_:(t.state.gzhead=e,m):_},r.deflate=function(t,e){var r,i,n,s;if(!t||!t.state||5<e||e<0)return t?R(t,_):_;if(i=t.state,!t.output||!t.input&&0!==t.avail_in||666===i.status&&e!==f)return R(t,0===t.avail_out?-5:_);if(i.strm=t,r=i.last_flush,i.last_flush=e,i.status===C)if(2===i.wrap)t.adler=0,U(i,31),U(i,139),U(i,8),i.gzhead?(U(i,(i.gzhead.text?1:0)+(i.gzhead.hcrc?2:0)+(i.gzhead.extra?4:0)+(i.gzhead.name?8:0)+(i.gzhead.comment?16:0)),U(i,255&i.gzhead.time),U(i,i.gzhead.time>>8&255),U(i,i.gzhead.time>>16&255),U(i,i.gzhead.time>>24&255),U(i,9===i.level?2:2<=i.strategy||i.level<2?4:0),U(i,255&i.gzhead.os),i.gzhead.extra&&i.gzhead.extra.length&&(U(i,255&i.gzhead.extra.length),U(i,i.gzhead.extra.length>>8&255)),i.gzhead.hcrc&&(t.adler=p(t.adler,i.pending_buf,i.pending,0)),i.gzindex=0,i.status=69):(U(i,0),U(i,0),U(i,0),U(i,0),U(i,0),U(i,9===i.level?2:2<=i.strategy||i.level<2?4:0),U(i,3),i.status=E);else{var a=v+(i.w_bits-8<<4)<<8;a|=(2<=i.strategy||i.level<2?0:i.level<6?1:6===i.level?2:3)<<6,0!==i.strstart&&(a|=32),a+=31-a%31,i.status=E,P(i,a),0!==i.strstart&&(P(i,t.adler>>>16),P(i,65535&t.adler)),t.adler=1}if(69===i.status)if(i.gzhead.extra){for(n=i.pending;i.gzindex<(65535&i.gzhead.extra.length)&&(i.pending!==i.pending_buf_size||(i.gzhead.hcrc&&i.pending>n&&(t.adler=p(t.adler,i.pending_buf,i.pending-n,n)),F(t),n=i.pending,i.pending!==i.pending_buf_size));)U(i,255&i.gzhead.extra[i.gzindex]),i.gzindex++;i.gzhead.hcrc&&i.pending>n&&(t.adler=p(t.adler,i.pending_buf,i.pending-n,n)),i.gzindex===i.gzhead.extra.length&&(i.gzindex=0,i.status=73)}else i.status=73;if(73===i.status)if(i.gzhead.name){n=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>n&&(t.adler=p(t.adler,i.pending_buf,i.pending-n,n)),F(t),n=i.pending,i.pending===i.pending_buf_size)){s=1;break}s=i.gzindex<i.gzhead.name.length?255&i.gzhead.name.charCodeAt(i.gzindex++):0,U(i,s)}while(0!==s);i.gzhead.hcrc&&i.pending>n&&(t.adler=p(t.adler,i.pending_buf,i.pending-n,n)),0===s&&(i.gzindex=0,i.status=91)}else i.status=91;if(91===i.status)if(i.gzhead.comment){n=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>n&&(t.adler=p(t.adler,i.pending_buf,i.pending-n,n)),F(t),n=i.pending,i.pending===i.pending_buf_size)){s=1;break}s=i.gzindex<i.gzhead.comment.length?255&i.gzhead.comment.charCodeAt(i.gzindex++):0,U(i,s)}while(0!==s);i.gzhead.hcrc&&i.pending>n&&(t.adler=p(t.adler,i.pending_buf,i.pending-n,n)),0===s&&(i.status=103)}else i.status=103;if(103===i.status&&(i.gzhead.hcrc?(i.pending+2>i.pending_buf_size&&F(t),i.pending+2<=i.pending_buf_size&&(U(i,255&t.adler),U(i,t.adler>>8&255),t.adler=0,i.status=E)):i.status=E),0!==i.pending){if(F(t),0===t.avail_out)return i.last_flush=-1,m}else if(0===t.avail_in&&T(e)<=T(r)&&e!==f)return R(t,-5);if(666===i.status&&0!==t.avail_in)return R(t,-5);if(0!==t.avail_in||0!==i.lookahead||e!==l&&666!==i.status){var o=2===i.strategy?function(t,e){for(var r;;){if(0===t.lookahead&&(j(t),0===t.lookahead)){if(e===l)return A;break}if(t.match_length=0,r=u._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,r&&(N(t,!1),0===t.strm.avail_out))return A}return t.insert=0,e===f?(N(t,!0),0===t.strm.avail_out?O:B):t.last_lit&&(N(t,!1),0===t.strm.avail_out)?A:I}(i,e):3===i.strategy?function(t,e){for(var r,i,n,s,a=t.window;;){if(t.lookahead<=S){if(j(t),t.lookahead<=S&&e===l)return A;if(0===t.lookahead)break}if(t.match_length=0,t.lookahead>=x&&0<t.strstart&&(i=a[n=t.strstart-1])===a[++n]&&i===a[++n]&&i===a[++n]){s=t.strstart+S;do{}while(i===a[++n]&&i===a[++n]&&i===a[++n]&&i===a[++n]&&i===a[++n]&&i===a[++n]&&i===a[++n]&&i===a[++n]&&n<s);t.match_length=S-(s-n),t.match_length>t.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=x?(r=u._tr_tally(t,1,t.match_length-x),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(r=u._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),r&&(N(t,!1),0===t.strm.avail_out))return A}return t.insert=0,e===f?(N(t,!0),0===t.strm.avail_out?O:B):t.last_lit&&(N(t,!1),0===t.strm.avail_out)?A:I}(i,e):h[i.level].func(i,e);if(o!==O&&o!==B||(i.status=666),o===A||o===O)return 0===t.avail_out&&(i.last_flush=-1),m;if(o===I&&(1===e?u._tr_align(i):5!==e&&(u._tr_stored_block(i,0,0,!1),3===e&&(D(i.head),0===i.lookahead&&(i.strstart=0,i.block_start=0,i.insert=0))),F(t),0===t.avail_out))return i.last_flush=-1,m}return e!==f?m:i.wrap<=0?1:(2===i.wrap?(U(i,255&t.adler),U(i,t.adler>>8&255),U(i,t.adler>>16&255),U(i,t.adler>>24&255),U(i,255&t.total_in),U(i,t.total_in>>8&255),U(i,t.total_in>>16&255),U(i,t.total_in>>24&255)):(P(i,t.adler>>>16),P(i,65535&t.adler)),F(t),0<i.wrap&&(i.wrap=-i.wrap),0!==i.pending?m:1)},r.deflateEnd=function(t){var e;return t&&t.state?(e=t.state.status)!==C&&69!==e&&73!==e&&91!==e&&103!==e&&e!==E&&666!==e?R(t,_):(t.state=null,e===E?R(t,-3):m):_},r.deflateSetDictionary=function(t,e){var r,i,n,s,a,o,h,u,l=e.length;if(!t||!t.state)return _;if(2===(s=(r=t.state).wrap)||1===s&&r.status!==C||r.lookahead)return _;for(1===s&&(t.adler=c(t.adler,e,l,0)),r.wrap=0,l>=r.w_size&&(0===s&&(D(r.head),r.strstart=0,r.block_start=0,r.insert=0),u=new d.Buf8(r.w_size),d.arraySet(u,e,l-r.w_size,r.w_size,0),e=u,l=r.w_size),a=t.avail_in,o=t.next_in,h=t.input,t.avail_in=l,t.next_in=0,t.input=e,j(r);r.lookahead>=x;){for(i=r.strstart,n=r.lookahead-(x-1);r.ins_h=(r.ins_h<<r.hash_shift^r.window[i+x-1])&r.hash_mask,r.prev[i&r.w_mask]=r.head[r.ins_h],r.head[r.ins_h]=i,i++,--n;);r.strstart=i,r.lookahead=x-1,j(r)}return r.strstart+=r.lookahead,r.block_start=r.strstart,r.insert=r.lookahead,r.lookahead=0,r.match_length=r.prev_length=x-1,r.match_available=0,t.next_in=o,t.input=h,t.avail_in=a,r.wrap=s,m},r.deflateInfo="pako deflate (from Nodeca project)"},{"../utils/common":41,"./adler32":43,"./crc32":45,"./messages":51,"./trees":52}],47:[function(t,e,r){"use strict";e.exports=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}},{}],48:[function(t,e,r){"use strict";e.exports=function(t,e){var r,i,n,s,a,o,h,u,l,f,d,c,p,m,_,g,b,v,y,w,k,x,S,z,C;r=t.state,i=t.next_in,z=t.input,n=i+(t.avail_in-5),s=t.next_out,C=t.output,a=s-(e-t.avail_out),o=s+(t.avail_out-257),h=r.dmax,u=r.wsize,l=r.whave,f=r.wnext,d=r.window,c=r.hold,p=r.bits,m=r.lencode,_=r.distcode,g=(1<<r.lenbits)-1,b=(1<<r.distbits)-1;t:do{p<15&&(c+=z[i++]<<p,p+=8,c+=z[i++]<<p,p+=8),v=m[c&g];e:for(;;){if(c>>>=y=v>>>24,p-=y,0===(y=v>>>16&255))C[s++]=65535&v;else{if(!(16&y)){if(0==(64&y)){v=m[(65535&v)+(c&(1<<y)-1)];continue e}if(32&y){r.mode=12;break t}t.msg="invalid literal/length code",r.mode=30;break t}w=65535&v,(y&=15)&&(p<y&&(c+=z[i++]<<p,p+=8),w+=c&(1<<y)-1,c>>>=y,p-=y),p<15&&(c+=z[i++]<<p,p+=8,c+=z[i++]<<p,p+=8),v=_[c&b];r:for(;;){if(c>>>=y=v>>>24,p-=y,!(16&(y=v>>>16&255))){if(0==(64&y)){v=_[(65535&v)+(c&(1<<y)-1)];continue r}t.msg="invalid distance code",r.mode=30;break t}if(k=65535&v,p<(y&=15)&&(c+=z[i++]<<p,(p+=8)<y&&(c+=z[i++]<<p,p+=8)),h<(k+=c&(1<<y)-1)){t.msg="invalid distance too far back",r.mode=30;break t}if(c>>>=y,p-=y,(y=s-a)<k){if(l<(y=k-y)&&r.sane){t.msg="invalid distance too far back",r.mode=30;break t}if(S=d,(x=0)===f){if(x+=u-y,y<w){for(w-=y;C[s++]=d[x++],--y;);x=s-k,S=C}}else if(f<y){if(x+=u+f-y,(y-=f)<w){for(w-=y;C[s++]=d[x++],--y;);if(x=0,f<w){for(w-=y=f;C[s++]=d[x++],--y;);x=s-k,S=C}}}else if(x+=f-y,y<w){for(w-=y;C[s++]=d[x++],--y;);x=s-k,S=C}for(;2<w;)C[s++]=S[x++],C[s++]=S[x++],C[s++]=S[x++],w-=3;w&&(C[s++]=S[x++],1<w&&(C[s++]=S[x++]))}else{for(x=s-k;C[s++]=C[x++],C[s++]=C[x++],C[s++]=C[x++],2<(w-=3););w&&(C[s++]=C[x++],1<w&&(C[s++]=C[x++]))}break}}break}}while(i<n&&s<o);i-=w=p>>3,c&=(1<<(p-=w<<3))-1,t.next_in=i,t.next_out=s,t.avail_in=i<n?n-i+5:5-(i-n),t.avail_out=s<o?o-s+257:257-(s-o),r.hold=c,r.bits=p}},{}],49:[function(t,e,r){"use strict";var I=t("../utils/common"),O=t("./adler32"),B=t("./crc32"),R=t("./inffast"),T=t("./inftrees"),D=1,F=2,N=0,U=-2,P=1,i=852,n=592;function L(t){return(t>>>24&255)+(t>>>8&65280)+((65280&t)<<8)+((255&t)<<24)}function s(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new I.Buf16(320),this.work=new I.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function a(t){var e;return t&&t.state?(e=t.state,t.total_in=t.total_out=e.total=0,t.msg="",e.wrap&&(t.adler=1&e.wrap),e.mode=P,e.last=0,e.havedict=0,e.dmax=32768,e.head=null,e.hold=0,e.bits=0,e.lencode=e.lendyn=new I.Buf32(i),e.distcode=e.distdyn=new I.Buf32(n),e.sane=1,e.back=-1,N):U}function o(t){var e;return t&&t.state?((e=t.state).wsize=0,e.whave=0,e.wnext=0,a(t)):U}function h(t,e){var r,i;return t&&t.state?(i=t.state,e<0?(r=0,e=-e):(r=1+(e>>4),e<48&&(e&=15)),e&&(e<8||15<e)?U:(null!==i.window&&i.wbits!==e&&(i.window=null),i.wrap=r,i.wbits=e,o(t))):U}function u(t,e){var r,i;return t?(i=new s,(t.state=i).window=null,(r=h(t,e))!==N&&(t.state=null),r):U}var l,f,d=!0;function j(t){if(d){var e;for(l=new I.Buf32(512),f=new I.Buf32(32),e=0;e<144;)t.lens[e++]=8;for(;e<256;)t.lens[e++]=9;for(;e<280;)t.lens[e++]=7;for(;e<288;)t.lens[e++]=8;for(T(D,t.lens,0,288,l,0,t.work,{bits:9}),e=0;e<32;)t.lens[e++]=5;T(F,t.lens,0,32,f,0,t.work,{bits:5}),d=!1}t.lencode=l,t.lenbits=9,t.distcode=f,t.distbits=5}function Z(t,e,r,i){var n,s=t.state;return null===s.window&&(s.wsize=1<<s.wbits,s.wnext=0,s.whave=0,s.window=new I.Buf8(s.wsize)),i>=s.wsize?(I.arraySet(s.window,e,r-s.wsize,s.wsize,0),s.wnext=0,s.whave=s.wsize):(i<(n=s.wsize-s.wnext)&&(n=i),I.arraySet(s.window,e,r-i,n,s.wnext),(i-=n)?(I.arraySet(s.window,e,r-i,i,0),s.wnext=i,s.whave=s.wsize):(s.wnext+=n,s.wnext===s.wsize&&(s.wnext=0),s.whave<s.wsize&&(s.whave+=n))),0}r.inflateReset=o,r.inflateReset2=h,r.inflateResetKeep=a,r.inflateInit=function(t){return u(t,15)},r.inflateInit2=u,r.inflate=function(t,e){var r,i,n,s,a,o,h,u,l,f,d,c,p,m,_,g,b,v,y,w,k,x,S,z,C=0,E=new I.Buf8(4),A=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!t||!t.state||!t.output||!t.input&&0!==t.avail_in)return U;12===(r=t.state).mode&&(r.mode=13),a=t.next_out,n=t.output,h=t.avail_out,s=t.next_in,i=t.input,o=t.avail_in,u=r.hold,l=r.bits,f=o,d=h,x=N;t:for(;;)switch(r.mode){case P:if(0===r.wrap){r.mode=13;break}for(;l<16;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}if(2&r.wrap&&35615===u){E[r.check=0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0),l=u=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&u)<<8)+(u>>8))%31){t.msg="incorrect header check",r.mode=30;break}if(8!=(15&u)){t.msg="unknown compression method",r.mode=30;break}if(l-=4,k=8+(15&(u>>>=4)),0===r.wbits)r.wbits=k;else if(k>r.wbits){t.msg="invalid window size",r.mode=30;break}r.dmax=1<<k,t.adler=r.check=1,r.mode=512&u?10:12,l=u=0;break;case 2:for(;l<16;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}if(r.flags=u,8!=(255&r.flags)){t.msg="unknown compression method",r.mode=30;break}if(57344&r.flags){t.msg="unknown header flags set",r.mode=30;break}r.head&&(r.head.text=u>>8&1),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=3;case 3:for(;l<32;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}r.head&&(r.head.time=u),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,E[2]=u>>>16&255,E[3]=u>>>24&255,r.check=B(r.check,E,4,0)),l=u=0,r.mode=4;case 4:for(;l<16;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}r.head&&(r.head.xflags=255&u,r.head.os=u>>8),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=5;case 5:if(1024&r.flags){for(;l<16;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}r.length=u,r.head&&(r.head.extra_len=u),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(o<(c=r.length)&&(c=o),c&&(r.head&&(k=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),I.arraySet(r.head.extra,i,s,c,k)),512&r.flags&&(r.check=B(r.check,i,c,s)),o-=c,s+=c,r.length-=c),r.length))break t;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===o)break t;for(c=0;k=i[s+c++],r.head&&k&&r.length<65536&&(r.head.name+=String.fromCharCode(k)),k&&c<o;);if(512&r.flags&&(r.check=B(r.check,i,c,s)),o-=c,s+=c,k)break t}else r.head&&(r.head.name=null);r.length=0,r.mode=8;case 8:if(4096&r.flags){if(0===o)break t;for(c=0;k=i[s+c++],r.head&&k&&r.length<65536&&(r.head.comment+=String.fromCharCode(k)),k&&c<o;);if(512&r.flags&&(r.check=B(r.check,i,c,s)),o-=c,s+=c,k)break t}else r.head&&(r.head.comment=null);r.mode=9;case 9:if(512&r.flags){for(;l<16;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}if(u!==(65535&r.check)){t.msg="header crc mismatch",r.mode=30;break}l=u=0}r.head&&(r.head.hcrc=r.flags>>9&1,r.head.done=!0),t.adler=r.check=0,r.mode=12;break;case 10:for(;l<32;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}t.adler=r.check=L(u),l=u=0,r.mode=11;case 11:if(0===r.havedict)return t.next_out=a,t.avail_out=h,t.next_in=s,t.avail_in=o,r.hold=u,r.bits=l,2;t.adler=r.check=1,r.mode=12;case 12:if(5===e||6===e)break t;case 13:if(r.last){u>>>=7&l,l-=7&l,r.mode=27;break}for(;l<3;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}switch(r.last=1&u,l-=1,3&(u>>>=1)){case 0:r.mode=14;break;case 1:if(j(r),r.mode=20,6!==e)break;u>>>=2,l-=2;break t;case 2:r.mode=17;break;case 3:t.msg="invalid block type",r.mode=30}u>>>=2,l-=2;break;case 14:for(u>>>=7&l,l-=7&l;l<32;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}if((65535&u)!=(u>>>16^65535)){t.msg="invalid stored block lengths",r.mode=30;break}if(r.length=65535&u,l=u=0,r.mode=15,6===e)break t;case 15:r.mode=16;case 16:if(c=r.length){if(o<c&&(c=o),h<c&&(c=h),0===c)break t;I.arraySet(n,i,s,c,a),o-=c,s+=c,h-=c,a+=c,r.length-=c;break}r.mode=12;break;case 17:for(;l<14;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}if(r.nlen=257+(31&u),u>>>=5,l-=5,r.ndist=1+(31&u),u>>>=5,l-=5,r.ncode=4+(15&u),u>>>=4,l-=4,286<r.nlen||30<r.ndist){t.msg="too many length or distance symbols",r.mode=30;break}r.have=0,r.mode=18;case 18:for(;r.have<r.ncode;){for(;l<3;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}r.lens[A[r.have++]]=7&u,u>>>=3,l-=3}for(;r.have<19;)r.lens[A[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,S={bits:r.lenbits},x=T(0,r.lens,0,19,r.lencode,0,r.work,S),r.lenbits=S.bits,x){t.msg="invalid code lengths set",r.mode=30;break}r.have=0,r.mode=19;case 19:for(;r.have<r.nlen+r.ndist;){for(;g=(C=r.lencode[u&(1<<r.lenbits)-1])>>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}if(b<16)u>>>=_,l-=_,r.lens[r.have++]=b;else{if(16===b){for(z=_+2;l<z;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}if(u>>>=_,l-=_,0===r.have){t.msg="invalid bit length repeat",r.mode=30;break}k=r.lens[r.have-1],c=3+(3&u),u>>>=2,l-=2}else if(17===b){for(z=_+3;l<z;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}l-=_,k=0,c=3+(7&(u>>>=_)),u>>>=3,l-=3}else{for(z=_+7;l<z;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}l-=_,k=0,c=11+(127&(u>>>=_)),u>>>=7,l-=7}if(r.have+c>r.nlen+r.ndist){t.msg="invalid bit length repeat",r.mode=30;break}for(;c--;)r.lens[r.have++]=k}}if(30===r.mode)break;if(0===r.lens[256]){t.msg="invalid code -- missing end-of-block",r.mode=30;break}if(r.lenbits=9,S={bits:r.lenbits},x=T(D,r.lens,0,r.nlen,r.lencode,0,r.work,S),r.lenbits=S.bits,x){t.msg="invalid literal/lengths set",r.mode=30;break}if(r.distbits=6,r.distcode=r.distdyn,S={bits:r.distbits},x=T(F,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,S),r.distbits=S.bits,x){t.msg="invalid distances set",r.mode=30;break}if(r.mode=20,6===e)break t;case 20:r.mode=21;case 21:if(6<=o&&258<=h){t.next_out=a,t.avail_out=h,t.next_in=s,t.avail_in=o,r.hold=u,r.bits=l,R(t,d),a=t.next_out,n=t.output,h=t.avail_out,s=t.next_in,i=t.input,o=t.avail_in,u=r.hold,l=r.bits,12===r.mode&&(r.back=-1);break}for(r.back=0;g=(C=r.lencode[u&(1<<r.lenbits)-1])>>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}if(g&&0==(240&g)){for(v=_,y=g,w=b;g=(C=r.lencode[w+((u&(1<<v+y)-1)>>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}u>>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,r.length=b,0===g){r.mode=26;break}if(32&g){r.back=-1,r.mode=12;break}if(64&g){t.msg="invalid literal/length code",r.mode=30;break}r.extra=15&g,r.mode=22;case 22:if(r.extra){for(z=r.extra;l<z;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}r.length+=u&(1<<r.extra)-1,u>>>=r.extra,l-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;g=(C=r.distcode[u&(1<<r.distbits)-1])>>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}if(0==(240&g)){for(v=_,y=g,w=b;g=(C=r.distcode[w+((u&(1<<v+y)-1)>>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}u>>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,64&g){t.msg="invalid distance code",r.mode=30;break}r.offset=b,r.extra=15&g,r.mode=24;case 24:if(r.extra){for(z=r.extra;l<z;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}r.offset+=u&(1<<r.extra)-1,u>>>=r.extra,l-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){t.msg="invalid distance too far back",r.mode=30;break}r.mode=25;case 25:if(0===h)break t;if(c=d-h,r.offset>c){if((c=r.offset-c)>r.whave&&r.sane){t.msg="invalid distance too far back",r.mode=30;break}p=c>r.wnext?(c-=r.wnext,r.wsize-c):r.wnext-c,c>r.length&&(c=r.length),m=r.window}else m=n,p=a-r.offset,c=r.length;for(h<c&&(c=h),h-=c,r.length-=c;n[a++]=m[p++],--c;);0===r.length&&(r.mode=21);break;case 26:if(0===h)break t;n[a++]=r.length,h--,r.mode=21;break;case 27:if(r.wrap){for(;l<32;){if(0===o)break t;o--,u|=i[s++]<<l,l+=8}if(d-=h,t.total_out+=d,r.total+=d,d&&(t.adler=r.check=r.flags?B(r.check,n,d,a-d):O(r.check,n,d,a-d)),d=h,(r.flags?u:L(u))!==r.check){t.msg="incorrect data check",r.mode=30;break}l=u=0}r.mode=28;case 28:if(r.wrap&&r.flags){for(;l<32;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}if(u!==(4294967295&r.total)){t.msg="incorrect length check",r.mode=30;break}l=u=0}r.mode=29;case 29:x=1;break t;case 30:x=-3;break t;case 31:return-4;case 32:default:return U}return t.next_out=a,t.avail_out=h,t.next_in=s,t.avail_in=o,r.hold=u,r.bits=l,(r.wsize||d!==t.avail_out&&r.mode<30&&(r.mode<27||4!==e))&&Z(t,t.output,t.next_out,d-t.avail_out)?(r.mode=31,-4):(f-=t.avail_in,d-=t.avail_out,t.total_in+=f,t.total_out+=d,r.total+=d,r.wrap&&d&&(t.adler=r.check=r.flags?B(r.check,n,d,t.next_out-d):O(r.check,n,d,t.next_out-d)),t.data_type=r.bits+(r.last?64:0)+(12===r.mode?128:0)+(20===r.mode||15===r.mode?256:0),(0==f&&0===d||4===e)&&x===N&&(x=-5),x)},r.inflateEnd=function(t){if(!t||!t.state)return U;var e=t.state;return e.window&&(e.window=null),t.state=null,N},r.inflateGetHeader=function(t,e){var r;return t&&t.state?0==(2&(r=t.state).wrap)?U:((r.head=e).done=!1,N):U},r.inflateSetDictionary=function(t,e){var r,i=e.length;return t&&t.state?0!==(r=t.state).wrap&&11!==r.mode?U:11===r.mode&&O(1,e,i,0)!==r.check?-3:Z(t,e,i,i)?(r.mode=31,-4):(r.havedict=1,N):U},r.inflateInfo="pako inflate (from Nodeca project)"},{"../utils/common":41,"./adler32":43,"./crc32":45,"./inffast":48,"./inftrees":50}],50:[function(t,e,r){"use strict";var D=t("../utils/common"),F=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],N=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],U=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],P=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];e.exports=function(t,e,r,i,n,s,a,o){var h,u,l,f,d,c,p,m,_,g=o.bits,b=0,v=0,y=0,w=0,k=0,x=0,S=0,z=0,C=0,E=0,A=null,I=0,O=new D.Buf16(16),B=new D.Buf16(16),R=null,T=0;for(b=0;b<=15;b++)O[b]=0;for(v=0;v<i;v++)O[e[r+v]]++;for(k=g,w=15;1<=w&&0===O[w];w--);if(w<k&&(k=w),0===w)return n[s++]=20971520,n[s++]=20971520,o.bits=1,0;for(y=1;y<w&&0===O[y];y++);for(k<y&&(k=y),b=z=1;b<=15;b++)if(z<<=1,(z-=O[b])<0)return-1;if(0<z&&(0===t||1!==w))return-1;for(B[1]=0,b=1;b<15;b++)B[b+1]=B[b]+O[b];for(v=0;v<i;v++)0!==e[r+v]&&(a[B[e[r+v]]++]=v);if(c=0===t?(A=R=a,19):1===t?(A=F,I-=257,R=N,T-=257,256):(A=U,R=P,-1),b=y,d=s,S=v=E=0,l=-1,f=(C=1<<(x=k))-1,1===t&&852<C||2===t&&592<C)return 1;for(;;){for(p=b-S,_=a[v]<c?(m=0,a[v]):a[v]>c?(m=R[T+a[v]],A[I+a[v]]):(m=96,0),h=1<<b-S,y=u=1<<x;n[d+(E>>S)+(u-=h)]=p<<24|m<<16|_|0,0!==u;);for(h=1<<b-1;E&h;)h>>=1;if(0!==h?(E&=h-1,E+=h):E=0,v++,0==--O[b]){if(b===w)break;b=e[r+a[v]]}if(k<b&&(E&f)!==l){for(0===S&&(S=k),d+=y,z=1<<(x=b-S);x+S<w&&!((z-=O[x+S])<=0);)x++,z<<=1;if(C+=1<<x,1===t&&852<C||2===t&&592<C)return 1;n[l=E&f]=k<<24|x<<16|d-s|0}}return 0!==E&&(n[d+E]=b-S<<24|64<<16|0),o.bits=k,0}},{"../utils/common":41}],51:[function(t,e,r){"use strict";e.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],52:[function(t,e,r){"use strict";var n=t("../utils/common"),o=0,h=1;function i(t){for(var e=t.length;0<=--e;)t[e]=0}var s=0,a=29,u=256,l=u+1+a,f=30,d=19,_=2*l+1,g=15,c=16,p=7,m=256,b=16,v=17,y=18,w=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],k=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],x=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],S=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],z=new Array(2*(l+2));i(z);var C=new Array(2*f);i(C);var E=new Array(512);i(E);var A=new Array(256);i(A);var I=new Array(a);i(I);var O,B,R,T=new Array(f);function D(t,e,r,i,n){this.static_tree=t,this.extra_bits=e,this.extra_base=r,this.elems=i,this.max_length=n,this.has_stree=t&&t.length}function F(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}function N(t){return t<256?E[t]:E[256+(t>>>7)]}function U(t,e){t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255}function P(t,e,r){t.bi_valid>c-r?(t.bi_buf|=e<<t.bi_valid&65535,U(t,t.bi_buf),t.bi_buf=e>>c-t.bi_valid,t.bi_valid+=r-c):(t.bi_buf|=e<<t.bi_valid&65535,t.bi_valid+=r)}function L(t,e,r){P(t,r[2*e],r[2*e+1])}function j(t,e){for(var r=0;r|=1&t,t>>>=1,r<<=1,0<--e;);return r>>>1}function Z(t,e,r){var i,n,s=new Array(g+1),a=0;for(i=1;i<=g;i++)s[i]=a=a+r[i-1]<<1;for(n=0;n<=e;n++){var o=t[2*n+1];0!==o&&(t[2*n]=j(s[o]++,o))}}function W(t){var e;for(e=0;e<l;e++)t.dyn_ltree[2*e]=0;for(e=0;e<f;e++)t.dyn_dtree[2*e]=0;for(e=0;e<d;e++)t.bl_tree[2*e]=0;t.dyn_ltree[2*m]=1,t.opt_len=t.static_len=0,t.last_lit=t.matches=0}function M(t){8<t.bi_valid?U(t,t.bi_buf):0<t.bi_valid&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0}function H(t,e,r,i){var n=2*e,s=2*r;return t[n]<t[s]||t[n]===t[s]&&i[e]<=i[r]}function G(t,e,r){for(var i=t.heap[r],n=r<<1;n<=t.heap_len&&(n<t.heap_len&&H(e,t.heap[n+1],t.heap[n],t.depth)&&n++,!H(e,i,t.heap[n],t.depth));)t.heap[r]=t.heap[n],r=n,n<<=1;t.heap[r]=i}function K(t,e,r){var i,n,s,a,o=0;if(0!==t.last_lit)for(;i=t.pending_buf[t.d_buf+2*o]<<8|t.pending_buf[t.d_buf+2*o+1],n=t.pending_buf[t.l_buf+o],o++,0===i?L(t,n,e):(L(t,(s=A[n])+u+1,e),0!==(a=w[s])&&P(t,n-=I[s],a),L(t,s=N(--i),r),0!==(a=k[s])&&P(t,i-=T[s],a)),o<t.last_lit;);L(t,m,e)}function Y(t,e){var r,i,n,s=e.dyn_tree,a=e.stat_desc.static_tree,o=e.stat_desc.has_stree,h=e.stat_desc.elems,u=-1;for(t.heap_len=0,t.heap_max=_,r=0;r<h;r++)0!==s[2*r]?(t.heap[++t.heap_len]=u=r,t.depth[r]=0):s[2*r+1]=0;for(;t.heap_len<2;)s[2*(n=t.heap[++t.heap_len]=u<2?++u:0)]=1,t.depth[n]=0,t.opt_len--,o&&(t.static_len-=a[2*n+1]);for(e.max_code=u,r=t.heap_len>>1;1<=r;r--)G(t,s,r);for(n=h;r=t.heap[1],t.heap[1]=t.heap[t.heap_len--],G(t,s,1),i=t.heap[1],t.heap[--t.heap_max]=r,t.heap[--t.heap_max]=i,s[2*n]=s[2*r]+s[2*i],t.depth[n]=(t.depth[r]>=t.depth[i]?t.depth[r]:t.depth[i])+1,s[2*r+1]=s[2*i+1]=n,t.heap[1]=n++,G(t,s,1),2<=t.heap_len;);t.heap[--t.heap_max]=t.heap[1],function(t,e){var r,i,n,s,a,o,h=e.dyn_tree,u=e.max_code,l=e.stat_desc.static_tree,f=e.stat_desc.has_stree,d=e.stat_desc.extra_bits,c=e.stat_desc.extra_base,p=e.stat_desc.max_length,m=0;for(s=0;s<=g;s++)t.bl_count[s]=0;for(h[2*t.heap[t.heap_max]+1]=0,r=t.heap_max+1;r<_;r++)p<(s=h[2*h[2*(i=t.heap[r])+1]+1]+1)&&(s=p,m++),h[2*i+1]=s,u<i||(t.bl_count[s]++,a=0,c<=i&&(a=d[i-c]),o=h[2*i],t.opt_len+=o*(s+a),f&&(t.static_len+=o*(l[2*i+1]+a)));if(0!==m){do{for(s=p-1;0===t.bl_count[s];)s--;t.bl_count[s]--,t.bl_count[s+1]+=2,t.bl_count[p]--,m-=2}while(0<m);for(s=p;0!==s;s--)for(i=t.bl_count[s];0!==i;)u<(n=t.heap[--r])||(h[2*n+1]!==s&&(t.opt_len+=(s-h[2*n+1])*h[2*n],h[2*n+1]=s),i--)}}(t,e),Z(s,u,t.bl_count)}function X(t,e,r){var i,n,s=-1,a=e[1],o=0,h=7,u=4;for(0===a&&(h=138,u=3),e[2*(r+1)+1]=65535,i=0;i<=r;i++)n=a,a=e[2*(i+1)+1],++o<h&&n===a||(o<u?t.bl_tree[2*n]+=o:0!==n?(n!==s&&t.bl_tree[2*n]++,t.bl_tree[2*b]++):o<=10?t.bl_tree[2*v]++:t.bl_tree[2*y]++,s=n,u=(o=0)===a?(h=138,3):n===a?(h=6,3):(h=7,4))}function V(t,e,r){var i,n,s=-1,a=e[1],o=0,h=7,u=4;for(0===a&&(h=138,u=3),i=0;i<=r;i++)if(n=a,a=e[2*(i+1)+1],!(++o<h&&n===a)){if(o<u)for(;L(t,n,t.bl_tree),0!=--o;);else 0!==n?(n!==s&&(L(t,n,t.bl_tree),o--),L(t,b,t.bl_tree),P(t,o-3,2)):o<=10?(L(t,v,t.bl_tree),P(t,o-3,3)):(L(t,y,t.bl_tree),P(t,o-11,7));s=n,u=(o=0)===a?(h=138,3):n===a?(h=6,3):(h=7,4)}}i(T);var q=!1;function J(t,e,r,i){P(t,(s<<1)+(i?1:0),3),function(t,e,r,i){M(t),i&&(U(t,r),U(t,~r)),n.arraySet(t.pending_buf,t.window,e,r,t.pending),t.pending+=r}(t,e,r,!0)}r._tr_init=function(t){q||(function(){var t,e,r,i,n,s=new Array(g+1);for(i=r=0;i<a-1;i++)for(I[i]=r,t=0;t<1<<w[i];t++)A[r++]=i;for(A[r-1]=i,i=n=0;i<16;i++)for(T[i]=n,t=0;t<1<<k[i];t++)E[n++]=i;for(n>>=7;i<f;i++)for(T[i]=n<<7,t=0;t<1<<k[i]-7;t++)E[256+n++]=i;for(e=0;e<=g;e++)s[e]=0;for(t=0;t<=143;)z[2*t+1]=8,t++,s[8]++;for(;t<=255;)z[2*t+1]=9,t++,s[9]++;for(;t<=279;)z[2*t+1]=7,t++,s[7]++;for(;t<=287;)z[2*t+1]=8,t++,s[8]++;for(Z(z,l+1,s),t=0;t<f;t++)C[2*t+1]=5,C[2*t]=j(t,5);O=new D(z,w,u+1,l,g),B=new D(C,k,0,f,g),R=new D(new Array(0),x,0,d,p)}(),q=!0),t.l_desc=new F(t.dyn_ltree,O),t.d_desc=new F(t.dyn_dtree,B),t.bl_desc=new F(t.bl_tree,R),t.bi_buf=0,t.bi_valid=0,W(t)},r._tr_stored_block=J,r._tr_flush_block=function(t,e,r,i){var n,s,a=0;0<t.level?(2===t.strm.data_type&&(t.strm.data_type=function(t){var e,r=4093624447;for(e=0;e<=31;e++,r>>>=1)if(1&r&&0!==t.dyn_ltree[2*e])return o;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return h;for(e=32;e<u;e++)if(0!==t.dyn_ltree[2*e])return h;return o}(t)),Y(t,t.l_desc),Y(t,t.d_desc),a=function(t){var e;for(X(t,t.dyn_ltree,t.l_desc.max_code),X(t,t.dyn_dtree,t.d_desc.max_code),Y(t,t.bl_desc),e=d-1;3<=e&&0===t.bl_tree[2*S[e]+1];e--);return t.opt_len+=3*(e+1)+5+5+4,e}(t),n=t.opt_len+3+7>>>3,(s=t.static_len+3+7>>>3)<=n&&(n=s)):n=s=r+5,r+4<=n&&-1!==e?J(t,e,r,i):4===t.strategy||s===n?(P(t,2+(i?1:0),3),K(t,z,C)):(P(t,4+(i?1:0),3),function(t,e,r,i){var n;for(P(t,e-257,5),P(t,r-1,5),P(t,i-4,4),n=0;n<i;n++)P(t,t.bl_tree[2*S[n]+1],3);V(t,t.dyn_ltree,e-1),V(t,t.dyn_dtree,r-1)}(t,t.l_desc.max_code+1,t.d_desc.max_code+1,a+1),K(t,t.dyn_ltree,t.dyn_dtree)),W(t),i&&M(t)},r._tr_tally=function(t,e,r){return t.pending_buf[t.d_buf+2*t.last_lit]=e>>>8&255,t.pending_buf[t.d_buf+2*t.last_lit+1]=255&e,t.pending_buf[t.l_buf+t.last_lit]=255&r,t.last_lit++,0===e?t.dyn_ltree[2*r]++:(t.matches++,e--,t.dyn_ltree[2*(A[r]+u+1)]++,t.dyn_dtree[2*N(e)]++),t.last_lit===t.lit_bufsize-1},r._tr_align=function(t){P(t,2,3),L(t,m,z),function(t){16===t.bi_valid?(U(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):8<=t.bi_valid&&(t.pending_buf[t.pending++]=255&t.bi_buf,t.bi_buf>>=8,t.bi_valid-=8)}(t)}},{"../utils/common":41}],53:[function(t,e,r){"use strict";e.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(t,e,r){"use strict";e.exports="function"==typeof setImmediate?setImmediate:function(){var t=[].slice.apply(arguments);t.splice(1,0,0),setTimeout.apply(null,t)}},{}]},{},[10])(10)});
+/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__("tjlA").Buffer, __webpack_require__("yLpj"), __webpack_require__("URgk").setImmediate))
 
 /***/ })
 
@@ -55785,6 +55785,7 @@
     var L_2147483647 = Kotlin.Long.fromInt(-2147483647);
     var L9223372036854 = new Kotlin.Long(2077252342, 2147);
     var L_9223372036854 = new Kotlin.Long(-2077252342, -2148);
+    var L9999999999999 = new Kotlin.Long(1316134911, 2328);
     var L_4611686018426999999 = new Kotlin.Long(387905, -1073741824);
     var L4611686018426999999 = new Kotlin.Long(-387905, 1073741823);
     var L4611686018427387903 = new Kotlin.Long(-1, 1073741823);
@@ -55797,6 +55798,8 @@
     RuntimeException.prototype.constructor = RuntimeException;
     KotlinNothingValueException.prototype = Object.create(RuntimeException.prototype);
     KotlinNothingValueException.prototype.constructor = KotlinNothingValueException;
+    ReadAfterEOFException.prototype = Object.create(RuntimeException.prototype);
+    ReadAfterEOFException.prototype.constructor = ReadAfterEOFException;
     CharProgressionIterator.prototype = Object.create(CharIterator.prototype);
     CharProgressionIterator.prototype.constructor = CharProgressionIterator;
     IntProgressionIterator.prototype = Object.create(IntIterator.prototype);
@@ -77178,7 +77181,7 @@
     function minus_0($receiver, elements) {
       if (elements.length === 0)
         return toList_8($receiver);
-      var other = toHashSet(elements);
+      var other = convertToSetForSetOperation_1(elements);
       var destination = ArrayList_init();
       var tmp$;
       tmp$ = $receiver.iterator();
@@ -77204,7 +77207,7 @@
       return destination;
     }
     function minus_2($receiver, elements) {
-      var other = toHashSet_9(elements);
+      var other = convertToSetForSetOperation_0(elements);
       if (other.isEmpty())
         return toList_8($receiver);
       var destination = ArrayList_init();
@@ -80858,7 +80861,7 @@
       };
     }
     minus$ObjectLiteral_0.prototype.iterator = function () {
-      var other = toHashSet(this.closure$elements);
+      var other = convertToSetForSetOperation_1(this.closure$elements);
       return filterNot_9(this.this$minus, minus$ObjectLiteral$iterator$lambda_0(other)).iterator();
     };
     minus$ObjectLiteral_0.$metadata$ = {kind: Kind_CLASS, interfaces: [Sequence]};
@@ -80897,7 +80900,7 @@
       };
     }
     minus$ObjectLiteral_2.prototype.iterator = function () {
-      var other = toHashSet_9(this.closure$elements);
+      var other = convertToSetForSetOperation_0(this.closure$elements);
       if (other.isEmpty())
         return this.this$minus.iterator();
       else
@@ -92031,6 +92034,11 @@
     ExperimentalJsExport.$metadata$ = {kind: Kind_CLASS, simpleName: 'ExperimentalJsExport', interfaces: [Annotation]};
     var PI;
     var E;
+    function ReadAfterEOFException(message) {
+      RuntimeException_init_0(message, this);
+      this.name = 'ReadAfterEOFException';
+    }
+    ReadAfterEOFException.$metadata$ = {kind: Kind_CLASS, simpleName: 'ReadAfterEOFException', interfaces: [RuntimeException]};
     function Annotation() {
     }
     Annotation.$metadata$ = {kind: Kind_INTERFACE, simpleName: 'Annotation', interfaces: []};
@@ -95369,6 +95377,9 @@
         var message = 'capacity must be non-negative.';
         throw IllegalArgumentException_init_0(message.toString());
       }}
+    function brittleContainsOptimizationEnabled() {
+      return false;
+    }
     function AbstractMutableCollection() {
       AbstractCollection.call(this);
     }
@@ -95439,6 +95450,7 @@
     };
     AbstractMutableList.prototype.addAll_u57x28$ = function (index, elements) {
       var tmp$, tmp$_0;
+      AbstractList$Companion_getInstance().checkPositionIndex_6xvm5r$(index, this.size);
       this.checkIsMutable();
       var _index = index;
       var changed = false;
@@ -95754,16 +95766,6 @@
     Object.defineProperty(AbstractMutableMap$get_AbstractMutableMap$values$ObjectLiteral.prototype, 'size', {configurable: true, get: function () {
       return this.this$AbstractMutableMap.size;
     }});
-    AbstractMutableMap$get_AbstractMutableMap$values$ObjectLiteral.prototype.equals = function (other) {
-      if (this === other)
-        return true;
-      if (!Kotlin.isType(other, Collection))
-        return false;
-      return AbstractList$Companion_getInstance().orderedEquals_e92ka7$(this, other);
-    };
-    AbstractMutableMap$get_AbstractMutableMap$values$ObjectLiteral.prototype.hashCode = function () {
-      return AbstractList$Companion_getInstance().orderedHashCode_nykoif$(this);
-    };
     AbstractMutableMap$get_AbstractMutableMap$values$ObjectLiteral.prototype.checkIsMutable = function () {
       this.this$AbstractMutableMap.checkIsMutable();
     };
@@ -95937,8 +95939,6 @@
       return $this;
     }
     function ArrayList_init_0(initialCapacity, $this) {
-      if (initialCapacity === void 0)
-        initialCapacity = 0;
       $this = $this || Object.create(ArrayList.prototype);
       ArrayList.call($this, []);
       return $this;
@@ -96182,8 +96182,6 @@
       return $this;
     }
     function HashMap_init_1(initialCapacity, loadFactor, $this) {
-      if (loadFactor === void 0)
-        loadFactor = 0.0;
       $this = $this || Object.create(HashMap.prototype);
       HashMap_init_0($this);
       if (!(initialCapacity >= 0)) {
@@ -96252,8 +96250,6 @@
       return $this;
     }
     function HashSet_init_1(initialCapacity, loadFactor, $this) {
-      if (loadFactor === void 0)
-        loadFactor = 0.0;
       $this = $this || Object.create(HashSet.prototype);
       AbstractMutableSet.call($this);
       HashSet.call($this);
@@ -96766,8 +96762,6 @@
       return $this;
     }
     function LinkedHashMap_init_1(initialCapacity, loadFactor, $this) {
-      if (loadFactor === void 0)
-        loadFactor = 0.0;
       $this = $this || Object.create(LinkedHashMap.prototype);
       HashMap_init_1(initialCapacity, loadFactor, $this);
       LinkedHashMap.call($this);
@@ -96823,8 +96817,6 @@
       return $this;
     }
     function LinkedHashSet_init_2(initialCapacity, loadFactor, $this) {
-      if (loadFactor === void 0)
-        loadFactor = 0.0;
       $this = $this || Object.create(LinkedHashSet.prototype);
       HashSet_init_3(LinkedHashMap_init_1(initialCapacity, loadFactor), $this);
       LinkedHashSet.call($this);
@@ -96921,6 +96913,12 @@
     function print(message) {
       output.print_s8jyv4$(message);
     }
+    function readln() {
+      throw UnsupportedOperationException_init_0('readln is not supported in Kotlin/JS');
+    }
+    function readlnOrNull() {
+      throw UnsupportedOperationException_init_0('readlnOrNull is not supported in Kotlin/JS');
+    }
     function SafeContinuation(delegate, initialResult) {
       this.delegate_0 = delegate;
       this.result_0 = initialResult;
@@ -99168,6 +99166,12 @@
       }
     }
     RegexOption.valueOf_61zpoe$ = RegexOption$valueOf;
+    function toFlags$lambda(it) {
+      return it.value;
+    }
+    function toFlags($receiver, prepend) {
+      return joinToString_8($receiver, '', prepend, void 0, void 0, void 0, toFlags$lambda);
+    }
     function MatchGroup(value) {
       this.value = value;
     }
@@ -99193,8 +99197,39 @@
       Regex$Companion_getInstance();
       this.pattern = pattern;
       this.options = toSet_8(options);
-      this.nativePattern_0 = new RegExp(pattern, joinToString_8(options, '', 'gu', void 0, void 0, void 0, Regex$nativePattern$lambda));
+      this.nativePattern_0 = new RegExp(pattern, toFlags(options, 'gu'));
+      this.nativeStickyPattern_0 = null;
+      this.nativeMatchesEntirePattern_0 = null;
     }
+    Regex.prototype.initStickyPattern_0 = function () {
+      var tmp$;
+      var tmp$_0;
+      if ((tmp$ = this.nativeStickyPattern_0) != null)
+        tmp$_0 = tmp$;
+      else {
+        var $receiver = new RegExp(this.pattern, toFlags(this.options, 'yu'));
+        this.nativeStickyPattern_0 = $receiver;
+        tmp$_0 = $receiver;
+      }
+      return tmp$_0;
+    };
+    Regex.prototype.initMatchesEntirePattern_0 = function () {
+      var tmp$;
+      var tmp$_0;
+      if ((tmp$ = this.nativeMatchesEntirePattern_0) != null)
+        tmp$_0 = tmp$;
+      else {
+        var block$result;
+        if (startsWith_1(this.pattern, 94) && endsWith_0(this.pattern, 36)) {
+          block$result = this.nativePattern_0;
+        } else
+          return new RegExp('^' + trimEnd_2(trimStart_2(this.pattern, Kotlin.charArrayOf(94)), Kotlin.charArrayOf(36)) + '$', toFlags(this.options, 'gu'));
+        var $receiver = block$result;
+        this.nativeMatchesEntirePattern_0 = $receiver;
+        tmp$_0 = $receiver;
+      }
+      return tmp$_0;
+    };
     Regex.prototype.matches_6bul2c$ = function (input) {
       reset(this.nativePattern_0);
       var match = this.nativePattern_0.exec(input.toString());
@@ -99204,12 +99239,19 @@
       reset(this.nativePattern_0);
       return this.nativePattern_0.test(input.toString());
     };
+    Regex.prototype.matchesAt_905azu$ = function (input, index) {
+      if (index < 0 || index > input.length) {
+        throw new IndexOutOfBoundsException('index out of bounds: ' + index + ', input length: ' + input.length);
+      }var pattern = this.initStickyPattern_0();
+      pattern.lastIndex = index;
+      return pattern.test(input.toString());
+    };
     Regex.prototype.find_905azu$ = function (input, startIndex) {
       if (startIndex === void 0)
         startIndex = 0;
       if (startIndex < 0 || startIndex > input.length) {
         throw new IndexOutOfBoundsException('Start index out of bounds: ' + startIndex + ', input length: ' + input.length);
-      }return findNext(this.nativePattern_0, input.toString(), startIndex);
+      }return findNext(this.nativePattern_0, input.toString(), startIndex, this.nativePattern_0);
     };
     function Regex$findAll$lambda(closure$input, closure$startIndex, this$Regex) {
       return function () {
@@ -99227,57 +99269,63 @@
       }return generateSequence_1(Regex$findAll$lambda(input, startIndex, this), Regex$findAll$lambda_0);
     };
     Regex.prototype.matchEntire_6bul2c$ = function (input) {
-      if (startsWith_1(this.pattern, 94) && endsWith_0(this.pattern, 36))
-        return this.find_905azu$(input);
-      else
-        return (new Regex('^' + trimEnd_2(trimStart_2(this.pattern, Kotlin.charArrayOf(94)), Kotlin.charArrayOf(36)) + '$', this.options)).find_905azu$(input);
+      return findNext(this.initMatchesEntirePattern_0(), input.toString(), 0, this.nativePattern_0);
     };
-    Regex.prototype.replace_x2uqeu$ = function (input, replacement) {
-      return input.toString().replace(this.nativePattern_0, replacement);
+    Regex.prototype.matchAt_905azu$ = function (input, index) {
+      if (index < 0 || index > input.length) {
+        throw new IndexOutOfBoundsException('index out of bounds: ' + index + ', input length: ' + input.length);
+      }return findNext(this.initStickyPattern_0(), input.toString(), index, this.nativePattern_0);
     };
-    Regex.prototype.replace_20wsma$ = defineInlineFunction('kotlin.kotlin.text.Regex.replace_20wsma$', wrapFunction(function () {
-      var StringBuilder_init = _.kotlin.text.StringBuilder_init_za3lpa$;
-      var ensureNotNull = Kotlin.ensureNotNull;
-      return function (input, transform) {
-        var match = this.find_905azu$(input);
-        if (match == null)
-          return input.toString();
-        var lastStart = 0;
-        var length = input.length;
-        var sb = StringBuilder_init(length);
-        do {
-          var foundMatch = ensureNotNull(match);
-          sb.append_ezbsdh$(input, lastStart, foundMatch.range.start);
-          sb.append_gw00v9$(transform(foundMatch));
-          lastStart = foundMatch.range.endInclusive + 1 | 0;
-          match = foundMatch.next();
-        }
-         while (lastStart < length && match != null);
-        if (lastStart < length) {
-          sb.append_ezbsdh$(input, lastStart, length);
-        }return sb.toString();
+    function Regex$replace$lambda(closure$replacement) {
+      return function (it) {
+        return substituteGroupRefs(it, closure$replacement);
       };
-    }));
-    Regex.prototype.replaceFirst_x2uqeu$ = function (input, replacement) {
-      var $receiver = this.options;
-      var destination = ArrayList_init_0(collectionSizeOrDefault($receiver, 10));
-      var tmp$;
-      tmp$ = $receiver.iterator();
-      while (tmp$.hasNext()) {
-        var item = tmp$.next();
-        destination.add_11rb$(item.value);
+    }
+    Regex.prototype.replace_x2uqeu$ = function (input, replacement) {
+      if (!contains_54(replacement, 92) && !contains_54(replacement, 36)) {
+        return input.toString().replace(this.nativePattern_0, replacement);
+      }return this.replace_20wsma$(input, Regex$replace$lambda(replacement));
+    };
+    Regex.prototype.replace_20wsma$ = function (input, transform) {
+      var match = this.find_905azu$(input);
+      if (match == null)
+        return input.toString();
+      var lastStart = 0;
+      var length = input.length;
+      var sb = StringBuilder_init(length);
+      do {
+        var foundMatch = ensureNotNull(match);
+        sb.append_ezbsdh$(input, lastStart, foundMatch.range.start);
+        sb.append_gw00v9$(transform(foundMatch));
+        lastStart = foundMatch.range.endInclusive + 1 | 0;
+        match = foundMatch.next();
       }
-      var nonGlobalOptions = joinToString_8(destination, '');
-      return input.toString().replace(new RegExp(this.pattern, nonGlobalOptions), replacement);
+       while (lastStart < length && match != null);
+      if (lastStart < length) {
+        sb.append_ezbsdh$(input, lastStart, length);
+      }return sb.toString();
+    };
+    Regex.prototype.replaceFirst_x2uqeu$ = function (input, replacement) {
+      var tmp$;
+      if (!contains_54(replacement, 92) && !contains_54(replacement, 36)) {
+        var nonGlobalOptions = toFlags(this.options, 'u');
+        return input.toString().replace(new RegExp(this.pattern, nonGlobalOptions), replacement);
+      }tmp$ = this.find_905azu$(input);
+      if (tmp$ == null) {
+        return input.toString();
+      }var match = tmp$;
+      var $receiver = StringBuilder_init_1();
+      $receiver.append_pdl1vj$(Kotlin.subSequence(input, 0, match.range.first).toString());
+      $receiver.append_pdl1vj$(substituteGroupRefs(match, replacement));
+      $receiver.append_pdl1vj$(Kotlin.subSequence(input, match.range.last + 1 | 0, input.length).toString());
+      return $receiver.toString();
     };
     Regex.prototype.split_905azu$ = function (input, limit) {
       if (limit === void 0)
         limit = 0;
       var tmp$;
-      if (!(limit >= 0)) {
-        var message = 'Limit must be non-negative, but was ' + limit;
-        throw IllegalArgumentException_init_0(message.toString());
-      }var it = this.findAll_905azu$(input);
+      requireNonNegativeLimit(limit);
+      var it = this.findAll_905azu$(input);
       var matches = limit === 0 ? it : take_9(it, limit - 1 | 0);
       var result = ArrayList_init();
       var lastStart = 0;
@@ -99290,13 +99338,109 @@
       result.add_11rb$(Kotlin.subSequence(input, lastStart, input.length).toString());
       return result;
     };
+    function Coroutine$Regex$splitToSequence$lambda(closure$input_0, this$Regex_0, closure$limit_0, $receiver_0, controller, continuation_0) {
+      CoroutineImpl.call(this, continuation_0);
+      this.$controller = controller;
+      this.exceptionState_0 = 1;
+      this.local$closure$input = closure$input_0;
+      this.local$this$Regex = this$Regex_0;
+      this.local$closure$limit = closure$limit_0;
+      this.local$match = void 0;
+      this.local$nextStart = void 0;
+      this.local$splitCount = void 0;
+      this.local$foundMatch = void 0;
+      this.local$$receiver = $receiver_0;
+    }
+    Coroutine$Regex$splitToSequence$lambda.$metadata$ = {kind: Kotlin.Kind.CLASS, simpleName: null, interfaces: [CoroutineImpl]};
+    Coroutine$Regex$splitToSequence$lambda.prototype = Object.create(CoroutineImpl.prototype);
+    Coroutine$Regex$splitToSequence$lambda.prototype.constructor = Coroutine$Regex$splitToSequence$lambda;
+    Coroutine$Regex$splitToSequence$lambda.prototype.doResume = function () {
+      do
+        try {
+          switch (this.state_0) {
+            case 0:
+              this.local$match = this.local$this$Regex.find_905azu$(this.local$closure$input);
+              if (this.local$match == null || this.local$closure$limit === 1) {
+                this.state_0 = 2;
+                this.result_0 = this.local$$receiver.yield_11rb$(this.local$closure$input.toString(), this);
+                if (this.result_0 === get_COROUTINE_SUSPENDED())
+                  return get_COROUTINE_SUSPENDED();
+                continue;
+              } else {
+                this.state_0 = 3;
+                continue;
+              }
+
+            case 1:
+              throw this.exception_0;
+            case 2:
+              return;
+            case 3:
+              this.local$nextStart = 0;
+              this.local$splitCount = 0;
+              this.state_0 = 4;
+              continue;
+            case 4:
+              this.local$foundMatch = ensureNotNull(this.local$match);
+              this.state_0 = 5;
+              this.result_0 = this.local$$receiver.yield_11rb$(Kotlin.subSequence(this.local$closure$input, this.local$nextStart, this.local$foundMatch.range.first).toString(), this);
+              if (this.result_0 === get_COROUTINE_SUSPENDED())
+                return get_COROUTINE_SUSPENDED();
+              continue;
+            case 5:
+              this.local$nextStart = this.local$foundMatch.range.endInclusive + 1 | 0;
+              this.local$match = this.local$foundMatch.next();
+              if ((this.local$splitCount = this.local$splitCount + 1 | 0, this.local$splitCount) === (this.local$closure$limit - 1 | 0) || this.local$match == null) {
+                this.state_0 = 6;
+                continue;
+              }
+              this.state_0 = 4;
+              continue;
+            case 6:
+              this.state_0 = 7;
+              this.result_0 = this.local$$receiver.yield_11rb$(Kotlin.subSequence(this.local$closure$input, this.local$nextStart, this.local$closure$input.length).toString(), this);
+              if (this.result_0 === get_COROUTINE_SUSPENDED())
+                return get_COROUTINE_SUSPENDED();
+              continue;
+            case 7:
+              return this.result_0;
+            default:this.state_0 = 1;
+              throw new Error('State Machine Unreachable execution');
+          }
+        } catch (e) {
+          if (this.state_0 === 1) {
+            this.exceptionState_0 = this.state_0;
+            throw e;
+          } else {
+            this.state_0 = this.exceptionState_0;
+            this.exception_0 = e;
+          }
+        }
+       while (true);
+    };
+    function Regex$splitToSequence$lambda(closure$input_0, this$Regex_0, closure$limit_0) {
+      return function ($receiver_0, continuation_0, suspended) {
+        var instance = new Coroutine$Regex$splitToSequence$lambda(closure$input_0, this$Regex_0, closure$limit_0, $receiver_0, this, continuation_0);
+        if (suspended)
+          return instance;
+        else
+          return instance.doResume(null);
+      };
+    }
+    Regex.prototype.splitToSequence_905azu$ = function (input, limit) {
+      if (limit === void 0)
+        limit = 0;
+      requireNonNegativeLimit(limit);
+      return sequence(Regex$splitToSequence$lambda(input, this, limit));
+    };
     Regex.prototype.toString = function () {
       return this.nativePattern_0.toString();
     };
     function Regex$Companion() {
       Regex$Companion_instance = this;
       this.patternEscape_0 = new RegExp('[\\\\^$*+?.()|[\\]{}]', 'g');
-      this.replacementEscape_0 = new RegExp('\\$', 'g');
+      this.replacementEscape_0 = new RegExp('[\\\\$]', 'g');
+      this.nativeReplacementEscape_0 = new RegExp('\\$', 'g');
     }
     Regex$Companion.prototype.fromLiteral_61zpoe$ = function (literal) {
       return Regex_init_0(this.escape_61zpoe$(literal));
@@ -99305,7 +99449,10 @@
       return literal.replace(this.patternEscape_0, '\\$&');
     };
     Regex$Companion.prototype.escapeReplacement_61zpoe$ = function (literal) {
-      return literal.replace(this.replacementEscape_0, '$$$$');
+      return literal.replace(this.replacementEscape_0, '\\$&');
+    };
+    Regex$Companion.prototype.nativeEscapeReplacement_y4putb$ = function (literal) {
+      return literal.replace(this.nativeReplacementEscape_0, '$$$$');
     };
     Regex$Companion.$metadata$ = {kind: Kind_OBJECT, simpleName: 'Companion', interfaces: []};
     var Regex$Companion_instance = null;
@@ -99314,9 +99461,6 @@
         new Regex$Companion();
       }return Regex$Companion_instance;
     }
-    function Regex$nativePattern$lambda(it) {
-      return it.value;
-    }
     Regex.$metadata$ = {kind: Kind_CLASS, simpleName: 'Regex', interfaces: []};
     function Regex_init(pattern, option, $this) {
       $this = $this || Object.create(Regex.prototype);
@@ -99328,15 +99472,9 @@
       Regex.call($this, pattern, emptySet());
       return $this;
     }
-    function Regex_0(pattern, option) {
-      return new Regex(pattern, setOf(option));
-    }
-    function Regex_1(pattern) {
-      return new Regex(pattern, emptySet());
-    }
-    function findNext$ObjectLiteral(closure$match, this$findNext, closure$input, closure$range) {
+    function findNext$ObjectLiteral(closure$match, closure$nextPattern, closure$input, closure$range) {
       this.closure$match = closure$match;
-      this.this$findNext = this$findNext;
+      this.closure$nextPattern = closure$nextPattern;
       this.closure$input = closure$input;
       this.closure$range = closure$range;
       this.range_co6b9w$_0 = closure$range;
@@ -99370,7 +99508,7 @@
       }return ensureNotNull(this.groupValues__0);
     }});
     findNext$ObjectLiteral.prototype.next = function () {
-      return findNext(this.this$findNext, this.closure$input, this.closure$range.isEmpty() ? this.closure$range.start + 1 | 0 : this.closure$range.endInclusive + 1 | 0);
+      return findNext(this.closure$nextPattern, this.closure$input, this.closure$range.isEmpty() ? this.closure$range.start + 1 | 0 : this.closure$range.endInclusive + 1 | 0, this.closure$nextPattern);
     };
     function findNext$ObjectLiteral$groups$ObjectLiteral(closure$match) {
       this.closure$match = closure$match;
@@ -99393,13 +99531,56 @@
     };
     findNext$ObjectLiteral$groups$ObjectLiteral.$metadata$ = {kind: Kind_CLASS, interfaces: [AbstractCollection, MatchGroupCollection]};
     findNext$ObjectLiteral.$metadata$ = {kind: Kind_CLASS, interfaces: [MatchResult]};
-    function findNext($receiver, input, from) {
+    function findNext($receiver, input, from, nextPattern) {
       $receiver.lastIndex = from;
       var match = $receiver.exec(input);
       if (match == null)
         return null;
       var range = new IntRange(match.index, $receiver.lastIndex - 1 | 0);
-      return new findNext$ObjectLiteral(match, $receiver, input, range);
+      return new findNext$ObjectLiteral(match, nextPattern, input, range);
+    }
+    function substituteGroupRefs(match, replacement) {
+      var tmp$, tmp$_0;
+      var index = 0;
+      var result = StringBuilder_init(replacement.length);
+      while (index < replacement.length) {
+        var char = replacement.charCodeAt((tmp$ = index, index = tmp$ + 1 | 0, tmp$));
+        if (char === 92) {
+          if (index === replacement.length)
+            throw IllegalArgumentException_init_0('The Char to be escaped is missing');
+          result.append_s8itvh$(replacement.charCodeAt((tmp$_0 = index, index = tmp$_0 + 1 | 0, tmp$_0)));
+        } else if (char === 36) {
+          if (index === replacement.length)
+            throw IllegalArgumentException_init_0('Capturing group index is missing');
+          if (replacement.charCodeAt(index) === 123)
+            throw IllegalArgumentException_init_0('Named capturing group reference currently is not supported');
+          if (!(new CharRange(48, 57)).contains_mef7kx$(replacement.charCodeAt(index)))
+            throw IllegalArgumentException_init_0('Invalid capturing group reference');
+          var endIndex = readGroupIndex(replacement, index, match.groupValues.size);
+          var groupIndex = toInt(replacement.substring(index, endIndex));
+          if (groupIndex >= match.groupValues.size)
+            throw new IndexOutOfBoundsException('Group with index ' + groupIndex + ' does not exist');
+          result.append_pdl1vj$(match.groupValues.get_za3lpa$(groupIndex));
+          index = endIndex;
+        } else {
+          result.append_s8itvh$(char);
+        }
+      }
+      return result.toString();
+    }
+    function readGroupIndex($receiver, startIndex, groupCount) {
+      var index = startIndex + 1 | 0;
+      var groupIndex = $receiver.charCodeAt(startIndex) - 48;
+      while (index < $receiver.length && (new CharRange(48, 57)).contains_mef7kx$($receiver.charCodeAt(index))) {
+        var newGroupIndex = (groupIndex * 10 | 0) + ($receiver.charCodeAt(index) - 48) | 0;
+        if (0 <= newGroupIndex && newGroupIndex < groupCount) {
+          groupIndex = newGroupIndex;
+          index = index + 1 | 0;
+        } else {
+          break;
+        }
+      }
+      return index;
     }
     function String_1(chars) {
       var tmp$;
@@ -99537,23 +99718,20 @@
         var min = JsMath.min(n1, n2);
         if (min === 0)
           return n1 - n2 | 0;
-        var start = 0;
-        while (true) {
-          var end = JsMath.min(start + 16 | 0, min);
-          var s1 = $receiver.substring(start, end);
-          var s2 = other.substring(start, end);
-          if (!equals(s1, s2)) {
-            s1 = s1.toUpperCase();
-            s2 = s2.toUpperCase();
-            if (!equals(s1, s2)) {
-              s1 = s1.toLowerCase();
-              s2 = s2.toLowerCase();
-              if (!equals(s1, s2)) {
-                return Kotlin.compareTo(s1, s2);
-              }}}if (end === min)
-            break;
-          start = end;
-        }
+        for (var index = 0; index < min; index++) {
+          var thisChar = $receiver.charCodeAt(index);
+          var otherChar = other.charCodeAt(index);
+          if (thisChar !== otherChar) {
+            thisChar = uppercaseChar(thisChar);
+            otherChar = uppercaseChar(otherChar);
+            if (thisChar !== otherChar) {
+              var $receiver_0 = thisChar;
+              thisChar = String.fromCharCode($receiver_0).toLowerCase().charCodeAt(0);
+              var $receiver_1 = otherChar;
+              otherChar = String.fromCharCode($receiver_1).toLowerCase().charCodeAt(0);
+              if (thisChar !== otherChar) {
+                return Kotlin.compareTo(thisChar, otherChar);
+              }}}}
         return n1 - n2 | 0;
       } else {
         return Kotlin.compareTo($receiver, other);
@@ -99607,25 +99785,48 @@
       return result != null && result.length !== 0;
     }
     function isBlank($receiver) {
-      return $receiver.length === 0 || matches(typeof $receiver === 'string' ? $receiver : $receiver.toString(), '^[\\s\\xA0]+$');
+      var tmp$ = $receiver.length === 0;
+      if (!tmp$) {
+        var $receiver_0 = get_indices_13($receiver);
+        var all$result;
+        all$break: do {
+          var tmp$_0;
+          if (Kotlin.isType($receiver_0, Collection) && $receiver_0.isEmpty()) {
+            all$result = true;
+            break all$break;
+          }tmp$_0 = $receiver_0.iterator();
+          while (tmp$_0.hasNext()) {
+            var element = tmp$_0.next();
+            if (!isWhitespace($receiver.charCodeAt(element))) {
+              all$result = false;
+              break all$break;
+            }}
+          all$result = true;
+        }
+         while (false);
+        tmp$ = all$result;
+      }return tmp$;
     }
     function equals_0($receiver, other, ignoreCase) {
       if (ignoreCase === void 0)
         ignoreCase = false;
+      var tmp$;
       if ($receiver == null)
         return other == null;
-      else if (!ignoreCase)
-        return equals($receiver, other);
-      else if (other == null)
+      if (other == null)
         return false;
-      else {
-        var thisLower = $receiver.toLowerCase();
-        var otherLower = other.toLowerCase();
-        var tmp$ = equals(thisLower, otherLower);
-        if (!tmp$) {
-          tmp$ = equals(thisLower.toUpperCase(), otherLower.toUpperCase());
-        }return tmp$;
-      }
+      if (!ignoreCase)
+        return equals($receiver, other);
+      if ($receiver.length !== other.length)
+        return false;
+      tmp$ = $receiver.length;
+      for (var index = 0; index < tmp$; index++) {
+        var thisChar = $receiver.charCodeAt(index);
+        var otherChar = other.charCodeAt(index);
+        if (!equals_1(thisChar, otherChar, ignoreCase)) {
+          return false;
+        }}
+      return true;
     }
     function regionMatches($receiver, thisOffset, other, otherOffset, length, ignoreCase) {
       if (ignoreCase === void 0)
@@ -99670,7 +99871,7 @@
     function replace($receiver, oldValue, newValue, ignoreCase) {
       if (ignoreCase === void 0)
         ignoreCase = false;
-      return $receiver.replace(new RegExp(Regex$Companion_getInstance().escape_61zpoe$(oldValue), ignoreCase ? 'gui' : 'gu'), Regex$Companion_getInstance().escapeReplacement_61zpoe$(newValue));
+      return $receiver.replace(new RegExp(Regex$Companion_getInstance().escape_61zpoe$(oldValue), ignoreCase ? 'gui' : 'gu'), Regex$Companion_getInstance().nativeEscapeReplacement_y4putb$(newValue));
     }
     function replace_0($receiver, oldChar, newChar, ignoreCase) {
       if (ignoreCase === void 0)
@@ -99680,7 +99881,7 @@
     function replaceFirst($receiver, oldValue, newValue, ignoreCase) {
       if (ignoreCase === void 0)
         ignoreCase = false;
-      return $receiver.replace(new RegExp(Regex$Companion_getInstance().escape_61zpoe$(oldValue), ignoreCase ? 'ui' : 'u'), Regex$Companion_getInstance().escapeReplacement_61zpoe$(newValue));
+      return $receiver.replace(new RegExp(Regex$Companion_getInstance().escape_61zpoe$(oldValue), ignoreCase ? 'ui' : 'u'), Regex$Companion_getInstance().nativeEscapeReplacement_y4putb$(newValue));
     }
     function replaceFirst_0($receiver, oldChar, newChar, ignoreCase) {
       if (ignoreCase === void 0)
@@ -99978,6 +100179,30 @@
       return dropLast_10(stack, preLastBreak) + ('... and ' + (commonFrames - 1 | 0) + ' more common stack frames skipped');
     };
     ExceptionTraceBuilder.$metadata$ = {kind: Kind_CLASS, simpleName: 'ExceptionTraceBuilder', interfaces: []};
+    var get_durationAssertionsEnabled = defineInlineFunction('kotlin.kotlin.time.get_durationAssertionsEnabled_8be2vx$', function () {
+      return true;
+    });
+    function formatToExactDecimals(value, decimals) {
+      var tmp$, tmp$_0;
+      if (decimals === 0) {
+        tmp$ = value;
+      } else {
+        var pow = JsMath.pow(10.0, decimals);
+        tmp$ = Math.round(JsMath.abs(value) * pow) / pow * JsMath.sign(value);
+      }
+      var rounded = tmp$;
+      if (JsMath.abs(rounded) < 1.0E21) {
+        tmp$_0 = rounded.toFixed(decimals);
+      } else {
+        var positive = JsMath.abs(rounded);
+        var positiveString = positive.toPrecision(JsMath.ceil(JsMath.log10(positive)) + decimals);
+        tmp$_0 = rounded < 0 ? '-' + positiveString : positiveString;
+      }
+      return tmp$_0;
+    }
+    function formatUpToDecimals(value, decimals) {
+      return value.toLocaleString('en-us', json([to('maximumFractionDigits', decimals)]));
+    }
     function DurationUnit(name, ordinal, scale) {
       Enum.call(this);
       this.scale_8be2vx$ = scale;
@@ -100123,7 +100348,7 @@
       var f = this.this$HrTimeSource.process.hrtime(this.startedAt);
       var seconds = f[0];
       var nanos = f[1];
-      return Duration$Companion_getInstance().seconds_14dthe$(seconds).plus_cgako$(Duration$Companion_getInstance().nanoseconds_14dthe$(nanos));
+      return toDuration_1(seconds, DurationUnit$SECONDS_getInstance()).plus_cgako$(toDuration_1(nanos, DurationUnit$NANOSECONDS_getInstance()));
     };
     HrTimeSource$markNow$ObjectLiteral.$metadata$ = {kind: Kind_CLASS, interfaces: [TimeMark]};
     HrTimeSource.prototype.markNow = function () {
@@ -100161,23 +100386,6 @@
         new DateNowTimeSource();
       }return DateNowTimeSource_instance;
     }
-    function formatToExactDecimals(value, decimals) {
-      var tmp$;
-      if (decimals === 0) {
-        tmp$ = value;
-      } else {
-        var pow = JsMath.pow(10.0, decimals);
-        tmp$ = Math.round(JsMath.abs(value) * pow) / pow * JsMath.sign(value);
-      }
-      var rounded = tmp$;
-      return rounded.toFixed(decimals);
-    }
-    function formatUpToDecimals(value, decimals) {
-      return value.toLocaleString('en-us', json([to('maximumFractionDigits', decimals)]));
-    }
-    function formatScientific(value) {
-      return value.toExponential(2);
-    }
     function createElement_0($receiver, name, init) {
       var $receiver_0 = $receiver.createElement(name);
       init($receiver_0);
@@ -103015,14 +103223,10 @@
       return 'text';
     });
     var Char_0 = defineInlineFunction('kotlin.kotlin.Char_za3lpa$', wrapFunction(function () {
-      var kotlin_js_internal_CharCompanionObject = Kotlin.kotlin.js.internal.CharCompanionObject;
       var IllegalArgumentException_init = _.kotlin.IllegalArgumentException_init_pdl1vj$;
       var toChar = Kotlin.toChar;
       return function (code) {
-        var tmp$ = code < (kotlin_js_internal_CharCompanionObject.MIN_VALUE | 0);
-        if (!tmp$) {
-          tmp$ = code > (kotlin_js_internal_CharCompanionObject.MAX_VALUE | 0);
-        }if (tmp$) {
+        if (code < 0 || code > 65535) {
           throw IllegalArgumentException_init('Invalid Char code: ' + code);
         }return toChar(code);
       };
@@ -104437,6 +104641,34 @@
       result.append_s8itvh$(93);
       processed.removeAt_za3lpa$(get_lastIndex_12(processed));
     }
+    function safeToConvertToSet($receiver) {
+      return brittleContainsOptimizationEnabled() && $receiver.size > 2 && Kotlin.isType($receiver, ArrayList);
+    }
+    function convertToSetForSetOperationWith($receiver, source) {
+      if (Kotlin.isType($receiver, Set))
+        return $receiver;
+      else if (Kotlin.isType($receiver, Collection))
+        if (Kotlin.isType(source, Collection) && source.size < 2)
+          return $receiver;
+        else
+          return safeToConvertToSet($receiver) ? toHashSet_8($receiver) : $receiver;
+      else
+        return brittleContainsOptimizationEnabled() ? toHashSet_8($receiver) : toList_8($receiver);
+    }
+    function convertToSetForSetOperation($receiver) {
+      if (Kotlin.isType($receiver, Set))
+        return $receiver;
+      else if (Kotlin.isType($receiver, Collection))
+        return safeToConvertToSet($receiver) ? toHashSet_8($receiver) : $receiver;
+      else
+        return brittleContainsOptimizationEnabled() ? toHashSet_8($receiver) : toList_8($receiver);
+    }
+    function convertToSetForSetOperation_0($receiver) {
+      return brittleContainsOptimizationEnabled() ? toHashSet_9($receiver) : toList_10($receiver);
+    }
+    function convertToSetForSetOperation_1($receiver) {
+      return brittleContainsOptimizationEnabled() ? toHashSet($receiver) : asList($receiver);
+    }
     function EmptyIterator() {
       EmptyIterator_instance = this;
     }
@@ -104987,28 +105219,6 @@
     function collectionSizeOrDefault($receiver, default_0) {
       return Kotlin.isType($receiver, Collection) ? $receiver.size : default_0;
     }
-    function safeToConvertToSet($receiver) {
-      return $receiver.size > 2 && Kotlin.isType($receiver, ArrayList);
-    }
-    function convertToSetForSetOperationWith($receiver, source) {
-      if (Kotlin.isType($receiver, Set))
-        return $receiver;
-      else if (Kotlin.isType($receiver, Collection))
-        if (Kotlin.isType(source, Collection) && source.size < 2)
-          return $receiver;
-        else
-          return safeToConvertToSet($receiver) ? toHashSet_8($receiver) : $receiver;
-      else
-        return toHashSet_8($receiver);
-    }
-    function convertToSetForSetOperation($receiver) {
-      if (Kotlin.isType($receiver, Set))
-        return $receiver;
-      else if (Kotlin.isType($receiver, Collection))
-        return safeToConvertToSet($receiver) ? toHashSet_8($receiver) : $receiver;
-      else
-        return toHashSet_8($receiver);
-    }
     function flatten_0($receiver) {
       var tmp$;
       var result = ArrayList_init();
@@ -105858,11 +106068,11 @@
       return (Kotlin.isType(tmp$ = $receiver, MutableCollection) ? tmp$ : throwCCE()).removeAll_brywnq$(elements_0);
     }
     function removeAll_1($receiver, elements) {
-      var set = toHashSet_9(elements);
+      var set = convertToSetForSetOperation_0(elements);
       return !set.isEmpty() && $receiver.removeAll_brywnq$(set);
     }
     function removeAll_2($receiver, elements) {
-      return !(elements.length === 0) && $receiver.removeAll_brywnq$(toHashSet(elements));
+      return !(elements.length === 0) && $receiver.removeAll_brywnq$(convertToSetForSetOperation_1(elements));
     }
     function retainAll_0($receiver, elements) {
       var elements_0 = convertToSetForSetOperationWith(elements, $receiver);
@@ -105871,12 +106081,12 @@
     }
     function retainAll_1($receiver, elements) {
       if (!(elements.length === 0))
-        return $receiver.retainAll_brywnq$(toHashSet(elements));
+        return $receiver.retainAll_brywnq$(convertToSetForSetOperation_1(elements));
       else
         return retainNothing($receiver);
     }
     function retainAll_2($receiver, elements) {
-      var set = toHashSet_9(elements);
+      var set = convertToSetForSetOperation_0(elements);
       if (!set.isEmpty())
         return $receiver.retainAll_brywnq$(set);
       else
@@ -107845,6 +108055,9 @@
         new ReverseOrderComparator();
       }return ReverseOrderComparator_instance;
     }
+    var compareTo_0 = defineInlineFunction('kotlin.kotlin.compareTo_fir3sf$', function ($receiver, other) {
+      return Kotlin.compareTo($receiver, other);
+    });
     function ExperimentalContracts() {
     }
     ExperimentalContracts.$metadata$ = {kind: Kind_CLASS, simpleName: 'ExperimentalContracts', interfaces: [Annotation]};
@@ -108613,7 +108826,7 @@
             tmp$ = Kotlin.Long.fromInt(this.nextInt()).and(L4294967295);
           else {
             var bitCount_0 = fastLog2(nHigh);
-            tmp$ = Kotlin.Long.fromInt(this.nextBits_za3lpa$(bitCount_0)).shiftLeft(32).add(Kotlin.Long.fromInt(this.nextInt()));
+            tmp$ = Kotlin.Long.fromInt(this.nextBits_za3lpa$(bitCount_0)).shiftLeft(32).add(Kotlin.Long.fromInt(this.nextInt()).and(L4294967295));
           }
           rnd = tmp$;
         } else {
@@ -110340,35 +110553,9 @@
     var replace_1 = defineInlineFunction('kotlin.kotlin.text.replace_tb98gq$', function ($receiver, regex, replacement) {
       return regex.replace_x2uqeu$($receiver, replacement);
     });
-    var replace_2 = defineInlineFunction('kotlin.kotlin.text.replace_3avfay$', wrapFunction(function () {
-      var StringBuilder_init = _.kotlin.text.StringBuilder_init_za3lpa$;
-      var ensureNotNull = Kotlin.ensureNotNull;
-      return function ($receiver, regex, transform) {
-        var replace_20wsma$result;
-        replace_20wsma$break: do {
-          var match = regex.find_905azu$($receiver);
-          if (match == null) {
-            replace_20wsma$result = $receiver.toString();
-            break replace_20wsma$break;
-          }var lastStart = 0;
-          var length = $receiver.length;
-          var sb = StringBuilder_init(length);
-          do {
-            var foundMatch = ensureNotNull(match);
-            sb.append_ezbsdh$($receiver, lastStart, foundMatch.range.start);
-            sb.append_gw00v9$(transform(foundMatch));
-            lastStart = foundMatch.range.endInclusive + 1 | 0;
-            match = foundMatch.next();
-          }
-           while (lastStart < length && match != null);
-          if (lastStart < length) {
-            sb.append_ezbsdh$($receiver, lastStart, length);
-          }replace_20wsma$result = sb.toString();
-        }
-         while (false);
-        return replace_20wsma$result;
-      };
-    }));
+    var replace_2 = defineInlineFunction('kotlin.kotlin.text.replace_3avfay$', function ($receiver, regex, transform) {
+      return regex.replace_20wsma$($receiver, transform);
+    });
     var replaceFirst_1 = defineInlineFunction('kotlin.kotlin.text.replaceFirst_tb98gq$', function ($receiver, regex, replacement) {
       return regex.replaceFirst_x2uqeu$($receiver, replacement);
     });
@@ -110737,10 +110924,8 @@
         ignoreCase = false;
       if (limit === void 0)
         limit = 0;
-      if (!(limit >= 0)) {
-        var message = 'Limit must be non-negative, but was ' + limit + '.';
-        throw IllegalArgumentException_init_0(message.toString());
-      }return new DelimitedRangesSequence($receiver, startIndex, limit, rangesDelimitedBy$lambda(delimiters, ignoreCase));
+      requireNonNegativeLimit(limit);
+      return new DelimitedRangesSequence($receiver, startIndex, limit, rangesDelimitedBy$lambda(delimiters, ignoreCase));
     }
     function rangesDelimitedBy$lambda_0(closure$delimitersList, closure$ignoreCase) {
       return function ($receiver, currentIndex) {
@@ -110755,12 +110940,15 @@
         ignoreCase = false;
       if (limit === void 0)
         limit = 0;
-      if (!(limit >= 0)) {
-        var message = 'Limit must be non-negative, but was ' + limit + '.';
-        throw IllegalArgumentException_init_0(message.toString());
-      }var delimitersList = asList(delimiters);
+      requireNonNegativeLimit(limit);
+      var delimitersList = asList(delimiters);
       return new DelimitedRangesSequence($receiver, startIndex, limit, rangesDelimitedBy$lambda_0(delimitersList, ignoreCase));
     }
+    function requireNonNegativeLimit(limit) {
+      if (!(limit >= 0)) {
+        var message = 'Limit must be non-negative, but was ' + limit;
+        throw IllegalArgumentException_init_0(message.toString());
+      }}
     function splitToSequence$lambda(this$splitToSequence) {
       return function (it) {
         return substring_3(this$splitToSequence, it);
@@ -110822,10 +111010,8 @@
       return destination;
     }
     function split_1($receiver, delimiter, ignoreCase, limit) {
-      if (!(limit >= 0)) {
-        var message = 'Limit must be non-negative, but was ' + limit + '.';
-        throw IllegalArgumentException_init_0(message.toString());
-      }var currentOffset = 0;
+      requireNonNegativeLimit(limit);
+      var currentOffset = 0;
       var nextIndex = indexOf_17($receiver, delimiter, currentOffset, ignoreCase);
       if (nextIndex === -1 || limit === 1) {
         return listOf($receiver.toString());
@@ -110847,6 +111033,11 @@
         limit = 0;
       return regex.split_905azu$($receiver, limit);
     });
+    var splitToSequence_1 = defineInlineFunction('kotlin.kotlin.text.splitToSequence_yymnie$', function ($receiver, regex, limit) {
+      if (limit === void 0)
+        limit = 0;
+      return regex.splitToSequence_905azu$($receiver, limit);
+    });
     function lineSequence($receiver) {
       return splitToSequence($receiver, ['\r\n', '\n', '\r']);
     }
@@ -110914,8 +111105,8 @@
       this.pound = toBoxedChar(163);
       this.section = toBoxedChar(167);
       this.copyright = toBoxedChar(169);
-      this.leftGuillemete = toBoxedChar(171);
-      this.rightGuillemete = toBoxedChar(187);
+      this.leftGuillemet = toBoxedChar(171);
+      this.rightGuillemet = toBoxedChar(187);
       this.registered = toBoxedChar(174);
       this.degree = toBoxedChar(176);
       this.plusMinus = toBoxedChar(177);
@@ -110942,6 +111133,8 @@
       this.notEqual = toBoxedChar(8800);
       this.lessOrEqual = toBoxedChar(8804);
       this.greaterOrEqual = toBoxedChar(8805);
+      this.leftGuillemete = toBoxedChar(171);
+      this.rightGuillemete = toBoxedChar(187);
     }
     Typography.$metadata$ = {kind: Kind_OBJECT, simpleName: 'Typography', interfaces: []};
     var Typography_instance = null;
@@ -111021,19 +111214,20 @@
       Duration$Companion_getInstance();
       this.rawValue_0 = rawValue;
       var tmp$, tmp$_0, tmp$_1;
-      if (this.isInNanos_0()) {
-        tmp$ = this.value_0;
-        if (!(L_4611686018426999999.lessThanOrEqual(tmp$) && tmp$.lessThanOrEqual(MAX_NANOS)))
-          throw AssertionError_init_0(this.value_0.toString() + ' ns is out of nanoseconds range');
-      } else {
-        tmp$_0 = this.value_0;
-        if (!(L_4611686018427387903.lessThanOrEqual(tmp$_0) && tmp$_0.lessThanOrEqual(MAX_MILLIS)))
-          throw AssertionError_init_0(this.value_0.toString() + ' ms is out of milliseconds range');
-        tmp$_1 = this.value_0;
-        if (L_4611686018426.lessThanOrEqual(tmp$_1) && tmp$_1.lessThanOrEqual(MAX_NANOS_IN_MILLIS))
-          throw AssertionError_init_0(this.value_0.toString() + ' ms is denormalized');
-      }
-    }
+      if (true) {
+        if (this.isInNanos_0()) {
+          tmp$ = this.value_0;
+          if (!(L_4611686018426999999.lessThanOrEqual(tmp$) && tmp$.lessThanOrEqual(MAX_NANOS)))
+            throw AssertionError_init_0(this.value_0.toString() + ' ns is out of nanoseconds range');
+        } else {
+          tmp$_0 = this.value_0;
+          if (!(L_4611686018427387903.lessThanOrEqual(tmp$_0) && tmp$_0.lessThanOrEqual(MAX_MILLIS)))
+            throw AssertionError_init_0(this.value_0.toString() + ' ms is out of milliseconds range');
+          tmp$_1 = this.value_0;
+          if (L_4611686018426.lessThanOrEqual(tmp$_1) && tmp$_1.lessThanOrEqual(MAX_NANOS_IN_MILLIS))
+            throw AssertionError_init_0(this.value_0.toString() + ' ms is denormalized');
+        }
+      }}
     Object.defineProperty(Duration.prototype, 'value_0', {configurable: true, get: function () {
       return this.rawValue_0.shiftRight(1);
     }});
@@ -111058,6 +111252,153 @@
     Duration$Companion.prototype.convert_d8pp1e$ = function (value, sourceUnit, targetUnit) {
       return convertDurationUnit(value, sourceUnit, targetUnit);
     };
+    Duration$Companion.prototype.get_nanoseconds_s8ev3n$ = defineInlineFunction('kotlin.kotlin.time.Duration.Companion.get_nanoseconds_s8ev3n$', wrapFunction(function () {
+      var DurationUnit = _.kotlin.time.DurationUnit;
+      var toDuration = _.kotlin.time.toDuration_14orw9$;
+      return function ($receiver) {
+        return toDuration($receiver, DurationUnit.NANOSECONDS);
+      };
+    }));
+    Duration$Companion.prototype.get_nanoseconds_mts6qi$ = defineInlineFunction('kotlin.kotlin.time.Duration.Companion.get_nanoseconds_mts6qi$', wrapFunction(function () {
+      var DurationUnit = _.kotlin.time.DurationUnit;
+      var toDuration = _.kotlin.time.toDuration_rrkdm6$;
+      return function ($receiver) {
+        return toDuration($receiver, DurationUnit.NANOSECONDS);
+      };
+    }));
+    Duration$Companion.prototype.get_nanoseconds_yrwdxr$ = defineInlineFunction('kotlin.kotlin.time.Duration.Companion.get_nanoseconds_yrwdxr$', wrapFunction(function () {
+      var DurationUnit = _.kotlin.time.DurationUnit;
+      var toDuration = _.kotlin.time.toDuration_n769wd$;
+      return function ($receiver) {
+        return toDuration($receiver, DurationUnit.NANOSECONDS);
+      };
+    }));
+    Duration$Companion.prototype.get_microseconds_s8ev3n$ = defineInlineFunction('kotlin.kotlin.time.Duration.Companion.get_microseconds_s8ev3n$', wrapFunction(function () {
+      var DurationUnit = _.kotlin.time.DurationUnit;
+      var toDuration = _.kotlin.time.toDuration_14orw9$;
+      return function ($receiver) {
+        return toDuration($receiver, DurationUnit.MICROSECONDS);
+      };
+    }));
+    Duration$Companion.prototype.get_microseconds_mts6qi$ = defineInlineFunction('kotlin.kotlin.time.Duration.Companion.get_microseconds_mts6qi$', wrapFunction(function () {
+      var DurationUnit = _.kotlin.time.DurationUnit;
+      var toDuration = _.kotlin.time.toDuration_rrkdm6$;
+      return function ($receiver) {
+        return toDuration($receiver, DurationUnit.MICROSECONDS);
+      };
+    }));
+    Duration$Companion.prototype.get_microseconds_yrwdxr$ = defineInlineFunction('kotlin.kotlin.time.Duration.Companion.get_microseconds_yrwdxr$', wrapFunction(function () {
+      var DurationUnit = _.kotlin.time.DurationUnit;
+      var toDuration = _.kotlin.time.toDuration_n769wd$;
+      return function ($receiver) {
+        return toDuration($receiver, DurationUnit.MICROSECONDS);
+      };
+    }));
+    Duration$Companion.prototype.get_milliseconds_s8ev3n$ = defineInlineFunction('kotlin.kotlin.time.Duration.Companion.get_milliseconds_s8ev3n$', wrapFunction(function () {
+      var DurationUnit = _.kotlin.time.DurationUnit;
+      var toDuration = _.kotlin.time.toDuration_14orw9$;
+      return function ($receiver) {
+        return toDuration($receiver, DurationUnit.MILLISECONDS);
+      };
+    }));
+    Duration$Companion.prototype.get_milliseconds_mts6qi$ = defineInlineFunction('kotlin.kotlin.time.Duration.Companion.get_milliseconds_mts6qi$', wrapFunction(function () {
+      var DurationUnit = _.kotlin.time.DurationUnit;
+      var toDuration = _.kotlin.time.toDuration_rrkdm6$;
+      return function ($receiver) {
+        return toDuration($receiver, DurationUnit.MILLISECONDS);
+      };
+    }));
+    Duration$Companion.prototype.get_milliseconds_yrwdxr$ = defineInlineFunction('kotlin.kotlin.time.Duration.Companion.get_milliseconds_yrwdxr$', wrapFunction(function () {
+      var DurationUnit = _.kotlin.time.DurationUnit;
+      var toDuration = _.kotlin.time.toDuration_n769wd$;
+      return function ($receiver) {
+        return toDuration($receiver, DurationUnit.MILLISECONDS);
+      };
+    }));
+    Duration$Companion.prototype.get_seconds_s8ev3n$ = defineInlineFunction('kotlin.kotlin.time.Duration.Companion.get_seconds_s8ev3n$', wrapFunction(function () {
+      var DurationUnit = _.kotlin.time.DurationUnit;
+      var toDuration = _.kotlin.time.toDuration_14orw9$;
+      return function ($receiver) {
+        return toDuration($receiver, DurationUnit.SECONDS);
+      };
+    }));
+    Duration$Companion.prototype.get_seconds_mts6qi$ = defineInlineFunction('kotlin.kotlin.time.Duration.Companion.get_seconds_mts6qi$', wrapFunction(function () {
+      var DurationUnit = _.kotlin.time.DurationUnit;
+      var toDuration = _.kotlin.time.toDuration_rrkdm6$;
+      return function ($receiver) {
+        return toDuration($receiver, DurationUnit.SECONDS);
+      };
+    }));
+    Duration$Companion.prototype.get_seconds_yrwdxr$ = defineInlineFunction('kotlin.kotlin.time.Duration.Companion.get_seconds_yrwdxr$', wrapFunction(function () {
+      var DurationUnit = _.kotlin.time.DurationUnit;
+      var toDuration = _.kotlin.time.toDuration_n769wd$;
+      return function ($receiver) {
+        return toDuration($receiver, DurationUnit.SECONDS);
+      };
+    }));
+    Duration$Companion.prototype.get_minutes_s8ev3n$ = defineInlineFunction('kotlin.kotlin.time.Duration.Companion.get_minutes_s8ev3n$', wrapFunction(function () {
+      var DurationUnit = _.kotlin.time.DurationUnit;
+      var toDuration = _.kotlin.time.toDuration_14orw9$;
+      return function ($receiver) {
+        return toDuration($receiver, DurationUnit.MINUTES);
+      };
+    }));
+    Duration$Companion.prototype.get_minutes_mts6qi$ = defineInlineFunction('kotlin.kotlin.time.Duration.Companion.get_minutes_mts6qi$', wrapFunction(function () {
+      var DurationUnit = _.kotlin.time.DurationUnit;
+      var toDuration = _.kotlin.time.toDuration_rrkdm6$;
+      return function ($receiver) {
+        return toDuration($receiver, DurationUnit.MINUTES);
+      };
+    }));
+    Duration$Companion.prototype.get_minutes_yrwdxr$ = defineInlineFunction('kotlin.kotlin.time.Duration.Companion.get_minutes_yrwdxr$', wrapFunction(function () {
+      var DurationUnit = _.kotlin.time.DurationUnit;
+      var toDuration = _.kotlin.time.toDuration_n769wd$;
+      return function ($receiver) {
+        return toDuration($receiver, DurationUnit.MINUTES);
+      };
+    }));
+    Duration$Companion.prototype.get_hours_s8ev3n$ = defineInlineFunction('kotlin.kotlin.time.Duration.Companion.get_hours_s8ev3n$', wrapFunction(function () {
+      var DurationUnit = _.kotlin.time.DurationUnit;
+      var toDuration = _.kotlin.time.toDuration_14orw9$;
+      return function ($receiver) {
+        return toDuration($receiver, DurationUnit.HOURS);
+      };
+    }));
+    Duration$Companion.prototype.get_hours_mts6qi$ = defineInlineFunction('kotlin.kotlin.time.Duration.Companion.get_hours_mts6qi$', wrapFunction(function () {
+      var DurationUnit = _.kotlin.time.DurationUnit;
+      var toDuration = _.kotlin.time.toDuration_rrkdm6$;
+      return function ($receiver) {
+        return toDuration($receiver, DurationUnit.HOURS);
+      };
+    }));
+    Duration$Companion.prototype.get_hours_yrwdxr$ = defineInlineFunction('kotlin.kotlin.time.Duration.Companion.get_hours_yrwdxr$', wrapFunction(function () {
+      var DurationUnit = _.kotlin.time.DurationUnit;
+      var toDuration = _.kotlin.time.toDuration_n769wd$;
+      return function ($receiver) {
+        return toDuration($receiver, DurationUnit.HOURS);
+      };
+    }));
+    Duration$Companion.prototype.get_days_s8ev3n$ = defineInlineFunction('kotlin.kotlin.time.Duration.Companion.get_days_s8ev3n$', wrapFunction(function () {
+      var DurationUnit = _.kotlin.time.DurationUnit;
+      var toDuration = _.kotlin.time.toDuration_14orw9$;
+      return function ($receiver) {
+        return toDuration($receiver, DurationUnit.DAYS);
+      };
+    }));
+    Duration$Companion.prototype.get_days_mts6qi$ = defineInlineFunction('kotlin.kotlin.time.Duration.Companion.get_days_mts6qi$', wrapFunction(function () {
+      var DurationUnit = _.kotlin.time.DurationUnit;
+      var toDuration = _.kotlin.time.toDuration_rrkdm6$;
+      return function ($receiver) {
+        return toDuration($receiver, DurationUnit.DAYS);
+      };
+    }));
+    Duration$Companion.prototype.get_days_yrwdxr$ = defineInlineFunction('kotlin.kotlin.time.Duration.Companion.get_days_yrwdxr$', wrapFunction(function () {
+      var DurationUnit = _.kotlin.time.DurationUnit;
+      var toDuration = _.kotlin.time.toDuration_n769wd$;
+      return function ($receiver) {
+        return toDuration($receiver, DurationUnit.DAYS);
+      };
+    }));
     Duration$Companion.prototype.nanoseconds_za3lpa$ = function (value) {
       return toDuration(value, DurationUnit$NANOSECONDS_getInstance());
     };
@@ -111121,6 +111462,46 @@
     Duration$Companion.prototype.days_14dthe$ = function (value) {
       return toDuration_1(value, DurationUnit$DAYS_getInstance());
     };
+    Duration$Companion.prototype.parse_61zpoe$ = function (value) {
+      try {
+        return parseDuration(value, false);
+      } catch (e) {
+        if (Kotlin.isType(e, IllegalArgumentException)) {
+          throw new IllegalArgumentException("Invalid duration string format: '" + value + "'.", e);
+        } else
+          throw e;
+      }
+    };
+    Duration$Companion.prototype.parseIsoString_61zpoe$ = function (value) {
+      try {
+        return parseDuration(value, true);
+      } catch (e) {
+        if (Kotlin.isType(e, IllegalArgumentException)) {
+          throw new IllegalArgumentException("Invalid ISO duration string format: '" + value + "'.", e);
+        } else
+          throw e;
+      }
+    };
+    Duration$Companion.prototype.parseOrNull_61zpoe$ = function (value) {
+      try {
+        return parseDuration(value, false);
+      } catch (e) {
+        if (Kotlin.isType(e, IllegalArgumentException)) {
+          return null;
+        } else
+          throw e;
+      }
+    };
+    Duration$Companion.prototype.parseIsoStringOrNull_61zpoe$ = function (value) {
+      try {
+        return parseDuration(value, true);
+      } catch (e) {
+        if (Kotlin.isType(e, IllegalArgumentException)) {
+          return null;
+        } else
+          throw e;
+      }
+    };
     Duration$Companion.$metadata$ = {kind: Kind_OBJECT, simpleName: 'Companion', interfaces: []};
     var Duration$Companion_instance = null;
     function Duration$Companion_getInstance() {
@@ -111272,24 +111653,15 @@
       var r = (this.rawValue_0.toInt() & 1) - (other.rawValue_0.toInt() & 1) | 0;
       return this.isNegative() ? -r | 0 : r;
     };
-    Duration.prototype.toComponents_fnu26o$ = defineInlineFunction('kotlin.kotlin.time.Duration.toComponents_fnu26o$', wrapFunction(function () {
-      var DurationUnit = _.kotlin.time.DurationUnit;
-      return function (action) {
-        return action(this.toInt_p6uejw$(DurationUnit.DAYS), this.hoursComponent, this.minutesComponent, this.secondsComponent, this.nanosecondsComponent);
-      };
-    }));
-    Duration.prototype.toComponents_v6nad0$ = defineInlineFunction('kotlin.kotlin.time.Duration.toComponents_v6nad0$', wrapFunction(function () {
-      var DurationUnit = _.kotlin.time.DurationUnit;
-      return function (action) {
-        return action(this.toInt_p6uejw$(DurationUnit.HOURS), this.minutesComponent, this.secondsComponent, this.nanosecondsComponent);
-      };
-    }));
-    Duration.prototype.toComponents_sg9n6w$ = defineInlineFunction('kotlin.kotlin.time.Duration.toComponents_sg9n6w$', wrapFunction(function () {
-      var DurationUnit = _.kotlin.time.DurationUnit;
-      return function (action) {
-        return action(this.toInt_p6uejw$(DurationUnit.MINUTES), this.secondsComponent, this.nanosecondsComponent);
-      };
-    }));
+    Duration.prototype.toComponents_hve5lh$ = defineInlineFunction('kotlin.kotlin.time.Duration.toComponents_hve5lh$', function (action) {
+      return action(this.inWholeDays, this.hoursComponent, this.minutesComponent, this.secondsComponent, this.nanosecondsComponent);
+    });
+    Duration.prototype.toComponents_s6np4d$ = defineInlineFunction('kotlin.kotlin.time.Duration.toComponents_s6np4d$', function (action) {
+      return action(this.inWholeHours, this.minutesComponent, this.secondsComponent, this.nanosecondsComponent);
+    });
+    Duration.prototype.toComponents_vtr74h$ = defineInlineFunction('kotlin.kotlin.time.Duration.toComponents_vtr74h$', function (action) {
+      return action(this.inWholeMinutes, this.secondsComponent, this.nanosecondsComponent);
+    });
     Duration.prototype.toComponents_obfv9r$ = defineInlineFunction('kotlin.kotlin.time.Duration.toComponents_obfv9r$', function (action) {
       return action(this.inWholeSeconds, this.nanosecondsComponent);
     });
@@ -111395,7 +111767,7 @@
       return this.inWholeMilliseconds;
     };
     Duration.prototype.toString = function () {
-      var tmp$, tmp$_0, tmp$_1;
+      var tmp$;
       tmp$ = this.rawValue_0;
       if (equals(tmp$, L0))
         return '0s';
@@ -111404,73 +111776,84 @@
       else if (equals(tmp$, Duration$Companion_getInstance().NEG_INFINITE_8be2vx$.rawValue_0))
         return '-Infinity';
       else {
-        var absNs = this.absoluteValue.toDouble_p6uejw$(DurationUnit$NANOSECONDS_getInstance());
-        var scientific = {v: false};
-        var maxDecimals = {v: 0};
-        if (absNs < 1.0E-6) {
-          var $receiver = DurationUnit$SECONDS_getInstance();
-          scientific.v = true;
-          tmp$_0 = $receiver;
-        } else if (absNs < 1) {
-          var $receiver_0 = DurationUnit$NANOSECONDS_getInstance();
-          maxDecimals.v = 7;
-          tmp$_0 = $receiver_0;
-        } else if (absNs < 1000.0)
-          tmp$_0 = DurationUnit$NANOSECONDS_getInstance();
-        else if (absNs < 1000000.0)
-          tmp$_0 = DurationUnit$MICROSECONDS_getInstance();
-        else if (absNs < 1.0E9)
-          tmp$_0 = DurationUnit$MILLISECONDS_getInstance();
-        else if (absNs < 1.0E12)
-          tmp$_0 = DurationUnit$SECONDS_getInstance();
-        else if (absNs < 6.0E13)
-          tmp$_0 = DurationUnit$MINUTES_getInstance();
-        else if (absNs < 3.6E15)
-          tmp$_0 = DurationUnit$HOURS_getInstance();
-        else if (absNs < 8.64E13 * 1.0E7)
-          tmp$_0 = DurationUnit$DAYS_getInstance();
-        else {
-          var $receiver_1 = DurationUnit$DAYS_getInstance();
-          scientific.v = true;
-          tmp$_0 = $receiver_1;
-        }
-        var unit = tmp$_0;
-        var value = this.toDouble_p6uejw$(unit);
-        if (scientific.v)
-          tmp$_1 = formatScientific(value);
-        else if (maxDecimals.v > 0)
-          tmp$_1 = formatUpToDecimals(value, maxDecimals.v);
-        else {
-          tmp$_1 = formatToExactDecimals(value, this.precision_0(JsMath.abs(value)));
-        }
-        return tmp$_1 + shortName(unit);
+        var isNegative = this.isNegative();
+        var $receiver = StringBuilder_init_1();
+        if (isNegative)
+          $receiver.append_s8itvh$(45);
+        var $this = this.absoluteValue;
+        var days = $this.inWholeDays;
+        var hours = $this.hoursComponent;
+        var minutes = $this.minutesComponent;
+        var seconds = $this.secondsComponent;
+        var nanoseconds = $this.nanosecondsComponent;
+        var tmp$_0, tmp$_1, tmp$_2;
+        var hasDays = !equals(days, L0);
+        var hasHours = hours !== 0;
+        var hasMinutes = minutes !== 0;
+        var hasSeconds = seconds !== 0 || nanoseconds !== 0;
+        var components = 0;
+        if (hasDays) {
+          $receiver.append_s8jyv4$(days).append_s8itvh$(100);
+          components = components + 1 | 0;
+        }if (hasHours || (hasDays && (hasMinutes || hasSeconds))) {
+          if ((tmp$_0 = components, components = tmp$_0 + 1 | 0, tmp$_0) > 0)
+            $receiver.append_s8itvh$(32);
+          $receiver.append_s8jyv4$(hours).append_s8itvh$(104);
+        }if (hasMinutes || (hasSeconds && (hasHours || hasDays))) {
+          if ((tmp$_1 = components, components = tmp$_1 + 1 | 0, tmp$_1) > 0)
+            $receiver.append_s8itvh$(32);
+          $receiver.append_s8jyv4$(minutes).append_s8itvh$(109);
+        }if (hasSeconds) {
+          if ((tmp$_2 = components, components = tmp$_2 + 1 | 0, tmp$_2) > 0)
+            $receiver.append_s8itvh$(32);
+          if (seconds !== 0 || hasDays || hasHours || hasMinutes)
+            this.appendFractional_0($receiver, seconds, nanoseconds, 9, 's', false);
+          else if (nanoseconds >= 1000000)
+            this.appendFractional_0($receiver, nanoseconds / 1000000 | 0, nanoseconds % 1000000, 6, 'ms', false);
+          else if (nanoseconds >= 1000)
+            this.appendFractional_0($receiver, nanoseconds / 1000 | 0, nanoseconds % 1000, 3, 'us', false);
+          else
+            $receiver.append_s8jyv4$(nanoseconds).append_pdl1vj$('ns');
+        }if (isNegative && components > 1)
+          $receiver.insert_6t1mh3$(1, 40).append_s8itvh$(41);
+        return $receiver.toString();
       }
     };
-    Duration.prototype.precision_0 = function (value) {
-      if (value < 1)
-        return 3;
-      else if (value < 10)
-        return 2;
-      else if (value < 100)
-        return 1;
-      else
-        return 0;
+    Duration.prototype.appendFractional_0 = function ($receiver, whole, fractional, fractionalSize, unit, isoZeroes) {
+      $receiver.append_s8jyv4$(whole);
+      if (fractional !== 0) {
+        $receiver.append_s8itvh$(46);
+        var fracString = padStart_0(fractional.toString(), fractionalSize, 48);
+        var indexOfLast$result;
+        indexOfLast$break: do {
+          var tmp$;
+          tmp$ = reversed_9(get_indices_13(fracString)).iterator();
+          while (tmp$.hasNext()) {
+            var index = tmp$.next();
+            if (unboxChar(toBoxedChar(fracString.charCodeAt(index))) !== 48) {
+              indexOfLast$result = index;
+              break indexOfLast$break;
+            }}
+          indexOfLast$result = -1;
+        }
+         while (false);
+        var nonZeroDigits = indexOfLast$result + 1 | 0;
+        if (!isoZeroes && nonZeroDigits < 3)
+          $receiver.appendRange_3peag4$(fracString, 0, nonZeroDigits);
+        else
+          $receiver.appendRange_3peag4$(fracString, 0, ((nonZeroDigits + 2 | 0) / 3 | 0) * 3 | 0);
+      }$receiver.append_pdl1vj$(unit);
     };
     Duration.prototype.toString_mha1pa$ = function (unit, decimals) {
       if (decimals === void 0)
         decimals = 0;
-      var tmp$;
       if (!(decimals >= 0)) {
         var message = 'decimals must be not negative, but was ' + decimals;
         throw IllegalArgumentException_init_0(message.toString());
       }var number = this.toDouble_p6uejw$(unit);
       if (isInfinite(number))
         return number.toString();
-      if (JsMath.abs(number) < 1.0E14)
-        tmp$ = formatToExactDecimals(number, coerceAtMost_2(decimals, 12));
-      else
-        tmp$ = formatScientific(number);
-      return tmp$ + shortName(unit);
+      return formatToExactDecimals(number, coerceAtMost_2(decimals, 12)) + shortName(unit);
     };
     Duration.prototype.toIsoString = function () {
       var $receiver = StringBuilder_init_1();
@@ -111478,29 +111861,22 @@
         $receiver.append_s8itvh$(45);
       $receiver.append_pdl1vj$('PT');
       var $this = this.absoluteValue;
-      var hours = $this.toInt_p6uejw$(DurationUnit.HOURS);
+      var hours = $this.inWholeHours;
       var minutes = $this.minutesComponent;
       var seconds = $this.secondsComponent;
       var nanoseconds = $this.nanosecondsComponent;
-      var hasHours = hours !== 0;
+      var hours_0 = hours;
+      if (this.isInfinite()) {
+        hours_0 = L9999999999999;
+      }var hasHours = !equals(hours_0, L0);
       var hasSeconds = seconds !== 0 || nanoseconds !== 0;
       var hasMinutes = minutes !== 0 || (hasSeconds && hasHours);
       if (hasHours) {
-        $receiver.append_s8jyv4$(hours).append_s8itvh$(72);
+        $receiver.append_s8jyv4$(hours_0).append_s8itvh$(72);
       }if (hasMinutes) {
         $receiver.append_s8jyv4$(minutes).append_s8itvh$(77);
       }if (hasSeconds || (!hasHours && !hasMinutes)) {
-        $receiver.append_s8jyv4$(seconds);
-        if (nanoseconds !== 0) {
-          $receiver.append_s8itvh$(46);
-          var nss = padStart_0(nanoseconds.toString(), 9, 48);
-          if (nanoseconds % 1000000 === 0)
-            $receiver.appendRange_3peag4$(nss, 0, 3);
-          else if (nanoseconds % 1000 === 0)
-            $receiver.appendRange_3peag4$(nss, 0, 6);
-          else
-            $receiver.append_pdl1vj$(nss);
-        }$receiver.append_s8itvh$(83);
+        this.appendFractional_0($receiver, seconds, nanoseconds, 9, 'S', true);
       }return $receiver.toString();
     };
     Duration.$metadata$ = {kind: Kind_CLASS, simpleName: 'Duration', interfaces: [Comparable]};
@@ -111538,11 +111914,11 @@
       if (!!isNaN_0(valueInNs)) {
         var message = 'Duration value cannot be NaN.';
         throw IllegalArgumentException_init_0(message.toString());
-      }var nanos = Kotlin.Long.fromNumber(valueInNs);
+      }var nanos = roundToLong(valueInNs);
       if (L_4611686018426999999.lessThanOrEqual(nanos) && nanos.lessThanOrEqual(MAX_NANOS)) {
         tmp$ = durationOfNanos(nanos);
       } else {
-        var millis = Kotlin.Long.fromNumber(convertDurationUnit($receiver, unit, DurationUnit$MILLISECONDS_getInstance()));
+        var millis = roundToLong(convertDurationUnit($receiver, unit, DurationUnit$MILLISECONDS_getInstance()));
         tmp$ = durationOfMillisNormalized(millis);
       }
       return tmp$;
@@ -111616,6 +111992,188 @@
     var times_0 = defineInlineFunction('kotlin.kotlin.time.times_w68h3b$', function ($receiver, duration) {
       return duration.times_14dthe$($receiver);
     });
+    function parseDuration(value, strictIso) {
+      var length = value.length;
+      if (length === 0)
+        throw IllegalArgumentException_init_0('The string is empty');
+      var index = 0;
+      var result = Duration$Companion_getInstance().ZERO;
+      var infinityString = 'Infinity';
+      switch (value.charCodeAt(index)) {
+        case 43:
+        case 45:
+          index = index + 1 | 0;
+          break;
+      }
+      var hasSign = index > 0;
+      var isNegative = hasSign && startsWith_1(value, 45);
+      if (length <= index)
+        throw IllegalArgumentException_init_0('No components');
+      else if (value.charCodeAt(index) === 80) {
+        if ((index = index + 1 | 0, index) === length)
+          throw IllegalArgumentException_init();
+        var nonDigitSymbols = '+-.';
+        var isTimeComponent = false;
+        var prevUnit = null;
+        while (index < length) {
+          if (value.charCodeAt(index) === 84) {
+            if (isTimeComponent || (index = index + 1 | 0, index) === length)
+              throw IllegalArgumentException_init();
+            isTimeComponent = true;
+            continue;
+          }var startIndex = index;
+          var i = startIndex;
+          while (true) {
+            var tmp$ = i < value.length;
+            if (tmp$) {
+              var it = toBoxedChar(value.charCodeAt(i));
+              tmp$ = (new CharRange(48, 57)).contains_mef7kx$(unboxChar(it)) || contains_54(nonDigitSymbols, unboxChar(it));
+            }if (!tmp$)
+              break;
+            i = i + 1 | 0;
+          }
+          var component = value.substring(startIndex, i);
+          if (component.length === 0)
+            throw IllegalArgumentException_init();
+          index = index + component.length | 0;
+          var index_0 = index;
+          var tmp$_0;
+          if (index_0 >= 0 && index_0 <= get_lastIndex_13(value))
+            tmp$_0 = value.charCodeAt(index_0);
+          else {
+            throw IllegalArgumentException_init_0('Missing unit for value ' + component);
+          }
+          var unitChar = tmp$_0;
+          index = index + 1 | 0;
+          var unit = durationUnitByIsoChar(unitChar, isTimeComponent);
+          if (prevUnit != null && prevUnit.compareTo_11rb$(unit) <= 0)
+            throw IllegalArgumentException_init_0('Unexpected order of duration components');
+          prevUnit = unit;
+          var dotIndex = indexOf_16(component, 46);
+          if (unit === DurationUnit$SECONDS_getInstance() && dotIndex > 0) {
+            var whole = component.substring(0, dotIndex);
+            result = result.plus_cgako$(toDuration_0(parseOverLongIsoComponent(whole), unit));
+            result = result.plus_cgako$(toDuration_1(toDouble(component.substring(dotIndex)), unit));
+          } else {
+            result = result.plus_cgako$(toDuration_0(parseOverLongIsoComponent(component), unit));
+          }
+        }
+      } else if (strictIso)
+        throw IllegalArgumentException_init();
+      else {
+        if (regionMatches(value, index, infinityString, 0, JsMath.max(length - index | 0, infinityString.length), true))
+          result = Duration$Companion_getInstance().INFINITE;
+        else {
+          var prevUnit_0 = null;
+          var afterFirst = false;
+          var allowSpaces = !hasSign;
+          if (hasSign && value.charCodeAt(index) === 40 && last_23(value) === 41) {
+            allowSpaces = true;
+            if ((index = index + 1 | 0, index) === (length = length - 1 | 0, length))
+              throw IllegalArgumentException_init_0('No components');
+          }while (index < length) {
+            if (afterFirst && allowSpaces) {
+              var i_0 = index;
+              while (true) {
+                var tmp$_1 = i_0 < value.length;
+                if (tmp$_1) {
+                  tmp$_1 = unboxChar(toBoxedChar(value.charCodeAt(i_0))) === 32;
+                }if (!tmp$_1)
+                  break;
+                i_0 = i_0 + 1 | 0;
+              }
+              index = i_0;
+            }afterFirst = true;
+            var startIndex_0 = index;
+            var i_1 = startIndex_0;
+            while (true) {
+              var tmp$_2 = i_1 < value.length;
+              if (tmp$_2) {
+                var it_0 = toBoxedChar(value.charCodeAt(i_1));
+                tmp$_2 = (new CharRange(48, 57)).contains_mef7kx$(unboxChar(it_0)) || unboxChar(it_0) === 46;
+              }if (!tmp$_2)
+                break;
+              i_1 = i_1 + 1 | 0;
+            }
+            var component_0 = value.substring(startIndex_0, i_1);
+            if (component_0.length === 0)
+              throw IllegalArgumentException_init();
+            index = index + component_0.length | 0;
+            var startIndex_1 = index;
+            var i_2 = startIndex_1;
+            while (true) {
+              var tmp$_3 = i_2 < value.length;
+              if (tmp$_3) {
+                var it_1 = toBoxedChar(value.charCodeAt(i_2));
+                tmp$_3 = (new CharRange(97, 122)).contains_mef7kx$(unboxChar(it_1));
+              }if (!tmp$_3)
+                break;
+              i_2 = i_2 + 1 | 0;
+            }
+            var unitName = value.substring(startIndex_1, i_2);
+            index = index + unitName.length | 0;
+            var unit_0 = durationUnitByShortName(unitName);
+            if (prevUnit_0 != null && prevUnit_0.compareTo_11rb$(unit_0) <= 0)
+              throw IllegalArgumentException_init_0('Unexpected order of duration components');
+            prevUnit_0 = unit_0;
+            var dotIndex_0 = indexOf_16(component_0, 46);
+            if (dotIndex_0 > 0) {
+              var whole_0 = component_0.substring(0, dotIndex_0);
+              result = result.plus_cgako$(toDuration_0(toLong(whole_0), unit_0));
+              result = result.plus_cgako$(toDuration_1(toDouble(component_0.substring(dotIndex_0)), unit_0));
+              if (index < length)
+                throw IllegalArgumentException_init_0('Fractional component must be last');
+            } else {
+              result = result.plus_cgako$(toDuration_0(toLong(component_0), unit_0));
+            }
+          }
+        }
+      }
+      return isNegative ? result.unaryMinus() : result;
+    }
+    function parseOverLongIsoComponent(value) {
+      var length = value.length;
+      var startIndex = 0;
+      if (length > 0 && contains_54('+-', value.charCodeAt(0))) {
+        startIndex = startIndex + 1 | 0;
+      }var tmp$ = (length - startIndex | 0) > 16;
+      if (tmp$) {
+        var $receiver = new IntRange(startIndex, get_lastIndex_13(value));
+        var all$result;
+        all$break: do {
+          var tmp$_0;
+          if (Kotlin.isType($receiver, Collection) && $receiver.isEmpty()) {
+            all$result = true;
+            break all$break;
+          }tmp$_0 = $receiver.iterator();
+          while (tmp$_0.hasNext()) {
+            var element = tmp$_0.next();
+            if (!(new CharRange(48, 57)).contains_mef7kx$(value.charCodeAt(element))) {
+              all$result = false;
+              break all$break;
+            }}
+          all$result = true;
+        }
+         while (false);
+        tmp$ = all$result;
+      }if (tmp$) {
+        return value.charCodeAt(0) === 45 ? Long$Companion$MIN_VALUE : Long$Companion$MAX_VALUE;
+      }return startsWith(value, '+') ? toLong(drop_11(value, 1)) : toLong(value);
+    }
+    function substringWhile($receiver, startIndex, predicate) {
+      var i = startIndex;
+      while (i < $receiver.length && predicate(toBoxedChar($receiver.charCodeAt(i)))) {
+        i = i + 1 | 0;
+      }
+      return $receiver.substring(startIndex, i);
+    }
+    function skipWhile($receiver, startIndex, predicate) {
+      var i = startIndex;
+      while (i < $receiver.length && predicate(toBoxedChar($receiver.charCodeAt(i)))) {
+        i = i + 1 | 0;
+      }
+      return i;
+    }
     var NANOS_IN_MILLIS;
     var MAX_NANOS;
     var MAX_MILLIS;
@@ -111668,6 +112226,43 @@
         default:throw IllegalStateException_init_0(('Unknown unit: ' + $receiver).toString());
       }
     }
+    function durationUnitByShortName(shortName) {
+      switch (shortName) {
+        case 'ns':
+          return DurationUnit$NANOSECONDS_getInstance();
+        case 'us':
+          return DurationUnit$MICROSECONDS_getInstance();
+        case 'ms':
+          return DurationUnit$MILLISECONDS_getInstance();
+        case 's':
+          return DurationUnit$SECONDS_getInstance();
+        case 'm':
+          return DurationUnit$MINUTES_getInstance();
+        case 'h':
+          return DurationUnit$HOURS_getInstance();
+        case 'd':
+          return DurationUnit$DAYS_getInstance();
+        default:throw IllegalArgumentException_init_0('Unknown duration unit short name: ' + shortName);
+      }
+    }
+    function durationUnitByIsoChar(isoChar, isTimeComponent) {
+      if (!isTimeComponent) {
+        if (isoChar === 68)
+          return DurationUnit$DAYS_getInstance();
+        else
+          throw IllegalArgumentException_init_0('Invalid or unsupported duration ISO non-time unit: ' + String.fromCharCode(isoChar));
+      } else {
+        switch (isoChar) {
+          case 72:
+            return DurationUnit$HOURS_getInstance();
+          case 77:
+            return DurationUnit$MINUTES_getInstance();
+          case 83:
+            return DurationUnit$SECONDS_getInstance();
+          default:throw IllegalArgumentException_init_0('Invalid duration ISO time unit: ' + String.fromCharCode(isoChar));
+        }
+      }
+    }
     function ExperimentalTime() {
     }
     ExperimentalTime.$metadata$ = {kind: Kind_CLASS, simpleName: 'ExperimentalTime', interfaces: [Annotation]};
@@ -111723,7 +112318,7 @@
         throw Error_init('Operation is disallowed.');
       };
     }));
-    var compareTo_0 = defineInlineFunction('kotlin.kotlin.time.compareTo_8lj69b$', wrapFunction(function () {
+    var compareTo_1 = defineInlineFunction('kotlin.kotlin.time.compareTo_8lj69b$', wrapFunction(function () {
       var Error_init = _.kotlin.Error_init_pdl1vj$;
       return function ($receiver, other) {
         throw Error_init('Operation is disallowed.');
@@ -112301,7 +112896,7 @@
       KotlinVersionCurrentValue_instance = this;
     }
     KotlinVersionCurrentValue.prototype.get = function () {
-      return new KotlinVersion(1, 5, 21);
+      return new KotlinVersion(1, 6, 10);
     };
     KotlinVersionCurrentValue.$metadata$ = {kind: Kind_OBJECT, simpleName: 'KotlinVersionCurrentValue', interfaces: []};
     var KotlinVersionCurrentValue_instance = null;
@@ -117794,6 +118389,8 @@
     Object.defineProperty(package$math, 'E', {get: function () {
       return E;
     }});
+    var package$io = package$kotlin.io || (package$kotlin.io = {});
+    package$io.ReadAfterEOFException = ReadAfterEOFException;
     package$kotlin.Annotation = Annotation;
     package$kotlin.CharSequence = CharSequence;
     package$collections.Iterable = Iterable;
@@ -118139,6 +118736,7 @@
     package$collections.toMutableMap_abgq59$ = toMutableMap;
     package$collections.toSingletonMap_3imywq$ = toSingletonMap;
     package$collections.copyToArrayOfAny_e0iprw$ = copyToArrayOfAny;
+    package$collections.brittleContainsOptimizationEnabled_8be2vx$ = brittleContainsOptimizationEnabled;
     package$collections.AbstractMutableCollection = AbstractMutableCollection;
     package$collections.AbstractMutableList = AbstractMutableList;
     AbstractMutableMap.SimpleEntry_init_trwmqg$ = AbstractMutableMap$AbstractMutableMap$SimpleEntry_init;
@@ -118184,7 +118782,6 @@
     package$collections.RandomAccess = RandomAccess;
     var package$contracts = package$kotlin.contracts || (package$kotlin.contracts = {});
     package$contracts.InvocationKind = InvocationKind;
-    var package$io = package$kotlin.io || (package$kotlin.io = {});
     package$io.BaseOutput = BaseOutput;
     package$io.NodeJsOutput = NodeJsOutput;
     package$io.OutputToConsoleLog = OutputToConsoleLog;
@@ -118198,6 +118795,8 @@
     package$io.println = println;
     package$io.println_s8jyv4$ = println_0;
     package$io.print_s8jyv4$ = print;
+    package$io.readln = readln;
+    package$io.readlnOrNull = readlnOrNull;
     package$coroutines.SafeContinuation_init_wj8d80$ = SafeContinuation_init;
     package$coroutines.SafeContinuation = SafeContinuation;
     var package$cancellation = package$coroutines.cancellation || (package$coroutines.cancellation = {});
@@ -118414,8 +119013,6 @@
     package$text.Regex_init_sb3q2$ = Regex_init;
     package$text.Regex_init_61zpoe$ = Regex_init_0;
     package$text.Regex = Regex;
-    package$text.Regex_sb3q2$ = Regex_0;
-    package$text.Regex_61zpoe$ = Regex_1;
     package$text.String_4hbowm$ = String_1;
     package$text.String_8chfmy$ = String_2;
     package$text.concatToString_355ntz$ = concatToString;
@@ -118450,6 +119047,10 @@
     package$kotlin.printStackTrace_dbl4o4$ = printStackTrace;
     package$kotlin.addSuppressed_oh0dqn$ = addSuppressed;
     package$kotlin.get_suppressedExceptions_dbl4o4$ = get_suppressedExceptions;
+    var package$time = package$kotlin.time || (package$kotlin.time = {});
+    Object.defineProperty(package$time, 'durationAssertionsEnabled_8be2vx$', {get: get_durationAssertionsEnabled});
+    package$time.formatToExactDecimals_coldnx$ = formatToExactDecimals;
+    package$time.formatUpToDecimals_coldnx$ = formatUpToDecimals;
     Object.defineProperty(DurationUnit, 'NANOSECONDS', {get: DurationUnit$NANOSECONDS_getInstance});
     Object.defineProperty(DurationUnit, 'MICROSECONDS', {get: DurationUnit$MICROSECONDS_getInstance});
     Object.defineProperty(DurationUnit, 'MILLISECONDS', {get: DurationUnit$MILLISECONDS_getInstance});
@@ -118457,7 +119058,6 @@
     Object.defineProperty(DurationUnit, 'MINUTES', {get: DurationUnit$MINUTES_getInstance});
     Object.defineProperty(DurationUnit, 'HOURS', {get: DurationUnit$HOURS_getInstance});
     Object.defineProperty(DurationUnit, 'DAYS', {get: DurationUnit$DAYS_getInstance});
-    var package$time = package$kotlin.time || (package$kotlin.time = {});
     package$time.DurationUnit = DurationUnit;
     package$time.convertDurationUnit_sgln0f$ = convertDurationUnit;
     package$time.convertDurationUnitOverflow_qayl78$ = convertDurationUnitOverflow;
@@ -118466,9 +119066,6 @@
     package$time.HrTimeSource = HrTimeSource;
     package$time.PerformanceTimeSource = PerformanceTimeSource;
     Object.defineProperty(package$time, 'DateNowTimeSource', {get: DateNowTimeSource_getInstance});
-    package$time.formatToExactDecimals_coldnx$ = formatToExactDecimals;
-    package$time.formatUpToDecimals_coldnx$ = formatUpToDecimals;
-    package$time.formatScientific_tq0o01$ = formatScientific;
     package$dom_1.get_as__xbdrh1$ = get_as_;
     package$dom_1.set_as__lprayv$ = set_as_;
     package$dom_1.get_is__jkvip$ = get_is_;
@@ -118690,6 +119287,10 @@
     package$collections.unzip_v2dak7$ = unzip;
     package$collections.contentDeepEqualsImpl = contentDeepEqualsImpl;
     package$collections.contentDeepToStringImpl = contentDeepToStringImpl;
+    package$collections.convertToSetForSetOperationWith_wo44v8$ = convertToSetForSetOperationWith;
+    package$collections.convertToSetForSetOperation_tw993d$ = convertToSetForSetOperation;
+    package$collections.convertToSetForSetOperation_agw6o5$ = convertToSetForSetOperation_0;
+    package$collections.convertToSetForSetOperation_d6yotq$ = convertToSetForSetOperation_1;
     Object.defineProperty(package$collections, 'EmptyIterator', {get: EmptyIterator_getInstance});
     Object.defineProperty(package$collections, 'EmptyList', {get: EmptyList_getInstance});
     package$collections.asCollection_vj43ah$ = asCollection;
@@ -118720,8 +119321,6 @@
     package$collections.IndexedValue = IndexedValue;
     package$collections.IndexingIterable = IndexingIterable;
     package$collections.collectionSizeOrNull_7wnvza$ = collectionSizeOrNull;
-    package$collections.convertToSetForSetOperationWith_wo44v8$ = convertToSetForSetOperationWith;
-    package$collections.convertToSetForSetOperation_tw993d$ = convertToSetForSetOperation;
     package$collections.flatten_u0ad8z$ = flatten_0;
     package$collections.unzip_6hr0sd$ = unzip_0;
     package$collections.withIndex_35ci02$ = withIndex_15;
@@ -119040,6 +119639,7 @@
     package$text.lastIndexOf_l5u8uk$ = lastIndexOf_16;
     package$text.contains_li3zpu$ = contains_53;
     package$text.contains_sgbm27$ = contains_54;
+    package$text.requireNonNegativeLimit_kcn2v3$ = requireNonNegativeLimit;
     package$text.splitToSequence_ip8yn$ = splitToSequence;
     package$text.split_ip8yn$ = split;
     package$text.splitToSequence_o64adg$ = splitToSequence_0;
@@ -119055,11 +119655,11 @@
     package$text.MatchNamedGroupCollection = MatchNamedGroupCollection;
     MatchResult.Destructured = MatchResult$Destructured;
     package$text.MatchResult = MatchResult;
-    Object.defineProperty(Duration, 'Companion', {get: Duration$Companion_getInstance});
-    package$time.Duration = Duration;
     package$time.toDuration_14orw9$ = toDuration;
     package$time.toDuration_rrkdm6$ = toDuration_0;
     package$time.toDuration_n769wd$ = toDuration_1;
+    Object.defineProperty(Duration, 'Companion', {get: Duration$Companion_getInstance});
+    package$time.Duration = Duration;
     package$time.get_nanoseconds_s8ev3n$ = get_nanoseconds;
     package$time.get_nanoseconds_mts6qi$ = get_nanoseconds_0;
     package$time.get_nanoseconds_yrwdxr$ = get_nanoseconds_1;
@@ -119091,6 +119691,8 @@
       return MAX_MILLIS;
     }});
     package$time.shortName_d5gje$ = shortName;
+    package$time.durationUnitByShortName_y4putb$ = durationUnitByShortName;
+    package$time.durationUnitByIsoChar_4b3kw1$ = durationUnitByIsoChar;
     package$time.ExperimentalTime = ExperimentalTime;
     Object.defineProperty(TimeSource, 'Monotonic', {get: TimeSource$Monotonic_getInstance});
     Object.defineProperty(TimeSource, 'Companion', {get: TimeSource$Companion_getInstance});
@@ -139528,6 +140130,10 @@
                         "hardKeyboardAvailable": {
                           "type": "bool",
                           "id": 10
+                        },
+                        "windowFramesValid": {
+                          "type": "bool",
+                          "id": 11
                         }
                       }
                     },
@@ -139574,7 +140180,10 @@
                         },
                         "defaultMinSizeResizableTask": {
                           "type": "int32",
-                          "id": 8
+                          "id": 8,
+                          "options": {
+                            "deprecated": true
+                          }
                         }
                       },
                       "reserved": [
@@ -140070,6 +140679,15 @@
                           "rule": "repeated",
                           "type": "string",
                           "id": 37
+                        },
+                        "keepClearAreas": {
+                          "rule": "repeated",
+                          "type": ".android.graphics.RectProto",
+                          "id": 38
+                        },
+                        "minSizeOfResizeableTaskDp": {
+                          "type": "int32",
+                          "id": 39
                         }
                       },
                       "reserved": [
@@ -140585,6 +141203,10 @@
                         "providesMaxBounds": {
                           "type": "bool",
                           "id": 34
+                        },
+                        "enableRecentsScreenshot": {
+                          "type": "bool",
+                          "id": 35
                         }
                       },
                       "reserved": [
@@ -140846,7 +141468,10 @@
                         },
                         "finishedSeamlessRotationFrame": {
                           "type": "int64",
-                          "id": 40
+                          "id": 40,
+                          "options": {
+                            "deprecated": true
+                          }
                         },
                         "windowFrames": {
                           "type": "WindowFramesProto",
@@ -140863,6 +141488,16 @@
                         "globalScale": {
                           "type": "float",
                           "id": 44
+                        },
+                        "keepClearAreas": {
+                          "rule": "repeated",
+                          "type": ".android.graphics.RectProto",
+                          "id": 45
+                        },
+                        "unrestrictedKeepClearAreas": {
+                          "rule": "repeated",
+                          "type": ".android.graphics.RectProto",
+                          "id": 46
                         }
                       }
                     },
@@ -144323,6 +144958,24 @@
 
 /***/ }),
 
+/***/ "EEmf":
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("JPst");
+/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__);
+// Imports
+
+var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default()(function(i){return i[1]});
+// Module
+___CSS_LOADER_EXPORT___.push([module.i, "\n.config-selection[data-v-62a1321f] {\n  width: 150px;\n  display: inline-flex;\n  margin-left: 5px;\n  margin-right: 5px;\n}\n.device-choice[data-v-62a1321f] {\n  display: inline-flex;\n}\nh3[data-v-62a1321f] {\n  margin-bottom: 0;\n}\n.trace-btn[data-v-62a1321f], .dump-btn[data-v-62a1321f] {\n  margin-top: 0;\n}\npre[data-v-62a1321f] {\n  white-space: pre-wrap;\n}\n", ""]);
+// Exports
+/* harmony default export */ __webpack_exports__["default"] = (___CSS_LOADER_EXPORT___);
+
+
+/***/ }),
+
 /***/ "Frpt":
 /***/ (function(module) {
 
@@ -145496,6 +146149,10 @@
                 "requestedCornerRadius": {
                   "type": "float",
                   "id": 56
+                },
+                "destinationFrame": {
+                  "type": "RectProto",
+                  "id": 57
                 }
               }
             },
@@ -146001,7 +146658,7 @@
                 "LayerState": {
                   "fields": {
                     "layerId": {
-                      "type": "int32",
+                      "type": "int64",
                       "id": 1
                     },
                     "what": {
@@ -146053,11 +146710,11 @@
                       "id": 13
                     },
                     "parentId": {
-                      "type": "int32",
+                      "type": "int64",
                       "id": 14
                     },
                     "relativeParentId": {
-                      "type": "int32",
+                      "type": "int64",
                       "id": 15
                     },
                     "alpha": {
@@ -146184,7 +146841,6 @@
                         "eLayerStackChanged": 128,
                         "eReleaseBufferListenerChanged": 1024,
                         "eShadowRadiusChanged": 2048,
-                        "eLayerCreated": 4096,
                         "eBufferCropChanged": 8192,
                         "eRelativeLayerChanged": 16384,
                         "eReparent": 32768,
@@ -146398,7 +147054,7 @@
                           "id": 7
                         },
                         "cropLayerId": {
-                          "type": "int32",
+                          "type": "int64",
                           "id": 8
                         },
                         "replaceTouchableRegionWithCrop": {
@@ -149176,6 +149832,8 @@
 
 var Layer = __webpack_require__("t+B9").com.android.server.wm.traces.common.layers.Layer;
 
+var BaseLayerTraceEntry = __webpack_require__("t+B9").com.android.server.wm.traces.common.layers.BaseLayerTraceEntry;
+
 var LayerTraceEntry = __webpack_require__("t+B9").com.android.server.wm.traces.common.layers.LayerTraceEntry;
 
 var LayerTraceEntryBuilder = __webpack_require__("t+B9").com.android.server.wm.traces.common.layers.LayerTraceEntryBuilder;
@@ -149424,7 +150082,7 @@
 }
 
 
-// EXTERNAL MODULE: /home/natanieljr/android/master/prebuilts/misc/common/winscope/intDefMapping.json
+// EXTERNAL MODULE: /home/natanieljr/android/tm-dev/prebuilts/misc/common/winscope/intDefMapping.json
 var intDefMapping = __webpack_require__("Frpt");
 
 // EXTERNAL MODULE: ./src/config/Configuration.json
@@ -149590,7 +150248,7 @@
             case "TransformProto": return toTransform(obj);
             case 'ColorTransformProto': {
                 var formatted = this.formatColorTransform(obj.val);
-                return "" + formatted;
+                return "".concat(formatted);
             }
         }
         return null;
@@ -149634,7 +150292,7 @@
      */
     ObjectFormatter.translateIntDef = function (parentObj, propertyName, value) {
         var parentClassName = parentObj.constructor.name;
-        var propertyPath = parentClassName + "." + propertyName;
+        var propertyPath = "".concat(parentClassName, ".").concat(propertyName);
         var translatedValue = value;
         // Parse Flicker objects (no intdef annotation supported)
         if (this.FLICKER_INTDEF_MAP.has(propertyPath)) {
@@ -151382,51 +152040,51 @@
 
 // CONCATENATED MODULE: ./src/Timelines.vue?vue&type=template&id=744b3773&scoped=true&
 
-// EXTERNAL MODULE: /home/natanieljr/android/master/frameworks/base/core/proto/android/server/accessibilitytrace.proto
+// EXTERNAL MODULE: /home/natanieljr/android/tm-dev/frameworks/base/core/proto/android/server/accessibilitytrace.proto
 var accessibilitytrace_proto = __webpack_require__("/6vv");
 var accessibilitytrace_proto_default = /*#__PURE__*/__webpack_require__.n(accessibilitytrace_proto);
 
-// EXTERNAL MODULE: /home/natanieljr/android/master/frameworks/base/core/proto/android/server/windowmanagertrace.proto
+// EXTERNAL MODULE: /home/natanieljr/android/tm-dev/frameworks/base/core/proto/android/server/windowmanagertrace.proto
 var windowmanagertrace_proto = __webpack_require__("jneh");
 var windowmanagertrace_proto_default = /*#__PURE__*/__webpack_require__.n(windowmanagertrace_proto);
 
-// EXTERNAL MODULE: /home/natanieljr/android/master/frameworks/base/core/proto/android/internal/protolog.proto
+// EXTERNAL MODULE: /home/natanieljr/android/tm-dev/frameworks/base/core/proto/android/internal/protolog.proto
 var protolog_proto = __webpack_require__("w0eh");
 var protolog_proto_default = /*#__PURE__*/__webpack_require__.n(protolog_proto);
 
-// EXTERNAL MODULE: /home/natanieljr/android/master/frameworks/native/services/surfaceflinger/layerproto/layerstrace.proto
+// EXTERNAL MODULE: /home/natanieljr/android/tm-dev/frameworks/native/services/surfaceflinger/layerproto/layerstrace.proto
 var layerstrace_proto = __webpack_require__("Me3s");
 var layerstrace_proto_default = /*#__PURE__*/__webpack_require__.n(layerstrace_proto);
 
-// EXTERNAL MODULE: /home/natanieljr/android/master/frameworks/native/services/surfaceflinger/layerproto/transactions.proto
+// EXTERNAL MODULE: /home/natanieljr/android/tm-dev/frameworks/native/services/surfaceflinger/layerproto/transactions.proto
 var transactions_proto = __webpack_require__("NNFc");
 var transactions_proto_default = /*#__PURE__*/__webpack_require__.n(transactions_proto);
 
-// EXTERNAL MODULE: /home/natanieljr/android/master/frameworks/native/cmds/surfacereplayer/proto/src/trace.proto
+// EXTERNAL MODULE: /home/natanieljr/android/tm-dev/frameworks/native/cmds/surfacereplayer/proto/src/trace.proto
 var trace_proto = __webpack_require__("DwW8");
 var trace_proto_default = /*#__PURE__*/__webpack_require__.n(trace_proto);
 
-// EXTERNAL MODULE: /home/natanieljr/android/master/vendor/google_arc/libs/wayland_service/waylandtrace.proto
+// EXTERNAL MODULE: /home/natanieljr/android/tm-dev/vendor/google_arc/libs/wayland_service/waylandtrace.proto
 var waylandtrace_proto = __webpack_require__("IzfZ");
 var waylandtrace_proto_default = /*#__PURE__*/__webpack_require__.n(waylandtrace_proto);
 
-// EXTERNAL MODULE: /home/natanieljr/android/master/frameworks/base/packages/SystemUI/src/com/android/systemui/tracing/sysui_trace.proto
+// EXTERNAL MODULE: /home/natanieljr/android/tm-dev/frameworks/base/packages/SystemUI/src/com/android/systemui/tracing/sysui_trace.proto
 var sysui_trace_proto = __webpack_require__("Aqrh");
 var sysui_trace_proto_default = /*#__PURE__*/__webpack_require__.n(sysui_trace_proto);
 
-// EXTERNAL MODULE: /home/natanieljr/android/master/packages/apps/Launcher3/protos/launcher_trace_file.proto
+// EXTERNAL MODULE: /home/natanieljr/android/tm-dev/packages/apps/Launcher3/protos/launcher_trace_file.proto
 var launcher_trace_file_proto = __webpack_require__("DqTH");
 var launcher_trace_file_proto_default = /*#__PURE__*/__webpack_require__.n(launcher_trace_file_proto);
 
-// EXTERNAL MODULE: /home/natanieljr/android/master/frameworks/base/core/proto/android/view/inputmethod/inputmethodeditortrace.proto
+// EXTERNAL MODULE: /home/natanieljr/android/tm-dev/frameworks/base/core/proto/android/view/inputmethod/inputmethodeditortrace.proto
 var inputmethodeditortrace_proto = __webpack_require__("UnI0");
 var inputmethodeditortrace_proto_default = /*#__PURE__*/__webpack_require__.n(inputmethodeditortrace_proto);
 
-// EXTERNAL MODULE: /home/natanieljr/android/master/platform_testing/libraries/flicker/src/com/android/server/wm/proto/tags.proto
+// EXTERNAL MODULE: /home/natanieljr/android/tm-dev/platform_testing/libraries/flicker/src/com/android/server/wm/proto/tags.proto
 var tags_proto = __webpack_require__("/4ov");
 var tags_proto_default = /*#__PURE__*/__webpack_require__.n(tags_proto);
 
-// EXTERNAL MODULE: /home/natanieljr/android/master/platform_testing/libraries/flicker/src/com/android/server/wm/proto/errors.proto
+// EXTERNAL MODULE: /home/natanieljr/android/tm-dev/platform_testing/libraries/flicker/src/com/android/server/wm/proto/errors.proto
 var errors_proto = __webpack_require__("dgSw");
 var errors_proto_default = /*#__PURE__*/__webpack_require__.n(errors_proto);
 
@@ -151779,7 +152437,7 @@
 }
 
 
-// EXTERNAL MODULE: /home/natanieljr/android/master/frameworks/base/data/etc/services.core.protolog.json
+// EXTERNAL MODULE: /home/natanieljr/android/tm-dev/frameworks/base/data/etc/services.core.protolog.json
 var services_core_protolog = __webpack_require__("e/Vj");
 
 // EXTERNAL MODULE: ./node_modules/jszip/dist/jszip.min.js
@@ -152569,7 +153227,7 @@
         return name;
     }
     var className = classParts.slice(-1)[0]; // last element
-    return classParts[0] + "." + classParts[1] + ".(...)." + className;
+    return "".concat(classParts[0], ".").concat(classParts[1], ".(...).").concat(className);
 }
 
 // CONCATENATED MODULE: ./src/flickerlib/treeview/Chip.ts
@@ -152717,7 +153375,7 @@
     if (isFlagClear(type, SCALE_VAL | ROTATE_VAL)) {
         return new Matrix33(1, 0, x, 0, 1, y);
     }
-    throw new Error("Unknown transform type " + type);
+    throw new Error("Unknown transform type ".concat(type));
 }
 function isFlagSet(type, bits) {
     var type = type || 0;
@@ -152781,7 +153439,7 @@
     return entry;
 };
 function addAttributes(entry, proto) {
-    entry.kind = "" + entry.id;
+    entry.kind = "".concat(entry.id);
     entry.shortName = shortenName(entry.name);
     entry.proto = proto;
     entry.rect = entry.bounds;
@@ -152845,7 +153503,7 @@
     // Instead parse only key properties for debugging
     var entryIds = {};
     protos.forEach(function (it) {
-        return entryIds[it.id] = "\nparent=" + it.parent + "\ntype=" + it.type + "\nname=" + it.name;
+        return entryIds[it.id] = "\nparent=".concat(it.parent, "\ntype=").concat(it.type, "\nname=").concat(it.name);
     });
     entry.proto = entryIds;
     entry.shortName = entry.name;
@@ -152870,6 +153528,112 @@
 }
 /* harmony default export */ var layers_LayerTraceEntry = (LayerTraceEntry);
 
+// CONCATENATED MODULE: ./src/flickerlib/layers/LayerTraceEntryLazy.ts
+/*
+ * Copyright 2021, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+var LayerTraceEntryLazy_extends = (undefined && undefined.__extends) || (function () {
+    var extendStatics = function (d, b) {
+        extendStatics = Object.setPrototypeOf ||
+            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
+        return extendStatics(d, b);
+    };
+    return function (d, b) {
+        if (typeof b !== "function" && b !== null)
+            throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
+        extendStatics(d, b);
+        function __() { this.constructor = d; }
+        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+    };
+})();
+
+
+var LayerTraceEntryLazy_LayerTraceEntryLazy = /** @class */ (function (_super) {
+    LayerTraceEntryLazy_extends(LayerTraceEntryLazy, _super);
+    function LayerTraceEntryLazy(layersProto, displayProtos, timestamp, hwcBlob, where) {
+        if (where === void 0) { where = ''; }
+        var _this = _super.call(this) || this;
+        _this._isInitialized = false;
+        _this._layersProto = layersProto;
+        _this._displayProtos = displayProtos;
+        _this.timestamp = timestamp;
+        _this.timestampMs = timestamp.toString();
+        _this.hwcBlob = hwcBlob;
+        _this.where = where;
+        _this.declareLazyProperties();
+        return _this;
+    }
+    LayerTraceEntryLazy.prototype.initialize = function () {
+        if (this._isInitialized)
+            return;
+        this._isInitialized = true;
+        this._lazyLayerTraceEntry = layers_LayerTraceEntry.fromProto(this._layersProto, this._displayProtos, this.timestamp, this.hwcBlob, this.where);
+        this._layersProto = [];
+        this._displayProtos = [];
+    };
+    LayerTraceEntryLazy.prototype.declareLazyProperties = function () {
+        Object.defineProperty(this, 'kind', { configurable: true, enumerable: true, get: function () {
+                this.initialize();
+                return this._lazyLayerTraceEntry.kind;
+            } });
+        Object.defineProperty(this, 'timestampMs', { configurable: true, enumerable: true, get: function () {
+                this.initialize();
+                return this._lazyLayerTraceEntry.timestampMs;
+            } });
+        Object.defineProperty(this, 'rects', { configurable: true, enumerable: true, get: function () {
+                this.initialize();
+                return this._lazyLayerTraceEntry.rects;
+            } });
+        Object.defineProperty(this, 'proto', { configurable: true, enumerable: true, get: function () {
+                this.initialize();
+                return this._lazyLayerTraceEntry.proto;
+            } });
+        Object.defineProperty(this, 'shortName', { configurable: true, enumerable: true, get: function () {
+                this.initialize();
+                return this._lazyLayerTraceEntry.shortName;
+            } });
+        Object.defineProperty(this, 'isVisible', { configurable: true, enumerable: true, get: function () {
+                this.initialize();
+                return this._lazyLayerTraceEntry.isVisible;
+            } });
+        Object.defineProperty(this, 'flattenedLayers', { configurable: true, enumerable: true, get: function () {
+                this.initialize();
+                return this._lazyLayerTraceEntry.flattenedLayers;
+            } });
+        Object.defineProperty(this, 'stableId', { configurable: true, enumerable: true, get: function () {
+                this.initialize();
+                return this._lazyLayerTraceEntry.stableId;
+            } });
+        Object.defineProperty(this, 'visibleLayers', { configurable: true, enumerable: true, get: function () {
+                this.initialize();
+                return this._lazyLayerTraceEntry.visibleLayers;
+            } });
+        Object.defineProperty(this, 'children', { configurable: true, enumerable: true, get: function () {
+                this.initialize();
+                return this._lazyLayerTraceEntry.children;
+            } });
+        Object.defineProperty(this, 'displays', { configurable: true, enumerable: true, get: function () {
+                this.initialize();
+                return this._lazyLayerTraceEntry.displays;
+            } });
+    };
+    return LayerTraceEntryLazy;
+}(BaseLayerTraceEntry));
+/* harmony default export */ var layers_LayerTraceEntryLazy = (LayerTraceEntryLazy_LayerTraceEntryLazy);
+
 // CONCATENATED MODULE: ./src/flickerlib/LayersTrace.ts
 /*
  * Copyright 2020, The Android Open Source Project
@@ -152892,7 +153656,7 @@
     var entries = [];
     for (var _i = 0, _a = proto.entry; _i < _a.length; _i++) {
         var entryProto = _a[_i];
-        var transformedEntry = layers_LayerTraceEntry.fromProto(
+        var transformedEntry = new layers_LayerTraceEntryLazy(
         /* protos */ entryProto.layers.layers, 
         /* displays */ entryProto.displays, 
         /* timestamp */ entryProto.elapsedRealtimeNanos, 
@@ -153382,7 +154146,7 @@
     var keyguardControllerState = createKeyguardControllerState(proto.rootWindowContainer.keyguardController);
     var policy = createWindowManagerPolicy(proto.policy);
     var entry = new WindowManagerState(where, policy, proto.focusedApp, proto.focusedDisplayId, (_b = (_a = proto.focusedWindow) === null || _a === void 0 ? void 0 : _a.title) !== null && _b !== void 0 ? _b : "", inputMethodWIndowAppToken, proto.rootWindowContainer.isHomeRecentsComponent, proto.displayFrozen, proto.rootWindowContainer.pendingActivities.map(function (it) { return it.title; }), rootWindowContainer, keyguardControllerState, 
-    /*timestamp */ "" + timestamp);
+    /*timestamp */ "".concat(timestamp));
     WindowManagerState_addAttributes(entry, proto);
     return entry;
 };
@@ -153410,7 +154174,7 @@
     /* childrenProto */ (_c = (_b = (_a = proto.windowContainer) === null || _a === void 0 ? void 0 : _a.children) === null || _b === void 0 ? void 0 : _b.reverse()) !== null && _c !== void 0 ? _c : [], 
     /* isActivityInTree */ false);
     if (windowContainer == null) {
-        throw new Error("Window container should not be null.\n" + JSON.stringify(proto));
+        throw new Error("Window container should not be null.\n".concat(JSON.stringify(proto)));
     }
     var entry = new RootWindowContainer(windowContainer);
     return entry;
@@ -153517,7 +154281,7 @@
 
 TagState.fromProto = function (timestamp, protos) {
     var tags = protos.map(function (it) { return tags_Tag.fromProto(it); });
-    var state = new TagState("" + timestamp, tags);
+    var state = new TagState("".concat(timestamp), tags);
     return state;
 };
 /* harmony default export */ var tags_TagState = (TagState);
@@ -153595,7 +154359,7 @@
 
 ErrorState.fromProto = function (protos, timestamp) {
     var errors = protos.map(function (it) { return errors_Error.fromProto(it); });
-    var state = new ErrorState(errors, "" + timestamp);
+    var state = new ErrorState(errors, "".concat(timestamp));
     return state;
 };
 /* harmony default export */ var errors_ErrorState = (ErrorState);
@@ -153696,10 +154460,10 @@
     SurfaceFlinger_extends(SurfaceFlinger, _super);
     function SurfaceFlinger(files) {
         var _this = this;
-        var sfTraceFile = files[FILE_TYPES.SURFACE_FLINGER_TRACE];
+        var sfTraceFile = Object.freeze(files[FILE_TYPES.SURFACE_FLINGER_TRACE]);
         var tagGenerationTrace = files[FILE_TYPES.SURFACE_FLINGER_TRACE].tagGenerationTrace;
         _this = _super.call(this, sfTraceFile.data, sfTraceFile.timeline, files) || this;
-        _this.tagGenerationTrace = tagGenerationTrace;
+        _this.tagGenerationTrace = Object.freeze(tagGenerationTrace);
         _this.sfTraceFile = sfTraceFile;
         return _this;
     }
@@ -160171,12 +160935,12 @@
 )
 
 /* harmony default export */ var WindowManagerTraceView = (WindowManagerTraceView_component.exports);
-// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/SurfaceFlingerTraceView.vue?vue&type=template&id=e212dee8&
-var SurfaceFlingerTraceViewvue_type_template_id_e212dee8_render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('TraceView',{attrs:{"store":_vm.store,"file":_vm.file,"summarizer":_vm.summarizer,"presentTags":_vm.presentTags,"presentErrors":_vm.presentErrors}})}
-var SurfaceFlingerTraceViewvue_type_template_id_e212dee8_staticRenderFns = []
+// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/SurfaceFlingerTraceView.vue?vue&type=template&id=cda590c4&
+var SurfaceFlingerTraceViewvue_type_template_id_cda590c4_render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('TraceView',{attrs:{"store":_vm.store,"file":_vm.file,"summarizer":_vm.summarizer,"presentTags":_vm.presentTags,"presentErrors":_vm.presentErrors}})}
+var SurfaceFlingerTraceViewvue_type_template_id_cda590c4_staticRenderFns = []
 
 
-// CONCATENATED MODULE: ./src/SurfaceFlingerTraceView.vue?vue&type=template&id=e212dee8&
+// CONCATENATED MODULE: ./src/SurfaceFlingerTraceView.vue?vue&type=template&id=cda590c4&
 
 // CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./src/SurfaceFlingerTraceView.vue?vue&type=script&lang=js&
 //
@@ -160218,9 +160982,17 @@
       var summary = [];
 
       if (layer !== null && layer !== void 0 && layer.visibilityReason) {
+        var reason = "";
+
+        if (Array.isArray(layer.visibilityReason)) {
+          reason = layer.visibilityReason.join(", ");
+        } else {
+          reason = layer.visibilityReason;
+        }
+
         summary.push({
           key: 'Invisible due to',
-          value: layer.visibilityReason
+          value: reason
         });
       }
 
@@ -160267,8 +161039,8 @@
 
 var SurfaceFlingerTraceView_component = Object(componentNormalizer["a" /* default */])(
   src_SurfaceFlingerTraceViewvue_type_script_lang_js_,
-  SurfaceFlingerTraceViewvue_type_template_id_e212dee8_render,
-  SurfaceFlingerTraceViewvue_type_template_id_e212dee8_staticRenderFns,
+  SurfaceFlingerTraceViewvue_type_template_id_cda590c4_render,
+  SurfaceFlingerTraceViewvue_type_template_id_cda590c4_staticRenderFns,
   false,
   null,
   null,
@@ -162647,15 +163419,15 @@
 )
 
 /* harmony default export */ var DataView = (DataView_component.exports);
-// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/DataInput.vue?vue&type=template&id=70ac4afc&
-var DataInputvue_type_template_id_70ac4afc_render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{on:{"dragleave":_vm.fileDragOut,"dragover":_vm.fileDragIn,"drop":_vm.handleFileDrop}},[_c('flat-card',{staticStyle:{"min-width":"50em"}},[_c('md-card-header',[_c('div',{staticClass:"md-title"},[_vm._v("Open files")])]),_vm._v(" "),_c('md-card-content',[_c('div',{ref:"dropbox",staticClass:"dropbox",on:{"click":function($event){return _vm.$refs.fileUpload.click()}}},[_c('md-list',{directives:[{name:"show",rawName:"v-show",value:(Object.keys(_vm.dataFiles).length > 0),expression:"Object.keys(dataFiles).length > 0"}],staticClass:"uploaded-files"},_vm._l((_vm.dataFiles),function(file){return _c('md-list-item',{key:file.filename},[_c('md-icon',[_vm._v(_vm._s(_vm.FILE_ICONS[file.type]))]),_vm._v(" "),_c('span',{staticClass:"md-list-item-text"},[_vm._v(_vm._s(file.filename)+" ("+_vm._s(file.type)+")\n            ")]),_vm._v(" "),_c('md-button',{staticClass:"md-icon-button md-accent",on:{"click":function (e) {
+// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/DataInput.vue?vue&type=template&id=18ad371c&
+var DataInputvue_type_template_id_18ad371c_render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{on:{"dragleave":_vm.fileDragOut,"dragover":_vm.fileDragIn,"drop":_vm.handleFileDrop}},[_c('flat-card',{staticStyle:{"min-width":"50em"}},[_c('md-card-header',[_c('div',{staticClass:"md-title"},[_vm._v("Open files")])]),_vm._v(" "),_c('md-card-content',[_c('div',{ref:"dropbox",staticClass:"dropbox",on:{"click":function($event){return _vm.$refs.fileUpload.click()}}},[_c('md-list',{directives:[{name:"show",rawName:"v-show",value:(Object.keys(_vm.dataFiles).length > 0),expression:"Object.keys(dataFiles).length > 0"}],staticClass:"uploaded-files"},_vm._l((_vm.dataFiles),function(file){return _c('md-list-item',{key:file.filename},[_c('md-icon',[_vm._v(_vm._s(_vm.FILE_ICONS[file.type]))]),_vm._v(" "),_c('span',{staticClass:"md-list-item-text"},[_vm._v(_vm._s(file.filename)+" ("+_vm._s(file.type)+")\n            ")]),_vm._v(" "),_c('md-button',{staticClass:"md-icon-button md-accent",on:{"click":function (e) {
                 e.stopPropagation()
                 _vm.onRemoveFile(file.type)
               }}},[_c('md-icon',[_vm._v("close")])],1)],1)}),1),_vm._v(" "),_c('div',{directives:[{name:"show",rawName:"v-show",value:(_vm.loadingFiles),expression:"loadingFiles"}],staticClass:"progress-spinner-wrapper"},[_c('md-progress-spinner',{staticClass:"progress-spinner",attrs:{"md-diameter":30,"md-stroke":3,"md-mode":"indeterminate"}})],1),_vm._v(" "),_c('input',{directives:[{name:"show",rawName:"v-show",value:(false),expression:"false"}],ref:"fileUpload",attrs:{"type":"file","id":"dropzone","multiple":""},on:{"change":_vm.onLoadFile,"drop":_vm.handleFileDrop}}),_vm._v(" "),(!_vm.dataReady && !_vm.loadingFiles)?_c('p',[_vm._v("\n            Drag your "),_c('b',[_vm._v(".winscope")]),_vm._v(" or "),_c('b',[_vm._v(".zip")]),_vm._v(" file(s) or click here to begin\n          ")]):_vm._e()],1),_vm._v(" "),_c('div',{staticClass:"md-layout"},[_c('div',{staticClass:"md-layout-item md-small-size-100"},[_c('md-field',[_c('md-select',{attrs:{"id":"file-type","placeholder":"File type"},model:{value:(_vm.fileType),callback:function ($$v) {_vm.fileType=$$v},expression:"fileType"}},[_c('md-option',{attrs:{"value":"auto"}},[_vm._v("Detect type")]),_vm._v(" "),_c('md-option',{attrs:{"value":"bugreport"}},[_vm._v("Bug Report (.zip)")]),_vm._v(" "),_vm._l((_vm.FILE_DECODERS),function(v,k){return _c('md-option',{key:v.name,attrs:{"value":k}},[_vm._v(_vm._s(v.name)+"\n            >")])})],2)],1)],1)]),_vm._v(" "),_c('div',{staticClass:"md-layout"},[_c('md-button',{staticClass:"md-primary md-theme-default",on:{"click":function($event){return _vm.$refs.fileUpload.click()}}},[_vm._v("\n          Add File\n        ")]),_vm._v(" "),(_vm.dataReady)?_c('md-button',{staticClass:"md-button md-primary md-raised md-theme-default",on:{"click":_vm.onSubmit}},[_vm._v("\n          Submit\n        ")]):_vm._e()],1)]),_vm._v(" "),_c('md-snackbar',{attrs:{"md-position":"center","md-duration":Infinity,"md-active":_vm.showFetchingSnackbar,"md-persistent":""},on:{"update:mdActive":function($event){_vm.showFetchingSnackbar=$event},"update:md-active":function($event){_vm.showFetchingSnackbar=$event}}},[_c('span',[_vm._v(_vm._s(_vm.fetchingSnackbarText))])]),_vm._v(" "),_c('md-snackbar',{attrs:{"md-position":"center","md-duration":_vm.snackbarDuration,"md-active":_vm.showSnackbar,"md-persistent":""},on:{"update:mdActive":function($event){_vm.showSnackbar=$event},"update:md-active":function($event){_vm.showSnackbar=$event}}},[_c('p',{staticClass:"snackbar-break-words"},[_vm._v(_vm._s(_vm.snackbarText))]),_vm._v(" "),_c('div',{on:{"click":function($event){return _vm.hideSnackbarMessage()}}},[_c('md-button',{staticClass:"md-icon-button"},[_c('md-icon',{staticStyle:{"color":"white"}},[_vm._v("close")])],1)],1)])],1)],1)}
-var DataInputvue_type_template_id_70ac4afc_staticRenderFns = []
+var DataInputvue_type_template_id_18ad371c_staticRenderFns = []
 
 
-// CONCATENATED MODULE: ./src/DataInput.vue?vue&type=template&id=70ac4afc&
+// CONCATENATED MODULE: ./src/DataInput.vue?vue&type=template&id=18ad371c&
 
 // CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./src/DataInput.vue?vue&type=script&lang=js&
 function DataInputvue_type_script_lang_js_slicedToArray(arr, i) { return DataInputvue_type_script_lang_js_arrayWithHoles(arr) || DataInputvue_type_script_lang_js_iterableToArrayLimit(arr, i) || DataInputvue_type_script_lang_js_unsupportedIterableToArray(arr, i) || DataInputvue_type_script_lang_js_nonIterableRest(); }
@@ -163041,7 +163813,7 @@
       var _this4 = this;
 
       return _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3() {
-        var tmpTraceName, error, decodedFiles, _iterator, _step, file, result, decodedFileTypes, overriddenFileTypes, overriddenFiles, _i, _decodedFiles, decodedFile, dataType, _dataType, _files, selectedFile, index;
+        var tmpTraceName, error, decodedFiles, _iterator, _step, file, result, decodedFileTypes, overriddenFileTypes, overriddenFiles, _i, _decodedFiles, decodedFile, dataType, frozenData, _dataType, _files, selectedFile, index;
 
         return regeneratorRuntime.wrap(function _callee3$(_context3) {
           while (1) {
@@ -163154,8 +163926,11 @@
                   }
 
                   decodedFileTypes.add(dataType);
+                  frozenData = Object.freeze(decodedFile.data.data);
+                  delete decodedFile.data.data;
+                  decodedFile.data.data = frozenData;
 
-                  _this4.$set(_this4.dataFiles, dataType, decodedFile.data);
+                  _this4.$set(_this4.dataFiles, dataType, Object.freeze(decodedFile.data));
                 } // TODO(b/169305853): Remove this once we have magic numbers or another
                 // way to detect the file type more reliably.
 
@@ -163168,7 +163943,11 @@
 
                     selectedFile = _this4.getMostLikelyCandidateFile(_dataType, _files);
 
-                    _this4.$set(_this4.dataFiles, _dataType, selectedFile); // Remove selected file from overriden list
+                    if (selectedFile.data) {
+                      selectedFile.data = Object.freeze(selectedFile.data);
+                    }
+
+                    _this4.$set(_this4.dataFiles, _dataType, Object.freeze(selectedFile)); // Remove selected file from overriden list
 
 
                     index = _files.indexOf(selectedFile);
@@ -163467,11 +164246,20 @@
         }, _callee6);
       }))();
     },
+
+    /**
+     * Decode a zip file
+     *
+     * Load all files that can be decoded, even if some failures occur.
+     * For example, a zip file with an mp4 recorded via MediaProjection
+     * doesn't include the winscope metadata (b/140855415), but the trace
+     * files within the zip should be nevertheless readable
+     */
     decodeArchive: function decodeArchive(archive) {
       var _this7 = this;
 
       return _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee7() {
-        var buffer, zip, content, decodedFiles, filename, file, fileBlob, decodedFile;
+        var buffer, zip, content, decodedFiles, lastError, filename, file, fileBlob, decodedFile;
         return regeneratorRuntime.wrap(function _callee7$(_context7) {
           while (1) {
             switch (_context7.prev = _context7.next) {
@@ -163492,76 +164280,82 @@
 
               case 9:
                 if ((_context7.t1 = _context7.t0()).done) {
-                  _context7.next = 32;
+                  _context7.next = 31;
                   break;
                 }
 
                 filename = _context7.t1.value;
-
-                if (!content.files.hasOwnProperty(filename)) {
-                  _context7.next = 30;
-                  break;
-                }
-
                 file = content.files[filename];
 
                 if (!file.dir) {
-                  _context7.next = 15;
+                  _context7.next = 14;
                   break;
                 }
 
                 return _context7.abrupt("continue", 9);
 
-              case 15:
-                _context7.next = 17;
+              case 14:
+                _context7.next = 16;
                 return file.async('blob');
 
-              case 17:
+              case 16:
                 fileBlob = _context7.sent;
                 // Get only filename and remove rest of path
                 fileBlob.name = filename.split('/').slice(-1).pop();
-                _context7.prev = 19;
-                _context7.next = 22;
+                _context7.prev = 18;
+                _context7.next = 21;
                 return _this7.decodeFile(fileBlob);
 
-              case 22:
+              case 21:
                 decodedFile = _context7.sent;
                 decodedFiles.push(decodedFile);
-                _context7.next = 30;
+                _context7.next = 29;
                 break;
 
-              case 26:
-                _context7.prev = 26;
-                _context7.t2 = _context7["catch"](19);
+              case 25:
+                _context7.prev = 25;
+                _context7.t2 = _context7["catch"](18);
 
-                if (_context7.t2 instanceof UndetectableFileType) {
-                  _context7.next = 30;
-                  break;
+                if (!(_context7.t2 instanceof UndetectableFileType)) {
+                  lastError = _context7.t2;
                 }
 
-                throw _context7.t2;
+                console.error(_context7.t2);
 
-              case 30:
+              case 29:
                 _context7.next = 9;
                 break;
 
-              case 32:
+              case 31:
                 if (!(decodedFiles.length == 0)) {
+                  _context7.next = 37;
+                  break;
+                }
+
+                if (!lastError) {
                   _context7.next = 34;
                   break;
                 }
 
-                throw new Error('No matching files found in archive', archive);
+                throw lastError;
 
               case 34:
+                throw new Error('No matching files found in archive', archive);
+
+              case 37:
+                if (lastError) {
+                  _this7.showSnackbarMessage('Unable to parse all files, check log for more details', 3500);
+                }
+
+              case 38:
                 return _context7.abrupt("return", decodedFiles);
 
-              case 35:
+              case 39:
               case "end":
                 return _context7.stop();
             }
           }
-        }, _callee7, null, [[19, 26]]);
+        }, _callee7, null, [[18, 25]]);
       }))();
     },
     onRemoveFile: function onRemoveFile(typeName) {
@@ -163607,8 +164401,8 @@
 
 var DataInput_component = Object(componentNormalizer["a" /* default */])(
   src_DataInputvue_type_script_lang_js_,
-  DataInputvue_type_template_id_70ac4afc_render,
-  DataInputvue_type_template_id_70ac4afc_staticRenderFns,
+  DataInputvue_type_template_id_18ad371c_render,
+  DataInputvue_type_template_id_18ad371c_staticRenderFns,
   false,
   null,
   null,
@@ -163617,20 +164411,230 @@
 )
 
 /* harmony default export */ var DataInput = (DataInput_component.exports);
-// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/DataAdb.vue?vue&type=template&id=60fe90a6&scoped=true&
-var DataAdbvue_type_template_id_60fe90a6_scoped_true_render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('flat-card',{staticStyle:{"min-width":"50em"}},[_c('md-card-header',[_c('div',{staticClass:"md-title"},[_vm._v("ADB Connect")])]),_vm._v(" "),(_vm.status === _vm.STATES.CONNECTING)?_c('md-card-content',[_c('md-progress-spinner',{attrs:{"md-indeterminate":""}})],1):_vm._e(),_vm._v(" "),(_vm.status === _vm.STATES.NO_PROXY)?_c('md-card-content',[_c('md-icon',{staticClass:"md-accent"},[_vm._v("error")]),_vm._v(" "),_c('span',{staticClass:"md-subheading"},[_vm._v("Unable to connect to Winscope ADB proxy")]),_vm._v(" "),_c('div',{staticClass:"md-body-2"},[_c('p',[_vm._v("Launch the Winscope ADB Connect proxy to capture traces directly from your browser.")]),_vm._v(" "),_c('p',[_vm._v("Python 3.5+ and ADB is required.")]),_vm._v(" "),_c('p',[_vm._v("Run:")]),_vm._v(" "),_c('pre',[_vm._v("python3 $ANDROID_BUILD_TOP/development/tools/winscope/adb_proxy/winscope_proxy.py")]),_vm._v(" "),_c('p',[_vm._v("Or get it from the AOSP repository.")])]),_vm._v(" "),_c('div',{staticClass:"md-layout"},[_c('md-button',{staticClass:"md-accent",attrs:{"href":_vm.downloadProxyUrl},on:{"click":function($event){return _vm.buttonClicked("Download from AOSP")}}},[_vm._v("Download from AOSP")]),_vm._v(" "),_c('md-button',{staticClass:"md-accent",on:{"click":_vm.restart}},[_vm._v("Retry")])],1)],1):_vm._e(),_vm._v(" "),(_vm.status === _vm.STATES.INVALID_VERSION)?_c('md-card-content',[_c('md-icon',{staticClass:"md-accent"},[_vm._v("update")]),_vm._v(" "),_c('span',{staticClass:"md-subheading"},[_vm._v("The version of Winscope ADB Connect proxy running on your machine is incopatibile with Winscope.")]),_vm._v(" "),_c('div',{staticClass:"md-body-2"},[_c('p',[_vm._v("Please update the proxy to version "+_vm._s(_vm.WINSCOPE_PROXY_VERSION))]),_vm._v(" "),_c('p',[_vm._v("Run:")]),_vm._v(" "),_c('pre',[_vm._v("python3 $ANDROID_BUILD_TOP/development/tools/winscope/adb_proxy/winscope_proxy.py")]),_vm._v(" "),_c('p',[_vm._v("Or get it from the AOSP repository.")])]),_vm._v(" "),_c('div',{staticClass:"md-layout"},[_c('md-button',{staticClass:"md-accent",attrs:{"href":_vm.downloadProxyUrl}},[_vm._v("Download from AOSP")]),_vm._v(" "),_c('md-button',{staticClass:"md-accent",on:{"click":_vm.restart}},[_vm._v("Retry")])],1)],1):_vm._e(),_vm._v(" "),(_vm.status === _vm.STATES.UNAUTH)?_c('md-card-content',[_c('md-icon',{staticClass:"md-accent"},[_vm._v("lock")]),_vm._v(" "),_c('span',{staticClass:"md-subheading"},[_vm._v("Proxy authorisation required")]),_vm._v(" "),_c('md-field',[_c('label',[_vm._v("Enter Winscope proxy token")]),_vm._v(" "),_c('md-input',{model:{value:(_vm.adbStore.proxyKey),callback:function ($$v) {_vm.$set(_vm.adbStore, "proxyKey", $$v)},expression:"adbStore.proxyKey"}})],1),_vm._v(" "),_c('div',{staticClass:"md-body-2"},[_vm._v("The proxy token is printed to console on proxy launch, copy and paste it above.")]),_vm._v(" "),_c('div',{staticClass:"md-layout"},[_c('md-button',{staticClass:"md-primary",on:{"click":_vm.restart}},[_vm._v("Connect")])],1)],1):_vm._e(),_vm._v(" "),(_vm.status === _vm.STATES.DEVICES)?_c('md-card-content',[_c('div',{staticClass:"md-subheading"},[_vm._v(_vm._s(Object.keys(_vm.devices).length > 0 ? "Connected devices:" : "No devices detected"))]),_vm._v(" "),_c('md-list',_vm._l((_vm.devices),function(device,id){return _c('md-list-item',{key:id,attrs:{"disabled":!device.authorised},on:{"click":function($event){return _vm.selectDevice(id)}}},[_c('md-icon',[_vm._v(_vm._s(device.authorised ? "smartphone" : "screen_lock_portrait"))]),_vm._v(" "),_c('span',{staticClass:"md-list-item-text"},[_vm._v(_vm._s(device.authorised ? device.model : "unauthorised")+" ("+_vm._s(id)+")")])],1)}),1),_vm._v(" "),_c('md-progress-spinner',{attrs:{"md-size":30,"md-indeterminate":""}})],1):_vm._e(),_vm._v(" "),(_vm.status === _vm.STATES.START_TRACE)?_c('md-card-content',[_c('div',{staticClass:"device-choice"},[_c('md-list',[_c('md-list-item',[_c('md-icon',[_vm._v("smartphone")]),_vm._v(" "),_c('span',{staticClass:"md-list-item-text"},[_vm._v(_vm._s(_vm.devices[_vm.selectedDevice].model)+" ("+_vm._s(_vm.selectedDevice)+")")])],1)],1),_vm._v(" "),_c('md-button',{staticClass:"md-primary",on:{"click":_vm.resetLastDevice}},[_vm._v("Change device")])],1),_vm._v(" "),_c('div',{staticClass:"trace-section"},[_c('h3',[_vm._v("Trace targets:")]),_vm._v(" "),_c('div',{staticClass:"selection"},_vm._l((Object.keys(_vm.DYNAMIC_TRACES)),function(traceKey){return _c('md-checkbox',{key:traceKey,staticClass:"md-primary",model:{value:(_vm.adbStore[traceKey]),callback:function ($$v) {_vm.$set(_vm.adbStore, traceKey, $$v)},expression:"adbStore[traceKey]"}},[_vm._v(_vm._s(_vm.DYNAMIC_TRACES[traceKey].name))])}),1),_vm._v(" "),_c('div',{staticClass:"trace-config"},[_c('h4',[_vm._v("Surface Flinger config")]),_vm._v(" "),_c('div',{staticClass:"selection"},[_vm._l((_vm.TRACE_CONFIG['layers_trace']),function(config){return _c('md-checkbox',{key:config,staticClass:"md-primary",model:{value:(_vm.adbStore[config]),callback:function ($$v) {_vm.$set(_vm.adbStore, config, $$v)},expression:"adbStore[config]"}},[_vm._v(_vm._s(config))])}),_vm._v(" "),_c('div',{staticClass:"selection"},_vm._l((Object.keys(_vm.SF_SELECTED_CONFIG)),function(selectConfig){return _c('md-field',{key:selectConfig,staticClass:"config-selection"},[_c('md-select',{attrs:{"placeholder":selectConfig},model:{value:(_vm.SF_SELECTED_CONFIG_VALUES[selectConfig]),callback:function ($$v) {_vm.$set(_vm.SF_SELECTED_CONFIG_VALUES, selectConfig, $$v)},expression:"SF_SELECTED_CONFIG_VALUES[selectConfig]"}},[_c('md-option',{attrs:{"value":""}},[_vm._v(_vm._s(selectConfig))]),_vm._v(" "),_vm._l((_vm.SF_SELECTED_CONFIG[selectConfig]),function(option){return _c('md-option',{key:option,attrs:{"value":option}},[_vm._v(_vm._s(option))])})],2)],1)}),1)],2)]),_vm._v(" "),_c('div',{staticClass:"trace-config"},[_c('h4',[_vm._v("Window Manager config")]),_vm._v(" "),_c('div',{staticClass:"selection"},_vm._l((Object.keys(_vm.WM_SELECTED_CONFIG)),function(selectConfig){return _c('md-field',{key:selectConfig,staticClass:"config-selection"},[_c('md-select',{attrs:{"placeholder":selectConfig},model:{value:(_vm.WM_SELECTED_CONFIG_VALUES[selectConfig]),callback:function ($$v) {_vm.$set(_vm.WM_SELECTED_CONFIG_VALUES, selectConfig, $$v)},expression:"WM_SELECTED_CONFIG_VALUES[selectConfig]"}},[_c('md-option',{attrs:{"value":""}},[_vm._v(_vm._s(selectConfig))]),_vm._v(" "),_vm._l((_vm.WM_SELECTED_CONFIG[selectConfig]),function(option){return _c('md-option',{key:option,attrs:{"value":option}},[_vm._v(_vm._s(option))])})],2)],1)}),1)]),_vm._v(" "),_c('md-button',{staticClass:"md-primary trace-btn",on:{"click":_vm.startTrace}},[_vm._v("Start trace")])],1),_vm._v(" "),_c('div',{staticClass:"dump-section"},[_c('h3',[_vm._v("Dump targets:")]),_vm._v(" "),_c('div',{staticClass:"selection"},_vm._l((Object.keys(_vm.DUMPS)),function(dumpKey){return _c('md-checkbox',{key:dumpKey,staticClass:"md-primary",model:{value:(_vm.adbStore[dumpKey]),callback:function ($$v) {_vm.$set(_vm.adbStore, dumpKey, $$v)},expression:"adbStore[dumpKey]"}},[_vm._v(_vm._s(_vm.DUMPS[dumpKey].name))])}),1),_vm._v(" "),_c('div',{staticClass:"md-layout"},[_c('md-button',{staticClass:"md-primary dump-btn",on:{"click":_vm.dumpState}},[_vm._v("Dump state")])],1)])]):_vm._e(),_vm._v(" "),(_vm.status === _vm.STATES.ERROR)?_c('md-card-content',[_c('md-icon',{staticClass:"md-accent"},[_vm._v("error")]),_vm._v(" "),_c('span',{staticClass:"md-subheading"},[_vm._v("Error:")]),_vm._v(" "),_c('pre',[_vm._v("      "+_vm._s(_vm.errorText)+"\n    ")]),_vm._v(" "),_c('md-button',{staticClass:"md-primary",on:{"click":_vm.restart}},[_vm._v("Retry")])],1):_vm._e(),_vm._v(" "),(_vm.status === _vm.STATES.END_TRACE)?_c('md-card-content',[_c('span',{staticClass:"md-subheading"},[_vm._v("Tracing...")]),_vm._v(" "),_c('md-progress-bar',{attrs:{"md-mode":"indeterminate"}}),_vm._v(" "),_c('div',{staticClass:"md-layout"},[_c('md-button',{staticClass:"md-primary",on:{"click":_vm.endTrace}},[_vm._v("End trace")])],1)],1):_vm._e(),_vm._v(" "),(_vm.status === _vm.STATES.LOAD_DATA)?_c('md-card-content',[_c('span',{staticClass:"md-subheading"},[_vm._v("Loading data...")]),_vm._v(" "),_c('md-progress-bar',{attrs:{"md-mode":"determinate","md-value":_vm.loadProgress}})],1):_vm._e()],1)}
-var DataAdbvue_type_template_id_60fe90a6_scoped_true_staticRenderFns = []
+// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/DataAdb.vue?vue&type=template&id=62a1321f&scoped=true&
+var DataAdbvue_type_template_id_62a1321f_scoped_true_render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('flat-card',{staticStyle:{"min-width":"50em"}},[_c('md-card-header',[_c('div',{staticClass:"md-title"},[_vm._v("ADB Connect")])]),_vm._v(" "),(_vm.status === _vm.STATES.CONNECTING)?_c('md-card-content',[_c('md-progress-spinner',{attrs:{"md-indeterminate":""}})],1):_vm._e(),_vm._v(" "),(_vm.status === _vm.STATES.NO_PROXY)?_c('md-card-content',[_c('md-icon',{staticClass:"md-accent"},[_vm._v("error")]),_vm._v(" "),_c('span',{staticClass:"md-subheading"},[_vm._v("Unable to connect to Winscope ADB proxy")]),_vm._v(" "),_c('div',{staticClass:"md-body-2"},[_c('p',[_vm._v("Launch the Winscope ADB Connect proxy to capture traces directly from your browser.")]),_vm._v(" "),_c('p',[_vm._v("Python 3.5+ and ADB is required.")]),_vm._v(" "),_c('p',[_vm._v("Run:")]),_vm._v(" "),_c('pre',[_vm._v("python3 $ANDROID_BUILD_TOP/development/tools/winscope/adb_proxy/winscope_proxy.py")]),_vm._v(" "),_c('p',[_vm._v("Or get it from the AOSP repository.")])]),_vm._v(" "),_c('div',{staticClass:"md-layout"},[_c('md-button',{staticClass:"md-accent",attrs:{"href":_vm.downloadProxyUrl},on:{"click":function($event){return _vm.buttonClicked("Download from AOSP")}}},[_vm._v("Download from AOSP")]),_vm._v(" "),_c('md-button',{staticClass:"md-accent",on:{"click":_vm.restart}},[_vm._v("Retry")])],1)],1):_vm._e(),_vm._v(" "),(_vm.status === _vm.STATES.INVALID_VERSION)?_c('md-card-content',[_c('md-icon',{staticClass:"md-accent"},[_vm._v("update")]),_vm._v(" "),_c('span',{staticClass:"md-subheading"},[_vm._v("The version of Winscope ADB Connect proxy running on your machine is incopatibile with Winscope.")]),_vm._v(" "),_c('div',{staticClass:"md-body-2"},[_c('p',[_vm._v("Please update the proxy to version "+_vm._s(_vm.proxyClient.VERSION))]),_vm._v(" "),_c('p',[_vm._v("Run:")]),_vm._v(" "),_c('pre',[_vm._v("python3 $ANDROID_BUILD_TOP/development/tools/winscope/adb_proxy/winscope_proxy.py")]),_vm._v(" "),_c('p',[_vm._v("Or get it from the AOSP repository.")])]),_vm._v(" "),_c('div',{staticClass:"md-layout"},[_c('md-button',{staticClass:"md-accent",attrs:{"href":_vm.downloadProxyUrl}},[_vm._v("Download from AOSP")]),_vm._v(" "),_c('md-button',{staticClass:"md-accent",on:{"click":_vm.restart}},[_vm._v("Retry")])],1)],1):_vm._e(),_vm._v(" "),(_vm.status === _vm.STATES.UNAUTH)?_c('md-card-content',[_c('md-icon',{staticClass:"md-accent"},[_vm._v("lock")]),_vm._v(" "),_c('span',{staticClass:"md-subheading"},[_vm._v("Proxy authorisation required")]),_vm._v(" "),_c('md-field',[_c('label',[_vm._v("Enter Winscope proxy token")]),_vm._v(" "),_c('md-input',{model:{value:(_vm.proxyClient.store.proxyKey),callback:function ($$v) {_vm.$set(_vm.proxyClient.store, "proxyKey", $$v)},expression:"proxyClient.store.proxyKey"}})],1),_vm._v(" "),_c('div',{staticClass:"md-body-2"},[_vm._v("The proxy token is printed to console on proxy launch, copy and paste it above.")]),_vm._v(" "),_c('div',{staticClass:"md-layout"},[_c('md-button',{staticClass:"md-primary",on:{"click":_vm.restart}},[_vm._v("Connect")])],1)],1):_vm._e(),_vm._v(" "),(_vm.status === _vm.STATES.DEVICES)?_c('md-card-content',[_c('div',{staticClass:"md-subheading"},[_vm._v(_vm._s(Object.keys(_vm.proxyClient.devices).length > 0 ? "Connected devices:" : "No devices detected"))]),_vm._v(" "),_c('md-list',_vm._l((_vm.proxyClient.devices),function(device,id){return _c('md-list-item',{key:id,attrs:{"disabled":!device.authorised},on:{"click":function($event){return _vm.proxyClient.selectDevice(id)}}},[_c('md-icon',[_vm._v(_vm._s(device.authorised ? "smartphone" : "screen_lock_portrait"))]),_vm._v(" "),_c('span',{staticClass:"md-list-item-text"},[_vm._v(_vm._s(device.authorised ? device.model : "unauthorised")+" ("+_vm._s(id)+")")])],1)}),1),_vm._v(" "),_c('md-progress-spinner',{attrs:{"md-size":30,"md-indeterminate":""}})],1):_vm._e(),_vm._v(" "),(_vm.status === _vm.STATES.START_TRACE)?_c('md-card-content',[_c('div',{staticClass:"device-choice"},[_c('md-list',[_c('md-list-item',[_c('md-icon',[_vm._v("smartphone")]),_vm._v(" "),_c('span',{staticClass:"md-list-item-text"},[_vm._v(_vm._s(_vm.proxyClient.devices[_vm.proxyClient.selectedDevice].model)+" ("+_vm._s(_vm.proxyClient.selectedDevice)+")")])],1)],1),_vm._v(" "),_c('md-button',{staticClass:"md-primary",on:{"click":_vm.resetLastDevice}},[_vm._v("Change device")])],1),_vm._v(" "),_c('div',{staticClass:"trace-section"},[_c('h3',[_vm._v("Trace targets:")]),_vm._v(" "),_c('div',{staticClass:"selection"},_vm._l((Object.keys(_vm.DYNAMIC_TRACES)),function(traceKey){return _c('md-checkbox',{key:traceKey,staticClass:"md-primary",model:{value:(_vm.traceStore[traceKey]),callback:function ($$v) {_vm.$set(_vm.traceStore, traceKey, $$v)},expression:"traceStore[traceKey]"}},[_vm._v(_vm._s(_vm.DYNAMIC_TRACES[traceKey].name))])}),1),_vm._v(" "),_c('div',{staticClass:"trace-config"},[_c('h4',[_vm._v("Surface Flinger config")]),_vm._v(" "),_c('div',{staticClass:"selection"},[_vm._l((_vm.TRACE_CONFIG['layers_trace']),function(config){return _c('md-checkbox',{key:config,staticClass:"md-primary",model:{value:(_vm.traceStore[config]),callback:function ($$v) {_vm.$set(_vm.traceStore, config, $$v)},expression:"traceStore[config]"}},[_vm._v(_vm._s(config))])}),_vm._v(" "),_c('div',{staticClass:"selection"},_vm._l((Object.keys(_vm.SF_SELECTED_CONFIG)),function(selectConfig){return _c('md-field',{key:selectConfig,staticClass:"config-selection"},[_c('md-select',{attrs:{"placeholder":selectConfig},model:{value:(_vm.SF_SELECTED_CONFIG_VALUES[selectConfig]),callback:function ($$v) {_vm.$set(_vm.SF_SELECTED_CONFIG_VALUES, selectConfig, $$v)},expression:"SF_SELECTED_CONFIG_VALUES[selectConfig]"}},[_c('md-option',{attrs:{"value":""}},[_vm._v(_vm._s(selectConfig))]),_vm._v(" "),_vm._l((_vm.SF_SELECTED_CONFIG[selectConfig]),function(option){return _c('md-option',{key:option,attrs:{"value":option}},[_vm._v(_vm._s(option))])})],2)],1)}),1)],2)]),_vm._v(" "),_c('div',{staticClass:"trace-config"},[_c('h4',[_vm._v("Window Manager config")]),_vm._v(" "),_c('div',{staticClass:"selection"},_vm._l((Object.keys(_vm.WM_SELECTED_CONFIG)),function(selectConfig){return _c('md-field',{key:selectConfig,staticClass:"config-selection"},[_c('md-select',{attrs:{"placeholder":selectConfig},model:{value:(_vm.WM_SELECTED_CONFIG_VALUES[selectConfig]),callback:function ($$v) {_vm.$set(_vm.WM_SELECTED_CONFIG_VALUES, selectConfig, $$v)},expression:"WM_SELECTED_CONFIG_VALUES[selectConfig]"}},[_c('md-option',{attrs:{"value":""}},[_vm._v(_vm._s(selectConfig))]),_vm._v(" "),_vm._l((_vm.WM_SELECTED_CONFIG[selectConfig]),function(option){return _c('md-option',{key:option,attrs:{"value":option}},[_vm._v(_vm._s(option))])})],2)],1)}),1)]),_vm._v(" "),_c('md-button',{staticClass:"md-primary trace-btn",on:{"click":_vm.startTrace}},[_vm._v("Start trace")])],1),_vm._v(" "),_c('div',{staticClass:"dump-section"},[_c('h3',[_vm._v("Dump targets:")]),_vm._v(" "),_c('div',{staticClass:"selection"},_vm._l((Object.keys(_vm.DUMPS)),function(dumpKey){return _c('md-checkbox',{key:dumpKey,staticClass:"md-primary",model:{value:(_vm.traceStore[dumpKey]),callback:function ($$v) {_vm.$set(_vm.traceStore, dumpKey, $$v)},expression:"traceStore[dumpKey]"}},[_vm._v(_vm._s(_vm.DUMPS[dumpKey].name))])}),1),_vm._v(" "),_c('div',{staticClass:"md-layout"},[_c('md-button',{staticClass:"md-primary dump-btn",on:{"click":_vm.dumpState}},[_vm._v("Dump state")])],1)])]):_vm._e(),_vm._v(" "),(_vm.status === _vm.STATES.ERROR)?_c('md-card-content',[_c('md-icon',{staticClass:"md-accent"},[_vm._v("error")]),_vm._v(" "),_c('span',{staticClass:"md-subheading"},[_vm._v("Error:")]),_vm._v(" "),_c('pre',[_vm._v("      "+_vm._s(_vm.errorText)+"\n    ")]),_vm._v(" "),_c('md-button',{staticClass:"md-primary",on:{"click":_vm.restart}},[_vm._v("Retry")])],1):_vm._e(),_vm._v(" "),(_vm.status === _vm.STATES.END_TRACE)?_c('md-card-content',[_c('span',{staticClass:"md-subheading"},[_vm._v("Tracing...")]),_vm._v(" "),_c('md-progress-bar',{attrs:{"md-mode":"indeterminate"}}),_vm._v(" "),_c('div',{staticClass:"md-layout"},[_c('md-button',{staticClass:"md-primary",on:{"click":_vm.endTrace}},[_vm._v("End trace")])],1)],1):_vm._e(),_vm._v(" "),(_vm.status === _vm.STATES.LOAD_DATA)?_c('md-card-content',[_c('span',{staticClass:"md-subheading"},[_vm._v("Loading data...")]),_vm._v(" "),_c('md-progress-bar',{attrs:{"md-mode":"determinate","md-value":_vm.loadProgress}})],1):_vm._e()],1)}
+var DataAdbvue_type_template_id_62a1321f_scoped_true_staticRenderFns = []
 
 
-// CONCATENATED MODULE: ./src/DataAdb.vue?vue&type=template&id=60fe90a6&scoped=true&
+// CONCATENATED MODULE: ./src/DataAdb.vue?vue&type=template&id=62a1321f&scoped=true&
+
+// CONCATENATED MODULE: ./src/proxyclient/ProxyClient.ts
+/*
+ * Copyright 2022, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+var ProxyState;
+(function (ProxyState) {
+    ProxyState[ProxyState["ERROR"] = 0] = "ERROR";
+    ProxyState[ProxyState["CONNECTING"] = 1] = "CONNECTING";
+    ProxyState[ProxyState["NO_PROXY"] = 2] = "NO_PROXY";
+    ProxyState[ProxyState["INVALID_VERSION"] = 3] = "INVALID_VERSION";
+    ProxyState[ProxyState["UNAUTH"] = 4] = "UNAUTH";
+    ProxyState[ProxyState["DEVICES"] = 5] = "DEVICES";
+    ProxyState[ProxyState["START_TRACE"] = 6] = "START_TRACE";
+    ProxyState[ProxyState["END_TRACE"] = 7] = "END_TRACE";
+    ProxyState[ProxyState["LOAD_DATA"] = 8] = "LOAD_DATA";
+})(ProxyState || (ProxyState = {}));
+;
+var ProxyEndpoint;
+(function (ProxyEndpoint) {
+    ProxyEndpoint["DEVICES"] = "/devices/";
+    ProxyEndpoint["START_TRACE"] = "/start/";
+    ProxyEndpoint["END_TRACE"] = "/end/";
+    ProxyEndpoint["CONFIG_TRACE"] = "/configtrace/";
+    ProxyEndpoint["SELECTED_WM_CONFIG_TRACE"] = "/selectedwmconfigtrace/";
+    ProxyEndpoint["SELECTED_SF_CONFIG_TRACE"] = "/selectedsfconfigtrace/";
+    ProxyEndpoint["DUMP"] = "/dump/";
+    ProxyEndpoint["FETCH"] = "/fetch/";
+    ProxyEndpoint["STATUS"] = "/status/";
+    ProxyEndpoint["CHECK_WAYLAND"] = "/checkwayland/";
+})(ProxyEndpoint || (ProxyEndpoint = {}));
+;
+var proxyFileTypeAdapter = {
+    'window_trace': FILE_TYPES.WINDOW_MANAGER_TRACE,
+    'accessibility_trace': FILE_TYPES.ACCESSIBILITY_TRACE,
+    'layers_trace': FILE_TYPES.SURFACE_FLINGER_TRACE,
+    'wl_trace': FILE_TYPES.WAYLAND_TRACE,
+    'layers_dump': FILE_TYPES.SURFACE_FLINGER_DUMP,
+    'window_dump': FILE_TYPES.WINDOW_MANAGER_DUMP,
+    'wl_dump': FILE_TYPES.WAYLAND_DUMP,
+    'screen_recording': FILE_TYPES.SCREEN_RECORDING,
+    'transactions': FILE_TYPES.TRANSACTIONS_TRACE,
+    'transactions_legacy': FILE_TYPES.TRANSACTIONS_TRACE_LEGACY,
+    'proto_log': FILE_TYPES.PROTO_LOG,
+    'system_ui_trace': FILE_TYPES.SYSTEM_UI,
+    'launcher_trace': FILE_TYPES.LAUNCHER,
+    'ime_trace_clients': FILE_TYPES.IME_TRACE_CLIENTS,
+    'ime_trace_service': FILE_TYPES.IME_TRACE_SERVICE,
+    'ime_trace_managerservice': FILE_TYPES.IME_TRACE_MANAGERSERVICE,
+};
+var ProxyClient_ProxyClient = /** @class */ (function () {
+    function ProxyClient() {
+        this.WINSCOPE_PROXY_URL = 'http://localhost:5544';
+        this.VERSION = '0.8';
+        this.store = localstore('adb', {
+            proxyKey: '',
+            lastDevice: ''
+        });
+        this.state = ProxyState.CONNECTING;
+        this.stateChangeListeners = [];
+        this.refresh_worker = null;
+        this.devices = {};
+        this.selectedDevice = "";
+        this.errorText = "";
+    }
+    ProxyClient.prototype.call = function (method, path, view, onSuccess, type, jsonRequest) {
+        if (type === void 0) { type = null; }
+        if (jsonRequest === void 0) { jsonRequest = null; }
+        var request = new XMLHttpRequest();
+        var client = this;
+        request.onreadystatechange = function () {
+            if (this.readyState !== 4) {
+                return;
+            }
+            if (this.status === 0) {
+                client.setState(ProxyState.NO_PROXY);
+            }
+            else if (this.status === 200) {
+                if (this.getResponseHeader('Winscope-Proxy-Version') !== client.VERSION) {
+                    client.setState(ProxyState.INVALID_VERSION);
+                }
+                else if (onSuccess) {
+                    onSuccess(this, view);
+                }
+            }
+            else if (this.status === 403) {
+                client.setState(ProxyState.UNAUTH);
+            }
+            else {
+                if (this.responseType === 'text' || !this.responseType) {
+                    client.errorText = this.responseText;
+                }
+                else if (this.responseType === 'arraybuffer') {
+                    client.errorText = String.fromCharCode.apply(null, new Uint8Array(this.response));
+                }
+                client.setState(ProxyState.ERROR);
+            }
+        };
+        request.responseType = type || "";
+        request.open(method, client.WINSCOPE_PROXY_URL + path);
+        request.setRequestHeader('Winscope-Token', client.store.proxyKey);
+        if (jsonRequest) {
+            var json = JSON.stringify(jsonRequest);
+            request.setRequestHeader('Content-Type', 'application/json;charset=UTF-8');
+            request.send(json);
+        }
+        else {
+            request.send();
+        }
+    };
+    ProxyClient.prototype.setState = function (state, errorText) {
+        if (errorText === void 0) { errorText = ""; }
+        this.state = state;
+        this.errorText = errorText;
+        for (var _i = 0, _a = this.stateChangeListeners; _i < _a.length; _i++) {
+            var listener = _a[_i];
+            listener(state, errorText);
+        }
+    };
+    ProxyClient.prototype.onStateChange = function (fn) {
+        this.removeOnStateChange(fn);
+        this.stateChangeListeners.push(fn);
+    };
+    ProxyClient.prototype.removeOnStateChange = function (removeFn) {
+        this.stateChangeListeners = this.stateChangeListeners.filter(function (fn) { return fn !== removeFn; });
+    };
+    ProxyClient.prototype.getDevices = function () {
+        if (this.state !== ProxyState.DEVICES && this.state !== ProxyState.CONNECTING) {
+            clearInterval(this.refresh_worker);
+            this.refresh_worker = null;
+            return;
+        }
+        var client = this;
+        this.call('GET', ProxyEndpoint.DEVICES, this, function (request, view) {
+            try {
+                client.devices = JSON.parse(request.responseText);
+                if (client.store.lastDevice && client.devices[client.store.lastDevice] &&
+                    client.devices[client.store.lastDevice].authorised) {
+                    client.selectDevice(client.store.lastDevice);
+                }
+                else {
+                    if (client.refresh_worker === null) {
+                        client.refresh_worker = setInterval(client.getDevices, 1000);
+                    }
+                    client.setState(ProxyState.DEVICES);
+                }
+            }
+            catch (err) {
+                console.error(err);
+                client.errorText = request.responseText;
+                client.setState(ProxyState.ERROR);
+            }
+        });
+    };
+    ProxyClient.prototype.selectDevice = function (device_id) {
+        this.selectedDevice = device_id;
+        this.store.lastDevice = device_id;
+        this.setState(ProxyState.START_TRACE);
+    };
+    ProxyClient.prototype.deviceId = function () {
+        return this.selectedDevice;
+    };
+    ProxyClient.prototype.resetLastDevice = function () {
+        this.store.lastDevice = '';
+    };
+    ProxyClient.prototype.loadFile = function (files, idx, traceType, view) {
+        var client = this;
+        this.call('GET', "".concat(ProxyEndpoint.FETCH).concat(proxyClient.deviceId(), "/").concat(files[idx], "/"), view, function (request, view) {
+            try {
+                var enc = new TextDecoder('utf-8');
+                var resp = enc.decode(request.response);
+                var filesByType = JSON.parse(resp);
+                for (var filetype in filesByType) {
+                    if (filesByType.hasOwnProperty(filetype)) {
+                        var files_2 = filesByType[filetype];
+                        var fileDecoder = FILE_DECODERS[proxyFileTypeAdapter[filetype]];
+                        for (var _i = 0, files_1 = files_2; _i < files_1.length; _i++) {
+                            var encodedFileBuffer = files_1[_i];
+                            var buffer = Uint8Array.from(atob(encodedFileBuffer), function (c) { return c.charCodeAt(0); });
+                            var data = fileDecoder.decoder(buffer, fileDecoder.decoderParams, fileDecoder.name, view.store);
+                            view.dataFiles.push(data);
+                            view.loadProgress = 100 * (idx + 1) / files_2.length; // TODO: Update this
+                        }
+                    }
+                }
+                if (idx < files.length - 1) {
+                    client.loadFile(files, idx + 1, traceType, view);
+                }
+                else {
+                    var currentDate = new Date().toISOString();
+                    view.$emit('dataReady', "winscope-".concat(traceType, "-").concat(currentDate), view.dataFiles);
+                }
+            }
+            catch (err) {
+                console.error(err);
+                client.setState(ProxyState.ERROR, err);
+            }
+        }, 'arraybuffer');
+    };
+    return ProxyClient;
+}());
+var proxyClient = new ProxyClient_ProxyClient();
 
 // CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./src/DataAdb.vue?vue&type=script&lang=js&
-function DataAdbvue_type_script_lang_js_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = DataAdbvue_type_script_lang_js_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
-
-function DataAdbvue_type_script_lang_js_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return DataAdbvue_type_script_lang_js_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return DataAdbvue_type_script_lang_js_arrayLikeToArray(o, minLen); }
-
-function DataAdbvue_type_script_lang_js_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
-
 //
 //
 //
@@ -163779,32 +164783,7 @@
 //
 
 
-
-var STATES = {
-  ERROR: 0,
-  CONNECTING: 1,
-  NO_PROXY: 2,
-  INVALID_VERSION: 3,
-  UNAUTH: 4,
-  DEVICES: 5,
-  START_TRACE: 6,
-  END_TRACE: 7,
-  LOAD_DATA: 8
-};
-var WINSCOPE_PROXY_VERSION = '0.8';
-var WINSCOPE_PROXY_URL = 'http://localhost:5544';
-var PROXY_ENDPOINTS = {
-  DEVICES: '/devices/',
-  START_TRACE: '/start/',
-  END_TRACE: '/end/',
-  CONFIG_TRACE: '/configtrace/',
-  SELECTED_WM_CONFIG_TRACE: '/selectedwmconfigtrace/',
-  SELECTED_SF_CONFIG_TRACE: '/selectedsfconfigtrace/',
-  DUMP: '/dump/',
-  FETCH: '/fetch/',
-  STATUS: '/status/',
-  CHECK_WAYLAND: '/checkwayland/'
-}; // trace options should be added in a nested category
+ // trace options should be added in a nested category
 
 var TRACES = {
   'default': {
@@ -163861,32 +164840,18 @@
     name: 'Surface Flinger'
   }
 };
-var proxyFileTypeAdapter = {
-  'window_trace': FILE_TYPES.WINDOW_MANAGER_TRACE,
-  'accessibility_trace': FILE_TYPES.ACCESSIBILITY_TRACE,
-  'layers_trace': FILE_TYPES.SURFACE_FLINGER_TRACE,
-  'wl_trace': FILE_TYPES.WAYLAND_TRACE,
-  'layers_dump': FILE_TYPES.SURFACE_FLINGER_DUMP,
-  'window_dump': FILE_TYPES.WINDOW_MANAGER_DUMP,
-  'wl_dump': FILE_TYPES.WAYLAND_DUMP,
-  'screen_recording': FILE_TYPES.SCREEN_RECORDING,
-  'transactions': FILE_TYPES.TRANSACTIONS_TRACE,
-  'transactions_legacy': FILE_TYPES.TRANSACTIONS_TRACE_LEGACY,
-  'proto_log': FILE_TYPES.PROTO_LOG,
-  'system_ui_trace': FILE_TYPES.SYSTEM_UI,
-  'launcher_trace': FILE_TYPES.LAUNCHER,
-  'ime_trace_clients': FILE_TYPES.IME_TRACE_CLIENTS,
-  'ime_trace_service': FILE_TYPES.IME_TRACE_SERVICE,
-  'ime_trace_managerservice': FILE_TYPES.IME_TRACE_MANAGERSERVICE
-};
 var CONFIGS = Object.keys(TRACE_CONFIG).flatMap(function (file) {
   return TRACE_CONFIG[file];
 });
 /* harmony default export */ var DataAdbvue_type_script_lang_js_ = ({
   name: 'dataadb',
   data: function data() {
+    var _this = this;
+
     return {
-      STATES: STATES,
+      proxyClient: proxyClient,
+      ProxyState: ProxyState,
+      STATES: ProxyState,
       TRACES: TRACES,
       DYNAMIC_TRACES: TRACES['default'],
       TRACE_CONFIG: TRACE_CONFIG,
@@ -163895,24 +164860,20 @@
       SF_SELECTED_CONFIG_VALUES: {},
       WM_SELECTED_CONFIG_VALUES: {},
       DUMPS: DUMPS,
-      FILE_DECODERS: FILE_DECODERS,
-      WINSCOPE_PROXY_VERSION: WINSCOPE_PROXY_VERSION,
-      status: STATES.CONNECTING,
+      status: ProxyState.CONNECTING,
       dataFiles: [],
-      devices: {},
-      selectedDevice: '',
-      refresh_worker: null,
       keep_alive_worker: null,
       errorText: '',
       loadProgress: 0,
-      adbStore: localstore('adb', Object.assign({
-        proxyKey: '',
-        lastDevice: ''
-      }, this.getAllTraceKeys(TRACES).concat(Object.keys(DUMPS)).concat(CONFIGS).reduce(function (obj, key) {
+      traceStore: localstore('trace', Object.assign(this.getAllTraceKeys(TRACES).concat(Object.keys(DUMPS)).concat(CONFIGS).reduce(function (obj, key) {
         obj[key] = true;
         return obj;
       }, {}))),
-      downloadProxyUrl: 'https://android.googlesource.com/platform/development/+/master/tools/winscope/adb_proxy/winscope_proxy.py'
+      downloadProxyUrl: 'https://android.googlesource.com/platform/development/+/master/tools/winscope/adb_proxy/winscope_proxy.py',
+      onStateChangeFn: function onStateChangeFn(newState, errorText) {
+        _this.status = newState;
+        _this.errorText = errorText;
+      }
     };
   },
   props: ['store'],
@@ -163920,33 +164881,6 @@
     'flat-card': FlatCard
   },
   methods: {
-    getDevices: function getDevices() {
-      if (this.status !== STATES.DEVICES && this.status !== STATES.CONNECTING) {
-        clearInterval(this.refresh_worker);
-        this.refresh_worker = null;
-        return;
-      }
-
-      this.callProxy('GET', PROXY_ENDPOINTS.DEVICES, this, function (request, view) {
-        try {
-          view.devices = JSON.parse(request.responseText);
-
-          if (view.adbStore.lastDevice && view.devices[view.adbStore.lastDevice] && view.devices[view.adbStore.lastDevice].authorised) {
-            view.selectDevice(view.adbStore.lastDevice);
-          } else {
-            if (view.refresh_worker === null) {
-              view.refresh_worker = setInterval(view.getDevices, 1000);
-            }
-
-            view.status = STATES.DEVICES;
-          }
-        } catch (err) {
-          console.error(err);
-          view.errorText = request.responseText;
-          view.status = STATES.ERROR;
-        }
-      });
-    },
     getAllTraceKeys: function getAllTraceKeys(traces) {
       var keys = [];
 
@@ -163960,15 +164894,14 @@
     },
     setAvailableTraces: function setAvailableTraces() {
       this.DYNAMIC_TRACES = this.TRACES['default'];
-      this.callProxy('GET', PROXY_ENDPOINTS.CHECK_WAYLAND, this, function (request, view) {
+      proxyClient.call('GET', ProxyEndpoint.CHECK_WAYLAND, this, function (request, view) {
         try {
           if (request.responseText == 'true') {
             view.appendOptionalTraces('arc');
           }
         } catch (err) {
           console.error(err);
-          view.errorText = request.responseText;
-          view.status = STATES.ERROR;
+          proxyClient.setState(ProxyState.ERROR, request.responseText);
         }
       });
     },
@@ -163978,13 +164911,13 @@
       }
     },
     keepAliveTrace: function keepAliveTrace() {
-      if (this.status !== STATES.END_TRACE) {
+      if (this.status !== ProxyState.END_TRACE) {
         clearInterval(this.keep_alive_worker);
         this.keep_alive_worker = null;
         return;
       }
 
-      this.callProxy('GET', "".concat(PROXY_ENDPOINTS.STATUS).concat(this.deviceId(), "/"), this, function (request, view) {
+      proxyClient.call('GET', "".concat(ProxyEndpoint.STATUS).concat(proxyClient.deviceId(), "/"), this, function (request, view) {
         if (request.responseText !== 'True') {
           view.endTrace();
         } else if (view.keep_alive_worker === null) {
@@ -163999,18 +164932,17 @@
       var requestedSelectedWmConfig = this.toSelectedWmTraceConfig();
 
       if (requested.length < 1) {
-        this.errorText = 'No targets selected';
-        this.status = STATES.ERROR;
+        proxyClient.setState(ProxyState.ERROR, 'No targets selected');
         this.recordNewEvent("No targets selected");
         return;
       }
 
       this.recordNewEvent("Start Trace");
-      this.callProxy('POST', "".concat(PROXY_ENDPOINTS.CONFIG_TRACE).concat(this.deviceId(), "/"), this, null, null, requestedConfig);
-      this.callProxy('POST', "".concat(PROXY_ENDPOINTS.SELECTED_SF_CONFIG_TRACE).concat(this.deviceId(), "/"), this, null, null, requestedSelectedSfConfig);
-      this.callProxy('POST', "".concat(PROXY_ENDPOINTS.SELECTED_WM_CONFIG_TRACE).concat(this.deviceId(), "/"), this, null, null, requestedSelectedWmConfig);
-      this.status = STATES.END_TRACE;
-      this.callProxy('POST', "".concat(PROXY_ENDPOINTS.START_TRACE).concat(this.deviceId(), "/"), this, function (request, view) {
+      proxyClient.call('POST', "".concat(ProxyEndpoint.CONFIG_TRACE).concat(proxyClient.deviceId(), "/"), this, null, null, requestedConfig);
+      proxyClient.call('POST', "".concat(ProxyEndpoint.SELECTED_SF_CONFIG_TRACE).concat(proxyClient.deviceId(), "/"), this, null, null, requestedSelectedSfConfig);
+      proxyClient.call('POST', "".concat(ProxyEndpoint.SELECTED_WM_CONFIG_TRACE).concat(proxyClient.deviceId(), "/"), this, null, null, requestedSelectedWmConfig);
+      proxyClient.setState(ProxyState.END_TRACE);
+      proxyClient.call('POST', "".concat(ProxyEndpoint.START_TRACE).concat(proxyClient.deviceId(), "/"), this, function (request, view) {
         view.keepAliveTrace();
       }, null, requested);
     },
@@ -164019,86 +164951,39 @@
       var requested = this.toDump();
 
       if (requested.length < 1) {
-        this.errorText = 'No targets selected';
-        this.status = STATES.ERROR;
+        proxyClient.setState(ProxyState.ERROR, 'No targets selected');
         this.recordNewEvent("No targets selected");
         return;
       }
 
-      this.status = STATES.LOAD_DATA;
-      this.callProxy('POST', "".concat(PROXY_ENDPOINTS.DUMP).concat(this.deviceId(), "/"), this, function (request, view) {
-        view.loadFile(requested, 0, "dump");
+      proxyClient.setState(ProxyState.LOAD_DATA);
+      proxyClient.call('POST', "".concat(ProxyEndpoint.DUMP).concat(proxyClient.deviceId(), "/"), this, function (request, view) {
+        proxyClient.loadFile(requested, 0, "dump", view);
       }, null, requested);
     },
     endTrace: function endTrace() {
-      this.status = STATES.LOAD_DATA;
-      this.callProxy('POST', "".concat(PROXY_ENDPOINTS.END_TRACE).concat(this.deviceId(), "/"), this, function (request, view) {
-        view.loadFile(view.toTrace(), 0, "trace");
+      proxyClient.setState(ProxyState.LOAD_DATA);
+      proxyClient.call('POST', "".concat(ProxyEndpoint.END_TRACE).concat(proxyClient.deviceId(), "/"), this, function (request, view) {
+        proxyClient.loadFile(view.toTrace(), 0, "trace", view);
       });
       this.recordNewEvent("Ended Trace");
     },
-    loadFile: function loadFile(files, idx, traceType) {
-      this.callProxy('GET', "".concat(PROXY_ENDPOINTS.FETCH).concat(this.deviceId(), "/").concat(files[idx], "/"), this, function (request, view) {
-        try {
-          var enc = new TextDecoder('utf-8');
-          var resp = enc.decode(request.response);
-          var filesByType = JSON.parse(resp);
-
-          for (var filetype in filesByType) {
-            if (filesByType.hasOwnProperty(filetype)) {
-              var _files = filesByType[filetype];
-              var fileDecoder = FILE_DECODERS[proxyFileTypeAdapter[filetype]];
-
-              var _iterator = DataAdbvue_type_script_lang_js_createForOfIteratorHelper(_files),
-                  _step;
-
-              try {
-                for (_iterator.s(); !(_step = _iterator.n()).done;) {
-                  var encodedFileBuffer = _step.value;
-                  var buffer = Uint8Array.from(atob(encodedFileBuffer), function (c) {
-                    return c.charCodeAt(0);
-                  });
-                  var data = fileDecoder.decoder(buffer, fileDecoder.decoderParams, fileDecoder.name, view.store);
-                  view.dataFiles.push(data);
-                  view.loadProgress = 100 * (idx + 1) / _files.length; // TODO: Update this
-                }
-              } catch (err) {
-                _iterator.e(err);
-              } finally {
-                _iterator.f();
-              }
-            }
-          }
-
-          if (idx < files.length - 1) {
-            view.loadFile(files, idx + 1, traceType);
-          } else {
-            var currentDate = new Date().toISOString();
-            view.$emit('dataReady', "winscope-".concat(traceType, "-").concat(currentDate), view.dataFiles);
-          }
-        } catch (err) {
-          console.error(err);
-          view.errorText = err;
-          view.status = STATES.ERROR;
-        }
-      }, 'arraybuffer');
-    },
     toTrace: function toTrace() {
-      var _this = this;
+      var _this2 = this;
 
       return Object.keys(this.DYNAMIC_TRACES).filter(function (traceKey) {
-        return _this.adbStore[traceKey];
+        return _this2.traceStore[traceKey];
       });
     },
     toTraceConfig: function toTraceConfig() {
-      var _this2 = this;
+      var _this3 = this;
 
       return Object.keys(TRACE_CONFIG).filter(function (file) {
-        return _this2.adbStore[file];
+        return _this3.traceStore[file];
       }).flatMap(function (file) {
         return TRACE_CONFIG[file];
       }).filter(function (config) {
-        return _this2.adbStore[config];
+        return _this3.traceStore[config];
       });
     },
     toSelectedSfTraceConfig: function toSelectedSfTraceConfig() {
@@ -164124,89 +165009,44 @@
       return requestedSelectedConfig;
     },
     toDump: function toDump() {
-      var _this3 = this;
+      var _this4 = this;
 
       return Object.keys(DUMPS).filter(function (dumpKey) {
-        return _this3.adbStore[dumpKey];
+        return _this4.traceStore[dumpKey];
       });
     },
-    selectDevice: function selectDevice(device_id) {
-      this.selectedDevice = device_id;
-      this.adbStore.lastDevice = device_id;
-      this.status = STATES.START_TRACE;
-    },
-    deviceId: function deviceId() {
-      return this.selectedDevice;
-    },
     restart: function restart() {
       this.recordButtonClickedEvent("Connect / Retry");
-      this.status = STATES.CONNECTING;
+      proxyClient.setState(ProxyState.CONNECTING);
     },
     resetLastDevice: function resetLastDevice() {
       this.recordButtonClickedEvent("Change Device");
-      this.adbStore.lastDevice = '';
+      this.proxyClient.resetLastDevice();
       this.restart();
-    },
-    callProxy: function callProxy(method, path, view, onSuccess, type, jsonRequest) {
-      var request = new XMLHttpRequest();
-      var view = this;
-
-      request.onreadystatechange = function () {
-        if (this.readyState !== 4) {
-          return;
-        }
-
-        if (this.status === 0) {
-          view.status = STATES.NO_PROXY;
-        } else if (this.status === 200) {
-          if (this.getResponseHeader('Winscope-Proxy-Version') !== WINSCOPE_PROXY_VERSION) {
-            view.status = STATES.INVALID_VERSION;
-          } else if (onSuccess) {
-            onSuccess(this, view);
-          }
-        } else if (this.status === 403) {
-          view.status = STATES.UNAUTH;
-        } else {
-          if (this.responseType === 'text' || !this.responseType) {
-            view.errorText = this.responseText;
-          } else if (this.responseType === 'arraybuffer') {
-            view.errorText = String.fromCharCode.apply(null, new Uint8Array(this.response));
-          }
-
-          view.status = STATES.ERROR;
-        }
-      };
-
-      request.responseType = type || '';
-      request.open(method, WINSCOPE_PROXY_URL + path);
-      request.setRequestHeader('Winscope-Token', this.adbStore.proxyKey);
-
-      if (jsonRequest) {
-        var json = JSON.stringify(jsonRequest);
-        request.setRequestHeader('Content-Type', 'application/json;charset=UTF-8');
-        request.send(json);
-      } else {
-        request.send();
-      }
     }
   },
   created: function created() {
+    proxyClient.setState(ProxyState.CONNECTING);
+    this.proxyClient.onStateChange(this.onStateChangeFn);
     var urlParams = new URLSearchParams(window.location.search);
 
     if (urlParams.has('token')) {
-      this.adbStore.proxyKey = urlParams.get('token');
+      this.proxyClient.proxyKey = urlParams.get('token');
     }
 
-    this.getDevices();
+    this.proxyClient.getDevices();
+  },
+  beforeDestroy: function beforeDestroy() {
+    this.proxyClient.removeOnStateChange(this.onStateChangeFn);
   },
   watch: {
     status: {
       handler: function handler(st) {
-        if (st == STATES.CONNECTING) {
-          this.getDevices();
+        if (st == ProxyState.CONNECTING) {
+          this.proxyClient.getDevices();
         }
 
-        if (st == STATES.START_TRACE) {
+        if (st == ProxyState.START_TRACE) {
           this.setAvailableTraces();
         }
       }
@@ -164215,8 +165055,8 @@
 });
 // CONCATENATED MODULE: ./src/DataAdb.vue?vue&type=script&lang=js&
  /* harmony default export */ var src_DataAdbvue_type_script_lang_js_ = (DataAdbvue_type_script_lang_js_); 
-// EXTERNAL MODULE: ./src/DataAdb.vue?vue&type=style&index=0&id=60fe90a6&scoped=true&lang=css&
-var DataAdbvue_type_style_index_0_id_60fe90a6_scoped_true_lang_css_ = __webpack_require__("qM6R");
+// EXTERNAL MODULE: ./src/DataAdb.vue?vue&type=style&index=0&id=62a1321f&scoped=true&lang=css&
+var DataAdbvue_type_style_index_0_id_62a1321f_scoped_true_lang_css_ = __webpack_require__("u4Gs");
 
 // CONCATENATED MODULE: ./src/DataAdb.vue
 
@@ -164229,11 +165069,11 @@
 
 var DataAdb_component = Object(componentNormalizer["a" /* default */])(
   src_DataAdbvue_type_script_lang_js_,
-  DataAdbvue_type_template_id_60fe90a6_scoped_true_render,
-  DataAdbvue_type_template_id_60fe90a6_scoped_true_staticRenderFns,
+  DataAdbvue_type_template_id_62a1321f_scoped_true_render,
+  DataAdbvue_type_template_id_62a1321f_scoped_true_staticRenderFns,
   false,
   null,
-  "60fe90a6",
+  "62a1321f",
   null
   
 )
@@ -165248,7 +166088,9 @@
         }
 
         if (Object.keys(traceFiles).length > 0 && typeInfo.constructor) {
-          traces[traceType] = new typeInfo.constructor(traceFiles);
+          var newObj = new typeInfo.constructor(traceFiles);
+          newObj.data = Object.freeze(newObj.data);
+          traces[traceType] = newObj;
         }
       }
 
@@ -165290,7 +166132,10 @@
         }
 
         if (Object.keys(dumpFiles).length > 0 && _typeInfo.constructor) {
-          dumps[dumpType] = new _typeInfo.constructor(dumpFiles);
+          var _newObj = new _typeInfo.constructor(dumpFiles);
+
+          _newObj.data = Object.freeze(_newObj.data);
+          dumps[dumpType] = _newObj;
         }
       }
 
@@ -165686,6 +166531,22 @@
 
 /***/ }),
 
+/***/ "aaYB":
+/***/ (function(module, exports, __webpack_require__) {
+
+// style-loader: Adds some css to the DOM by adding a <style> tag
+
+// load the styles
+var content = __webpack_require__("EEmf");
+if(content.__esModule) content = content.default;
+if(typeof content === 'string') content = [[module.i, content, '']];
+if(content.locals) module.exports = content.locals;
+// add the styles to the DOM
+var add = __webpack_require__("SZ7m").default
+var update = add("59510c98", content, true, {});
+
+/***/ }),
+
 /***/ "c3vz":
 /***/ (function(module, exports, __webpack_require__) {
 
@@ -165815,7 +166676,7 @@
 /***/ "e/Vj":
 /***/ (function(module) {
 
-module.exports = JSON.parse("{\"version\":\"1.0.0\",\"messages\":{\"3593205\":{\"message\":\"commitVisibility: %s: visible=%b mVisibleRequested=%b\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/WallpaperWindowToken.java\"},\"9803449\":{\"message\":\"startFreezingDisplayLocked: exitAnim=%d enterAnim=%d called by %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"10608884\":{\"message\":\"  FREEZE %s: CREATE\",\"level\":\"INFO\",\"group\":\"WM_SHOW_SURFACE_ALLOC\",\"at\":\"com/android/server/wm/ScreenRotationAnimation.java\"},\"11060725\":{\"message\":\"Attempted to get system decors flag of a display that does not exist: %d\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"17696244\":{\"message\":\"startAnimation(): mPendingStart=%b mCanceled=%b\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_RECENTS_ANIMATIONS\",\"at\":\"com/android/server/wm/RecentsAnimationController.java\"},\"35398067\":{\"message\":\"goodToGo(): onAnimationStart, transit=%s, apps=%d, wallpapers=%d, nonApps=%d\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_REMOTE_ANIMATIONS\",\"at\":\"com/android/server/wm/RemoteAnimationController.java\"},\"38267433\":{\"message\":\"Attempted to reset replacing window on non-existing app token %s\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"45285419\":{\"message\":\"startingWindow was set but startingSurface==null, couldn't remove\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STARTING_WINDOW\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"51200510\":{\"message\":\"  BLACK %s: DESTROY\",\"level\":\"INFO\",\"group\":\"WM_SHOW_SURFACE_ALLOC\",\"at\":\"com/android/server/wm/BlackFrame.java\"},\"51628177\":{\"message\":\"Attempted to get windowing mode of a display that does not exist: %d\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"51927339\":{\"message\":\"Skipping %s: voice session\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/RootWindowContainer.java\"},\"74885950\":{\"message\":\"Waiting for top state to be released by %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityTaskSupervisor.java\"},\"83950285\":{\"message\":\"removeAnimation(%d)\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_RECENTS_ANIMATIONS\",\"at\":\"com/android/server/wm/RecentsAnimationController.java\"},\"90764070\":{\"message\":\"Could not report token removal to the window token client.\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowContextListenerController.java\"},\"95216706\":{\"message\":\"hideIme target: %s \",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_IME\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"95902367\":{\"message\":\"Relayout of %s: focusMayChange=%b\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_FOCUS\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"100936473\":{\"message\":\"Wallpaper animation!\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/AppTransitionController.java\"},\"102618780\":{\"message\":\"resumeTopActivity: Pausing %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/TaskFragment.java\"},\"108170907\":{\"message\":\"Add starting %s: startingData=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STARTING_WINDOW\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"114070759\":{\"message\":\"New wallpaper target: %s prevTarget: %s caller=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WALLPAPER\",\"at\":\"com/android/server/wm/WallpaperController.java\"},\"115358443\":{\"message\":\"Focus changing: %s -> %s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_FOCUS_LIGHT\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"140319294\":{\"message\":\"IME target changed within ActivityRecord\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_IME\",\"at\":\"com/android/server/wm/ImeInsetsSourceProvider.java\"},\"146871307\":{\"message\":\"Tried to remove starting window but startingWindow was null: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STARTING_WINDOW\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"150351993\":{\"message\":\"addWindow: %s startingWindow=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STARTING_WINDOW\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"152914409\":{\"message\":\"  BLACK %s: CREATE layer=%d\",\"level\":\"INFO\",\"group\":\"WM_SHOW_SURFACE_ALLOC\",\"at\":\"com/android/server/wm/BlackFrame.java\"},\"155482615\":{\"message\":\"Focus requested for window=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_FOCUS_LIGHT\",\"at\":\"com/android/server/wm/InputMonitor.java\"},\"174572959\":{\"message\":\"DisplayArea info changed name=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/DisplayAreaOrganizerController.java\"},\"182319432\":{\"message\":\"        remove from targets %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"184362060\":{\"message\":\"screenshotTask(%d): mCanceled=%b\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_RECENTS_ANIMATIONS\",\"at\":\"com/android/server/wm/RecentsAnimationController.java\"},\"184610856\":{\"message\":\"Start calculating TransitionInfo based on participants: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"186668272\":{\"message\":\"Now changing app %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/AppTransitionController.java\"},\"189628502\":{\"message\":\"Moving to STOPPING: %s (stop requested)\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"200829729\":{\"message\":\"ScreenRotationAnimation onAnimationEnd\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/ScreenRotationAnimation.java\"},\"202263690\":{\"message\":\"rotationForOrientation(orient=%s (%d), last=%s (%d)); user=%s (%d) %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/DisplayRotation.java\"},\"210750281\":{\"message\":\"applyAnimationUnchecked, control: %s, task: %s, transit: %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_RECENTS_ANIMATIONS\",\"at\":\"com/android/server/wm/Task.java\"},\"221540118\":{\"message\":\"mUserActivityTimeout set to %d\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_KEEP_SCREEN_ON\",\"at\":\"com/android/server/wm/RootWindowContainer.java\"},\"232317536\":{\"message\":\"Set intercept back pressed on root=%b\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/TaskOrganizerController.java\"},\"240271590\":{\"message\":\"moveFocusableActivityToTop: unfocusable activity=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_FOCUS\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"241961619\":{\"message\":\"Adding %s to %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/WindowToken.java\"},\"246676969\":{\"message\":\"Attempted to add window with non-application token .%s Aborting.\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"248210157\":{\"message\":\"Finishing remote animation\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_REMOTE_ANIMATIONS\",\"at\":\"com/android/server/wm/RemoteAnimationController.java\"},\"251812577\":{\"message\":\"Register display organizer=%s uid=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/DisplayAreaOrganizerController.java\"},\"254883724\":{\"message\":\"addWindowToken: Attempted to add binder token: %s for already created window token: %s displayId=%d\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"255339989\":{\"message\":\"setFocusedRootTask: taskId=%d\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_FOCUS\",\"at\":\"com/android/server/wm/ActivityTaskManagerService.java\"},\"255692476\":{\"message\":\"**** GOOD TO GO\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/AppTransitionController.java\"},\"259206414\":{\"message\":\"Creating Transition: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/TransitionController.java\"},\"269576220\":{\"message\":\"Resuming rotation after drag\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/DragState.java\"},\"269976641\":{\"message\":\"goodToGo(): Animation canceled already\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_REMOTE_ANIMATIONS\",\"at\":\"com/android/server/wm/RemoteAnimationController.java\"},\"274773837\":{\"message\":\"applyAnimation: anim=%s nextAppTransition=ANIM_CLIP_REVEAL transit=%s Callers=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS_ANIM\",\"at\":\"com/android/server/wm/AppTransition.java\"},\"288485303\":{\"message\":\"Attempted to set remove mode to a display that does not exist: %d\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"289967521\":{\"message\":\"Check opening app=%s: allDrawn=%b startingDisplayed=%b startingMoved=%b isRelaunching()=%b startingWindow=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/AppTransitionController.java\"},\"292904800\":{\"message\":\"Deferring rotation, animation in progress.\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/DisplayRotation.java\"},\"295861935\":{\"message\":\"startLockTaskMode: %s\",\"level\":\"WARN\",\"group\":\"WM_DEBUG_LOCKTASK\",\"at\":\"com/android/server/wm/ActivityTaskManagerService.java\"},\"302969511\":{\"message\":\"Task info changed taskId=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/TaskOrganizerController.java\"},\"302992539\":{\"message\":\"addAnimation(%s)\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_RECENTS_ANIMATIONS\",\"at\":\"com/android/server/wm/RecentsAnimationController.java\"},\"306524472\":{\"message\":\"Stop failed; moving to STOPPED: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"309039362\":{\"message\":\"SURFACE MATRIX [%f,%f,%f,%f]: %s\",\"level\":\"INFO\",\"group\":\"WM_SHOW_TRANSACTIONS\",\"at\":\"com/android/server/wm/WindowSurfaceController.java\"},\"312030608\":{\"message\":\"New topFocusedDisplayId=%d\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_FOCUS_LIGHT\",\"at\":\"com/android/server/wm/RootWindowContainer.java\"},\"315395835\":{\"message\":\"Trying to add window with invalid user=%d\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"327461496\":{\"message\":\"Complete pause: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/TaskFragment.java\"},\"341055768\":{\"message\":\"resumeTopActivity: Skip resume: need to start pausing\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/TaskFragment.java\"},\"342460966\":{\"message\":\"DRAG %s: pos=(%d,%d)\",\"level\":\"INFO\",\"group\":\"WM_SHOW_TRANSACTIONS\",\"at\":\"com/android/server/wm/DragState.java\"},\"344795667\":{\"message\":\"*** APP TRANSITION TIMEOUT. displayId=%d isTransitionSet()=%b mOpeningApps.size()=%d mClosingApps.size()=%d mChangingApps.size()=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/AppTransition.java\"},\"350168164\":{\"message\":\"Removing activity %s, reason= %s callers=%s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"352982444\":{\"message\":\" allReady query: used=%b override=%b states=[%s]\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"355720268\":{\"message\":\"stopFreezingDisplayLocked: Unfreezing now\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"371173718\":{\"message\":\"finishSync cancel=%b for %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_SYNC_ENGINE\",\"at\":\"com/android/server/wm/WindowContainer.java\"},\"371641947\":{\"message\":\"Window Manager Crash %s\",\"level\":\"WTF\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"372792199\":{\"message\":\"Non-null activity for system window of rootType=%d\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"374506950\":{\"message\":\"Reporting activity moved to display, activityRecord=%s, displayId=%d, config=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_SWITCH\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"374972436\":{\"message\":\"performEnableScreen: Waiting for anim complete\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_BOOT\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"378825104\":{\"message\":\"Enqueueing pending pause: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/TaskFragment.java\"},\"397105698\":{\"message\":\"grantEmbeddedWindowFocus remove request for win=%s dropped since no candidate was found\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_FOCUS\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"397382873\":{\"message\":\"Moving to PAUSED: %s %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"399841913\":{\"message\":\"SURFACE RECOVER DESTROY: %s\",\"level\":\"INFO\",\"group\":\"WM_SHOW_SURFACE_ALLOC\",\"at\":\"com/android/server/wm/RootWindowContainer.java\"},\"416924848\":{\"message\":\"InsetsSource Control %s for target %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_WINDOW_INSETS\",\"at\":\"com/android/server/wm/InsetsSourceProvider.java\"},\"417311568\":{\"message\":\"onResize: Resizing %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_RESIZE\",\"at\":\"com/android/server/wm/WindowState.java\"},\"422634333\":{\"message\":\"First draw done in potential wallpaper target %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WALLPAPER\",\"at\":\"com/android/server/wm/DisplayContent.java\"},\"424524729\":{\"message\":\"Attempted to add wallpaper window with unknown token %s.  Aborting.\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"430260320\":{\"message\":\"        sibling is a top target with mode %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"431715812\":{\"message\":\"Launch on display check: allow launch any on display\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/ActivityTaskSupervisor.java\"},\"435494046\":{\"message\":\"Attempted to add window to a display for which the application does not have access: %d.  Aborting.\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"463993897\":{\"message\":\"Aborted waiting for drawn: %s\",\"level\":\"WARN\",\"group\":\"WM_DEBUG_SCREEN_ON\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"466506262\":{\"message\":\"Clear freezing of %s: visible=%b freezing=%b\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"485170982\":{\"message\":\"Not finishing noHistory %s on stop because we're just sleeping\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"487621047\":{\"message\":\"DisplayArea vanished name=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/DisplayAreaOrganizerController.java\"},\"504397469\":{\"message\":\"Unable to update layer mirroring for display %d to new bounds %s and/or orientation %d, since the surface is not available.\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_LAYER_MIRRORING\",\"at\":\"com/android/server/wm/DisplayContent.java\"},\"508887531\":{\"message\":\"applyAnimation voice: anim=%s transit=%s isEntrance=%b Callers=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS_ANIM\",\"at\":\"com/android/server/wm/AppTransition.java\"},\"528150092\":{\"message\":\"        keep as target %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"531242746\":{\"message\":\"  THUMBNAIL %s: CREATE\",\"level\":\"INFO\",\"group\":\"WM_SHOW_TRANSACTIONS\",\"at\":\"com/android/server/wm/WindowContainerThumbnail.java\"},\"535103992\":{\"message\":\"Wallpaper may change!  Adjusting\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WALLPAPER\",\"at\":\"com/android/server/wm/RootWindowContainer.java\"},\"539077569\":{\"message\":\"Clear freezing of %s force=%b\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"544101314\":{\"message\":\"performEnableScreen: Waited %dms for all windows to be drawn\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_BOOT\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"550717438\":{\"message\":\"SyncGroup %d: Started for listener: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_SYNC_ENGINE\",\"at\":\"com/android/server/wm/BLASTSyncEngine.java\"},\"556758086\":{\"message\":\"Applying new update lock state '%s' for %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_IMMERSIVE\",\"at\":\"com/android/server/wm/ActivityTaskManagerService.java\"},\"557227556\":{\"message\":\"onAnimationFinished(): Notify animation finished:\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_REMOTE_ANIMATIONS\",\"at\":\"com/android/server/wm/RemoteAnimationController.java\"},\"558823034\":{\"message\":\"SURFACE isOpaque=%b: %s\",\"level\":\"INFO\",\"group\":\"WM_SHOW_TRANSACTIONS\",\"at\":\"com/android/server/wm/WindowSurfaceController.java\"},\"573582981\":{\"message\":\"reparent: moving activity=%s to new task fragment in task=%d at %d\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"579298675\":{\"message\":\"Moving to DESTROYED: %s (removed from history)\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"585096182\":{\"message\":\"SURFACE isColorSpaceAgnostic=%b: %s\",\"level\":\"INFO\",\"group\":\"WM_SHOW_TRANSACTIONS\",\"at\":\"com/android/server/wm/WindowSurfaceController.java\"},\"585839596\":{\"message\":\"call showInsets(ime) on %s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_IME\",\"at\":\"com/android/server/wm/ImeInsetsSourceProvider.java\"},\"594260577\":{\"message\":\"createWallpaperAnimations()\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_REMOTE_ANIMATIONS\",\"at\":\"com/android/server/wm/RemoteAnimationController.java\"},\"594260654\":{\"message\":\"Remove %s: mSurfaceController=%s mAnimatingExit=%b mRemoveOnExit=%b mHasSurface=%b surfaceShowing=%b animating=%b app-animation=%b mWillReplaceWindow=%b mDisplayFrozen=%b callers=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/WindowState.java\"},\"600140673\":{\"message\":\"checkBootAnimationComplete: Waiting for anim complete\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_BOOT\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"608694300\":{\"message\":\"  NEW SURFACE SESSION %s\",\"level\":\"INFO\",\"group\":\"WM_SHOW_TRANSACTIONS\",\"at\":\"com/android/server/wm/Session.java\"},\"620368427\":{\"message\":\"******* TELLING SURFACE FLINGER WE ARE BOOTED!\",\"level\":\"INFO\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"620519522\":{\"message\":\"findFocusedWindow: No focusable windows, display=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_FOCUS_LIGHT\",\"at\":\"com/android/server/wm/DisplayContent.java\"},\"625447638\":{\"message\":\"Resize reasons for w=%s:  %s configChanged=%b dragResizingChanged=%b reportOrientationChanged=%b\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_RESIZE\",\"at\":\"com/android/server/wm/WindowState.java\"},\"628276090\":{\"message\":\"Delaying app transition for screen rotation animation to finish\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/AppTransitionController.java\"},\"631792420\":{\"message\":\"Attempted to add window with token that is not a window: %s.  Aborting.\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"633654009\":{\"message\":\"SURFACE POS (setPositionInTransaction) @ (%f,%f): %s\",\"level\":\"INFO\",\"group\":\"WM_SHOW_TRANSACTIONS\",\"at\":\"com/android/server/wm/WindowSurfaceController.java\"},\"638429464\":{\"message\":\"\\tRemove container=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_REMOTE_ANIMATIONS\",\"at\":\"com/android/server/wm/RemoteAnimationController.java\"},\"644675193\":{\"message\":\"Real start recents\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_RECENTS_ANIMATIONS\",\"at\":\"com/android/server/wm/RecentsAnimation.java\"},\"646155519\":{\"message\":\"Started intent=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_RECENTS_ANIMATIONS\",\"at\":\"com/android/server/wm/RecentsAnimation.java\"},\"646981048\":{\"message\":\"Invalid displayId for requestScrollCapture: %d\",\"level\":\"ERROR\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"662572728\":{\"message\":\"Attempted to add a toast window with bad token %s.  Aborting.\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"665256544\":{\"message\":\"All windows drawn!\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_SCREEN_ON\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"666937535\":{\"message\":\"attachWindowContextToDisplayArea: trying to attach to a non-existing display:%d\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"669361121\":{\"message\":\"Sleep still need to stop %d activities\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/TaskFragment.java\"},\"674932310\":{\"message\":\"Setting Intent of %s to target %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/Task.java\"},\"675705156\":{\"message\":\"resumeTopActivity: Top activity resumed %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/TaskFragment.java\"},\"685047360\":{\"message\":\"Resizing window %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_RESIZE\",\"at\":\"com/android/server/wm/WindowState.java\"},\"691515534\":{\"message\":\"  Commit wallpaper becoming invisible: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"693423992\":{\"message\":\"setAnimationLocked: setting mFocusMayChange true\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_FOCUS_LIGHT\",\"at\":\"com/android/server/wm/WindowState.java\"},\"704998117\":{\"message\":\"Failed to create surface control for %s\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"708142634\":{\"message\":\"Top resumed state released %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityTaskSupervisor.java\"},\"715749922\":{\"message\":\"Allowlisting %d:%s\",\"level\":\"WARN\",\"group\":\"WM_DEBUG_LOCKTASK\",\"at\":\"com/android/server/wm/ActivityTaskManagerService.java\"},\"726205185\":{\"message\":\"Moving to DESTROYED: %s (destroy skipped)\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"733466617\":{\"message\":\"Wallpaper token %s visible=%b\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_WALLPAPER\",\"at\":\"com/android/server/wm/WallpaperWindowToken.java\"},\"736692676\":{\"message\":\"Config is relaunching %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONFIGURATION\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"743418423\":{\"message\":\"Sending TaskFragment error exception=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/TaskFragmentOrganizerController.java\"},\"744171317\":{\"message\":\"      SKIP: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"745391677\":{\"message\":\"  CREATE SURFACE %s IN SESSION %s: pid=%d format=%d flags=0x%x / %s\",\"level\":\"INFO\",\"group\":\"WM_SHOW_SURFACE_ALLOC\",\"at\":\"com/android/server/wm/WindowStateAnimator.java\"},\"765395228\":{\"message\":\"onAnimationFinished(): controller=%s reorderMode=%d\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_RECENTS_ANIMATIONS\",\"at\":\"com/android/server/wm/RecentsAnimation.java\"},\"781471998\":{\"message\":\"moveWindowTokenToDisplay: Cannot move to the original display for token: %s\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"791468751\":{\"message\":\"Pausing rotation during re-position\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/TaskPositioner.java\"},\"793568608\":{\"message\":\"        SKIP: sibling is visible but not part of transition\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"794570322\":{\"message\":\"Now closing app %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/AppTransitionController.java\"},\"806891543\":{\"message\":\"Setting mOrientationChangeComplete=true because wtoken %s numInteresting=%d numDrawn=%d\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"829434921\":{\"message\":\"Draw state now committed in %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STARTING_WINDOW\",\"at\":\"com/android/server/wm/WindowStateAnimator.java\"},\"835814848\":{\"message\":\"%s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_REMOTE_ANIMATIONS\",\"at\":\"com/android/server/wm/RemoteAnimationController.java\"},\"872933199\":{\"message\":\"Changing focus from %s to %s displayId=%d Callers=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_FOCUS_LIGHT\",\"at\":\"com/android/server/wm/DisplayContent.java\"},\"873914452\":{\"message\":\"goodToGo()\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_REMOTE_ANIMATIONS\",\"at\":\"com/android/server/wm/RemoteAnimationController.java\"},\"892244061\":{\"message\":\"Waiting for drawn %s: removed=%b visible=%b mHasSurface=%b drawState=%d\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_SCREEN_ON\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"895158150\":{\"message\":\"allPausedActivitiesComplete: r=%s state=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/RootWindowContainer.java\"},\"898863925\":{\"message\":\"Attempted to add QS dialog window with unknown token %s.  Aborting.\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"906215061\":{\"message\":\"Apply window transaction, syncId=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/WindowOrganizerController.java\"},\"913494177\":{\"message\":\"removeAllWindowsIfPossible: removing win=%s\",\"level\":\"WARN\",\"group\":\"WM_DEBUG_WINDOW_MOVEMENT\",\"at\":\"com/android/server/wm/WindowToken.java\"},\"916191774\":{\"message\":\"Orientation change complete in %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/WindowStateAnimator.java\"},\"935418348\":{\"message\":\"resumeTopActivity: Skip resume: some activity pausing.\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/TaskFragment.java\"},\"950074526\":{\"message\":\"setLockTaskMode: Can't lock due to auth\",\"level\":\"WARN\",\"group\":\"WM_DEBUG_LOCKTASK\",\"at\":\"com/android/server/wm/LockTaskController.java\"},\"954470154\":{\"message\":\"FORCED DISPLAY SCALING DISABLED\",\"level\":\"INFO\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"956374481\":{\"message\":\"removeLockedTask: task=%s last task, reverting locktask mode. Callers=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_LOCKTASK\",\"at\":\"com/android/server/wm/LockTaskController.java\"},\"959486822\":{\"message\":\"setSyncGroup #%d on %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_SYNC_ENGINE\",\"at\":\"com/android/server/wm/WindowContainer.java\"},\"966569777\":{\"message\":\"SyncGroup %d: onSurfacePlacement checking %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_SYNC_ENGINE\",\"at\":\"com/android/server/wm/BLASTSyncEngine.java\"},\"969323241\":{\"message\":\"Sending new config to %s, config: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONFIGURATION\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"972354148\":{\"message\":\"\\tcontainer=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_REMOTE_ANIMATIONS\",\"at\":\"com/android/server/wm/RemoteAnimationController.java\"},\"979347997\":{\"message\":\"Launch on display check: disallow activity embedding without permission.\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/ActivityTaskSupervisor.java\"},\"987903142\":{\"message\":\"Sleep needs to pause %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/TaskFragment.java\"},\"996960396\":{\"message\":\"Starting Transition %d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"1001904964\":{\"message\":\"***** BOOT TIMEOUT: forcing display enabled\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"1011462000\":{\"message\":\"Re-launching after pause: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/TaskFragment.java\"},\"1022095595\":{\"message\":\"TaskFragment info changed name=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/TaskFragmentOrganizerController.java\"},\"1023413388\":{\"message\":\"Finish waiting for pause of: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1030898920\":{\"message\":\"notifyInsetsControlChanged for %s \",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_WINDOW_INSETS\",\"at\":\"com/android/server/wm/WindowState.java\"},\"1033274509\":{\"message\":\"moveWindowTokenToDisplay: Attempted to move non-existing token: %s\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"1040675582\":{\"message\":\"Can't report activity configuration update - client not running, activityRecord=%s\",\"level\":\"WARN\",\"group\":\"WM_DEBUG_CONFIGURATION\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1046922686\":{\"message\":\"requestScrollCapture: caught exception dispatching callback: %s\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"1047505501\":{\"message\":\"notifyInsetsChanged for %s \",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_WINDOW_INSETS\",\"at\":\"com/android/server/wm/WindowState.java\"},\"1047769218\":{\"message\":\"Finishing activity r=%s, result=%d, data=%s, reason=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1049367566\":{\"message\":\"Sending to proc %s new config %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONFIGURATION\",\"at\":\"com/android/server/wm/WindowProcessController.java\"},\"1051545910\":{\"message\":\"Exit animation finished in %s: remove=%b\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/WindowState.java\"},\"1068803972\":{\"message\":\"Activity paused: token=%s, timeout=%b\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1073230342\":{\"message\":\"startAnimation\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_REMOTE_ANIMATIONS\",\"at\":\"com/android/server/wm/WallpaperAnimationAdapter.java\"},\"1087494661\":{\"message\":\"Clear window stuck on animatingExit status: %s\",\"level\":\"WARN\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/WindowState.java\"},\"1088929964\":{\"message\":\"onLockTaskPackagesUpdated: starting new locktask task=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_LOCKTASK\",\"at\":\"com/android/server/wm/LockTaskController.java\"},\"1089714158\":{\"message\":\"  FREEZE %s: DESTROY\",\"level\":\"INFO\",\"group\":\"WM_SHOW_SURFACE_ALLOC\",\"at\":\"com/android/server/wm/ScreenRotationAnimation.java\"},\"1100065297\":{\"message\":\"Attempted to get IME policy of a display that does not exist: %d\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"1105210816\":{\"message\":\"Skipping config check in destroyed state %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONFIGURATION\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1112047265\":{\"message\":\"finishDrawingWindow: %s mDrawState=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"1115248873\":{\"message\":\"Calling onTransitionReady: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"1115417974\":{\"message\":\"FORCED DISPLAY SIZE: %dx%d\",\"level\":\"INFO\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"1126328412\":{\"message\":\"Scheduling idle now: forceIdle=%b immediate=%b\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1140424002\":{\"message\":\"Finished screen turning on...\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_SCREEN_ON\",\"at\":\"com/android/server/wm/DisplayPolicy.java\"},\"1149424314\":{\"message\":\"Unregister display organizer=%s uid=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/DisplayAreaOrganizerController.java\"},\"1166381079\":{\"message\":\"Execute app transition: %s, displayId: %d Callers=%s\",\"level\":\"WARN\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/DisplayContent.java\"},\"1178653181\":{\"message\":\"Old wallpaper still the target.\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WALLPAPER\",\"at\":\"com/android/server/wm/WallpaperController.java\"},\"1186730970\":{\"message\":\"          no common mode yet, so set it\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"1191587912\":{\"message\":\"Moved rootTask=%s behind rootTask=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_RECENTS_ANIMATIONS\",\"at\":\"com/android/server/wm/RecentsAnimation.java\"},\"1192413464\":{\"message\":\"Comparing existing cls=%s /aff=%s to new cls=%s /aff=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/RootWindowContainer.java\"},\"1208313423\":{\"message\":\"addWindowToken: Attempted to add token: %s for non-exiting displayId=%d\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"1210037962\":{\"message\":\"Register remote animations for organizer=%s uid=%d pid=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/TaskFragmentOrganizerController.java\"},\"1219600119\":{\"message\":\"addWindow: win=%s Callers=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_FOCUS\",\"at\":\"com/android/server/wm/WindowToken.java\"},\"1224184681\":{\"message\":\"No longer Stopped: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1224307091\":{\"message\":\"checkBootAnimationComplete: Animation complete!\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_BOOT\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"1246035185\":{\"message\":\"stopFreezingDisplayLocked: Returning waitingForConfig=%b, waitingForRemoteRotation=%b, mAppsFreezingScreen=%d, mWindowsFreezingScreen=%d, mClientFreezingScreen=%b, mOpeningApps.size()=%d\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"1252594551\":{\"message\":\"Window types in WindowContext and LayoutParams.type should match! Type from LayoutParams is %d, but type from WindowContext is %d\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"1254403969\":{\"message\":\"Surface returned was null: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STARTING_WINDOW\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1270792394\":{\"message\":\"Resumed after relaunch %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1284122013\":{\"message\":\"TaskFragment appeared name=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/TaskFragmentOrganizerController.java\"},\"1288731814\":{\"message\":\"WindowState.hideLw: setting mFocusMayChange true\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_FOCUS_LIGHT\",\"at\":\"com/android/server/wm/WindowState.java\"},\"1305412562\":{\"message\":\"Report configuration: %s %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONFIGURATION\",\"at\":\"com/android/server/wm/ActivityClientController.java\"},\"1316533291\":{\"message\":\"State movement: %s from:%s to:%s reason:%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1325649102\":{\"message\":\"Bad requesting window %s\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"1329340614\":{\"message\":\"Orientation not waiting for draw in %s, surfaceController %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/WindowState.java\"},\"1330804250\":{\"message\":\"addChild: %s at top.\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/Task.java\"},\"1331177619\":{\"message\":\"Attempted to add a toast window with unknown token %s.  Aborting.\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"1337596507\":{\"message\":\"Sending to proc %s new compat %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONFIGURATION\",\"at\":\"com/android/server/wm/CompatModePackages.java\"},\"1346895820\":{\"message\":\"ScreenRotation still animating: type: %d\\nmDisplayAnimator: %s\\nmEnterBlackFrameAnimator: %s\\nmRotateScreenAnimator: %s\\nmScreenshotRotationAnimator: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/ScreenRotationAnimation.java\"},\"1364126018\":{\"message\":\"Resumed activity; dropping state of: %s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1364498663\":{\"message\":\"notifyAppResumed: wasStopped=%b %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1373000889\":{\"message\":\"abortShowImePostLayout\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_IME\",\"at\":\"com/android/server/wm/ImeInsetsSourceProvider.java\"},\"1381227466\":{\"message\":\"App is requesting an orientation, return %d for display id=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/TaskDisplayArea.java\"},\"1396893178\":{\"message\":\"createRootTask unknown displayId=%d\",\"level\":\"ERROR\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/TaskOrganizerController.java\"},\"1401295262\":{\"message\":\"Mode default, asking user\",\"level\":\"WARN\",\"group\":\"WM_DEBUG_LOCKTASK\",\"at\":\"com/android/server/wm/LockTaskController.java\"},\"1401700824\":{\"message\":\"Window drawn win=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_SCREEN_ON\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"1407569006\":{\"message\":\"Display %d was already layer mirroring, so apply transformations if necessary\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_LAYER_MIRRORING\",\"at\":\"com/android/server/wm/DisplayContent.java\"},\"1422781269\":{\"message\":\"Resuming rotation after re-position\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/TaskPositioner.java\"},\"1423418408\":{\"message\":\"unable to restore pointer icon\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"1423592961\":{\"message\":\"<<< CLOSE TRANSACTION removeReplacedWindows\",\"level\":\"INFO\",\"group\":\"WM_SHOW_TRANSACTIONS\",\"at\":\"com/android/server/wm/RootWindowContainer.java\"},\"1430336882\":{\"message\":\"findFocusedWindow: focusedApp windows not focusable using new focus @ %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_FOCUS_LIGHT\",\"at\":\"com/android/server/wm/DisplayContent.java\"},\"1434383382\":{\"message\":\"Attempted to get flag of a display that does not exist: %d\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"1448683958\":{\"message\":\"Override pending remote transitionSet=%b adapter=%s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/AppTransition.java\"},\"1457990604\":{\"message\":\"applyAnimation: anim=%s nextAppTransition=ANIM_CUSTOM_IN_PLACE transit=%s Callers=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS_ANIM\",\"at\":\"com/android/server/wm/AppTransition.java\"},\"1460759282\":{\"message\":\"getAnimationTarget in=%s, out=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS_ANIM\",\"at\":\"com/android/server/wm/AppTransitionController.java\"},\"1469310004\":{\"message\":\"          SKIP: common mode mismatch. was %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"1494644409\":{\"message\":\"  Rejecting as detached: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"1495525537\":{\"message\":\"createWallpaperAnimations()\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_RECENTS_ANIMATIONS\",\"at\":\"com/android/server/wm/RecentsAnimationController.java\"},\"1497304204\":{\"message\":\"Deferring rotation, rotation is paused.\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/DisplayRotation.java\"},\"1504168072\":{\"message\":\"removeIfPossible: %s callers=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/WindowState.java\"},\"1515161239\":{\"message\":\"removeDeadWindows: %s\",\"level\":\"WARN\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1518495446\":{\"message\":\"removeWindowToken: Attempted to remove non-existing token: %s\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"1519757176\":{\"message\":\"setHomeApp(%s)\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_RECENTS_ANIMATIONS\",\"at\":\"com/android/server/wm/RecentsAnimationController.java\"},\"1521476038\":{\"message\":\"Attempted to set flag to a display that does not exist: %d\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"1524174282\":{\"message\":\"Launch on display check: no caller info, skip check\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/ActivityTaskSupervisor.java\"},\"1525976603\":{\"message\":\"cancelAnimation(): reason=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_RECENTS_ANIMATIONS\",\"at\":\"com/android/server/wm/RecentsAnimationController.java\"},\"1528528509\":{\"message\":\"No thumbnail header bitmap for: %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1554795024\":{\"message\":\"Previous Activity is %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_BACK_PREVIEW\",\"at\":\"com/android/server/wm/BackNavigationController.java\"},\"1557732761\":{\"message\":\"For Intent %s bringing to top: %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/RootWindowContainer.java\"},\"1563755163\":{\"message\":\"Permission Denial: %s from pid=%d, uid=%d requires %s\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"1577579529\":{\"message\":\"win=%s destroySurfaces: appStopped=%b win.mWindowRemovalAllowed=%b win.mRemoveOnExit=%b\",\"level\":\"ERROR\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/WindowState.java\"},\"1584270979\":{\"message\":\"applyAnimation: container=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS_ANIM\",\"at\":\"com/android/server/wm/WindowContainer.java\"},\"1589610525\":{\"message\":\"applyAnimation NEXT_TRANSIT_TYPE_OPEN_CROSS_PROFILE_APPS: anim=%s transit=%s isEntrance=true Callers=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS_ANIM\",\"at\":\"com/android/server/wm/AppTransition.java\"},\"1610646518\":{\"message\":\"Enqueueing pending finish: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1628345525\":{\"message\":\"Now opening app %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/AppTransitionController.java\"},\"1634557978\":{\"message\":\"**** Dismissing screen rotation animation\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"1635062046\":{\"message\":\"Skipping config check invisible: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONFIGURATION\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1635462459\":{\"message\":\"onMovedByResize: Moving %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_RESIZE\",\"at\":\"com/android/server/wm/WindowState.java\"},\"1640436199\":{\"message\":\"No app is requesting an orientation, return %d for display id=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/TaskDisplayArea.java\"},\"1648338379\":{\"message\":\"Display id=%d is ignoring all orientation requests, return %d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/DisplayContent.java\"},\"1653025361\":{\"message\":\"Register task fragment organizer=%s uid=%d pid=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/TaskFragmentOrganizerController.java\"},\"1653210583\":{\"message\":\"Removing app %s delayed=%b animation=%s animating=%b\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1658605381\":{\"message\":\"onImeControlTargetChanged %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_IME\",\"at\":\"com/android/server/wm/InsetsStateController.java\"},\"1670933628\":{\"message\":\" Setting allReady override\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"1671994402\":{\"message\":\"Nulling last startingData\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STARTING_WINDOW\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1674747211\":{\"message\":\"%s forcing orientation to %d for display id=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/DisplayArea.java\"},\"1677260366\":{\"message\":\"Finish starting %s: first real window is shown, no animation\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STARTING_WINDOW\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1679569477\":{\"message\":\"Configuration doesn't matter not running %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONFIGURATION\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1687376052\":{\"message\":\"Display %d has no content and is on, so start layer mirroring for state %d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_LAYER_MIRRORING\",\"at\":\"com/android/server/wm/DisplayContent.java\"},\"1689989893\":{\"message\":\"SyncGroup %d: Set ready\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_SYNC_ENGINE\",\"at\":\"com/android/server/wm/BLASTSyncEngine.java\"},\"1699269281\":{\"message\":\"Don't organize or trigger events for untrusted displayId=%d\",\"level\":\"WARN\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/DisplayAreaOrganizerController.java\"},\"1720229827\":{\"message\":\"Creating animation bounds layer\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_APP_TRANSITIONS_ANIM\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1720696061\":{\"message\":\"Adding window to Display that has been removed.\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"1739298851\":{\"message\":\"removeWindowToken: Attempted to remove token: %s for non-exiting displayId=%d\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"1742235936\":{\"message\":\"Removing startingView=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STARTING_WINDOW\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1746778201\":{\"message\":\"Set freezing of %s: visible=%b freezing=%b visibleRequested=%b. %s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1756082882\":{\"message\":\"Orientation change skips hidden %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/WindowStateAnimator.java\"},\"1774661765\":{\"message\":\"Devices still not ready after waiting %d milliseconds before attempting to detect safe mode.\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"1781673113\":{\"message\":\"onAnimationFinished(): targetRootTask=%s targetActivity=%s mRestoreTargetBehindRootTask=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_RECENTS_ANIMATIONS\",\"at\":\"com/android/server/wm/RecentsAnimation.java\"},\"1789321832\":{\"message\":\"Then token:%s is invalid. It might be removed\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"1789603530\":{\"message\":\"Removing activity %s hasSavedState=%b stateNotNeeded=%s finishing=%b state=%s callers=%s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1794249572\":{\"message\":\"Requesting StartTransition: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/TransitionController.java\"},\"1804245629\":{\"message\":\"Attempted to add starting window to token but already cleaned\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"1805116444\":{\"message\":\"We don't support remote animation for Task with multiple TaskFragmentOrganizers.\",\"level\":\"ERROR\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/AppTransitionController.java\"},\"1810019902\":{\"message\":\"TRANSIT_FLAG_OPEN_BEHIND,  adding %s to mOpeningApps\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1822314934\":{\"message\":\"Expected target rootTask=%s to restored behind rootTask=%s but it is behind rootTask=%s\",\"level\":\"WARN\",\"group\":\"WM_DEBUG_RECENTS_ANIMATIONS\",\"at\":\"com/android/server/wm/RecentsAnimation.java\"},\"1822843721\":{\"message\":\"Aborted starting %s: startingData=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STARTING_WINDOW\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1824105730\":{\"message\":\"setLockTaskAuth: task=%s mLockTaskAuth=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_LOCKTASK\",\"at\":\"com/android/server/wm/Task.java\"},\"1829094918\":{\"message\":\"onLockTaskPackagesUpdated: removing %s mLockTaskAuth()=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_LOCKTASK\",\"at\":\"com/android/server/wm/LockTaskController.java\"},\"1831008694\":{\"message\":\"Loading animation for app transition. transit=%s enter=%b frame=%s insets=%s surfaceInsets=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/WindowContainer.java\"},\"1836214582\":{\"message\":\"startingData was nulled out before handling mAddStartingWindow: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STARTING_WINDOW\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1836306327\":{\"message\":\"Skipping set freeze of %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1853793312\":{\"message\":\"Notify removed startingWindow %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STARTING_WINDOW\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1856211951\":{\"message\":\"moveFocusableActivityToTop: already on top, activity=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_FOCUS\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1856783490\":{\"message\":\"resumeTopActivity: Restarting %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/TaskFragment.java\"},\"1865125884\":{\"message\":\"finishScreenTurningOn: mAwake=%b, mScreenOnEarly=%b, mScreenOnFully=%b, mKeyguardDrawComplete=%b, mWindowManagerDrawComplete=%b\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_SCREEN_ON\",\"at\":\"com/android/server/wm/DisplayPolicy.java\"},\"1866772666\":{\"message\":\"SAFE MODE not enabled\",\"level\":\"INFO\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"1874559932\":{\"message\":\"The TaskDisplayArea with %s does not exist.\",\"level\":\"WARN\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/DisplayAreaPolicyBuilder.java\"},\"1884961873\":{\"message\":\"Sleep still need to stop %d activities\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/Task.java\"},\"1891501279\":{\"message\":\"cancelAnimation(): reason=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_REMOTE_ANIMATIONS\",\"at\":\"com/android/server/wm/RemoteAnimationController.java\"},\"1903353011\":{\"message\":\"notifyAppStopped: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1912291550\":{\"message\":\"Sleep still waiting to pause %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/TaskFragment.java\"},\"1918448345\":{\"message\":\"Task appeared taskId=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/TaskOrganizerController.java\"},\"1921821199\":{\"message\":\"Preserving %s until the new one is added\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/WindowState.java\"},\"1928325128\":{\"message\":\"Run showImeRunner\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_IME\",\"at\":\"com/android/server/wm/ImeInsetsSourceProvider.java\"},\"1931178855\":{\"message\":\"\\tnonApp=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_REMOTE_ANIMATIONS\",\"at\":\"com/android/server/wm/RemoteAnimationController.java\"},\"1947239194\":{\"message\":\"Deferring rotation, still finishing previous rotation\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/DisplayRotation.java\"},\"1947936538\":{\"message\":\"Found matching class!\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/RootWindowContainer.java\"},\"1948483534\":{\"message\":\"Could not report config changes to the window token client.\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowContextListenerController.java\"},\"1964565370\":{\"message\":\"Starting remote animation\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_REMOTE_ANIMATIONS\",\"at\":\"com/android/server/wm/RemoteAnimationController.java\"},\"1967975839\":{\"message\":\"Changing app %s visible=%b performLayout=%b\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/AppTransitionController.java\"},\"1984782949\":{\"message\":\">>> OPEN TRANSACTION animate\",\"level\":\"INFO\",\"group\":\"WM_SHOW_TRANSACTIONS\",\"at\":\"com/android/server/wm/WindowAnimator.java\"},\"1984843251\":{\"message\":\"Hiding wallpaper %s from %s target=%s prev=%s callers=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_WALLPAPER\",\"at\":\"com/android/server/wm/WallpaperController.java\"},\"1995093920\":{\"message\":\"Checking to restart %s: changed=0x%s, handles=0x%s, mLastReportedConfiguration=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONFIGURATION\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1999594750\":{\"message\":\"startAnimation\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_REMOTE_ANIMATIONS\",\"at\":\"com/android/server/wm/NonAppWindowAnimationAdapter.java\"},\"2018454757\":{\"message\":\"WS.removeImmediately: %s Already removed...\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/WindowState.java\"},\"2018852077\":{\"message\":\"Creating SplashScreenStartingData\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STARTING_WINDOW\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"2022422429\":{\"message\":\"createAnimationAdapter(): container=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_REMOTE_ANIMATIONS\",\"at\":\"com/android/server/wm/RemoteAnimationController.java\"},\"2024493888\":{\"message\":\"\\tWallpaper of display=%s is not visible\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_REMOTE_ANIMATIONS\",\"at\":\"com/android/server/wm/WallpaperAnimationAdapter.java\"},\"2028163120\":{\"message\":\"applyAnimation: anim=%s nextAppTransition=ANIM_SCALE_UP transit=%s isEntrance=%s Callers=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS_ANIM\",\"at\":\"com/android/server/wm/AppTransition.java\"},\"2034780299\":{\"message\":\"CHECK_IF_BOOT_ANIMATION_FINISHED:\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_BOOT\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"2039056415\":{\"message\":\"Found matching affinity candidate!\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/RootWindowContainer.java\"},\"2045641491\":{\"message\":\"Checking %d opening apps (frozen=%b timeout=%b)...\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/AppTransitionController.java\"},\"2060978050\":{\"message\":\"moveWindowTokenToDisplay: Attempted to move token: %s to non-exiting displayId=%d\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"2070726247\":{\"message\":\"InsetsSource updateVisibility for %s, serverVisible: %s clientVisible: %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_WINDOW_INSETS\",\"at\":\"com/android/server/wm/InsetsSourceProvider.java\"},\"2083556954\":{\"message\":\"Set mOrientationChanging of %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/DisplayContent.java\"},\"2086878461\":{\"message\":\"Could not send command %s with parameters %s. %s\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"2088592090\":{\"message\":\"handleNotObscuredLocked: %s was holding screen wakelock but no longer has FLAG_KEEP_SCREEN_ON!!! called by%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_KEEP_SCREEN_ON\",\"at\":\"com/android/server/wm/RootWindowContainer.java\"},\"2096635066\":{\"message\":\"Acquiring screen wakelock due to %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_KEEP_SCREEN_ON\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"2114149926\":{\"message\":\"Not removing %s because app died while it's visible\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/WindowState.java\"},\"2117696413\":{\"message\":\"moveTaskToFront: moving taskId=%d\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/ActivityTaskManagerService.java\"},\"2119122320\":{\"message\":\"setInputMethodTarget %s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_IME\",\"at\":\"com/android/server/wm/DisplayContent.java\"},\"2128917433\":{\"message\":\"onProposedRotationChanged, rotation=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/DisplayRotation.java\"},\"2137411379\":{\"message\":\"applyAnimation: anim=%s animAttr=0x%x transit=%s isEntrance=%b Callers=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS_ANIM\",\"at\":\"com/android/server/wm/AppTransition.java\"},\"-2146181682\":{\"message\":\"Releasing screen wakelock, obscured by %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_KEEP_SCREEN_ON\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-2127842445\":{\"message\":\"Clearing startingData for token=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STARTING_WINDOW\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-2121056984\":{\"message\":\"%s\",\"level\":\"WARN\",\"group\":\"WM_DEBUG_LOCKTASK\",\"at\":\"com/android/server/wm/LockTaskController.java\"},\"-2109936758\":{\"message\":\"removeAppToken make exiting: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-2109864870\":{\"message\":\"app-release(): mOuter=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_REMOTE_ANIMATIONS\",\"at\":\"com/android/server/wm/RemoteAnimationController.java\"},\"-2107721178\":{\"message\":\"grantEmbeddedWindowFocus win=%s grantFocus=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_FOCUS\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-2101985723\":{\"message\":\"Failed looking up window session=%s callers=%s\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-2093859262\":{\"message\":\"setClientVisible: %s clientVisible=%b Callers=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/WindowToken.java\"},\"-2072089308\":{\"message\":\"Attempted to add window with token that is a sub-window: %s.  Aborting.\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-2054442123\":{\"message\":\"Setting Intent of %s to %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/Task.java\"},\"-2049725903\":{\"message\":\"Task back pressed on root taskId=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/TaskOrganizerController.java\"},\"-2039580386\":{\"message\":\"Attempted to add input method window with unknown token %s.  Aborting.\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-2036671725\":{\"message\":\"      SKIP: is wallpaper\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"-2024464438\":{\"message\":\"app-onAnimationFinished(): mOuter=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_REMOTE_ANIMATIONS\",\"at\":\"com/android/server/wm/RemoteAnimationController.java\"},\"-2014162875\":{\"message\":\"Could not register window container listener token=%s, container=%s\",\"level\":\"ERROR\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowContextListenerController.java\"},\"-2012562539\":{\"message\":\"startAnimation(): Notify animation start:\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_REMOTE_ANIMATIONS\",\"at\":\"com/android/server/wm/RemoteAnimationController.java\"},\"-2010331310\":{\"message\":\"resumeTopActivity: Top activity resumed (dontWaitForPause) %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/TaskFragment.java\"},\"-1980468143\":{\"message\":\"DisplayArea appeared name=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/DisplayAreaOrganizerController.java\"},\"-1979455254\":{\"message\":\"Launch on display check: allow launch for caller present on the display\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/ActivityTaskSupervisor.java\"},\"-1976930686\":{\"message\":\"Attempted to add Accessibility overlay window with bad token %s.  Aborting.\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-1973119651\":{\"message\":\"SyncGroup %d: Adding to group: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_SYNC_ENGINE\",\"at\":\"com/android/server/wm/BLASTSyncEngine.java\"},\"-1963461591\":{\"message\":\"Removing %s from %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-1963363332\":{\"message\":\"Restart top activity process of Task taskId=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/TaskOrganizerController.java\"},\"-1949279037\":{\"message\":\"Attempted to add input method window with bad token %s.  Aborting.\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-1939861963\":{\"message\":\"Create root task displayId=%d winMode=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/TaskOrganizerController.java\"},\"-1938839202\":{\"message\":\"SURFACE LEAK DESTROY: %s\",\"level\":\"INFO\",\"group\":\"WM_SHOW_TRANSACTIONS\",\"at\":\"com/android/server/wm/DisplayContent.java\"},\"-1938204785\":{\"message\":\"Moving existing starting %s from %s to %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STARTING_WINDOW\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-1924376693\":{\"message\":\" Setting Ready-group to %b. group=%s from %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"-1918702467\":{\"message\":\"onSyncFinishedDrawing %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_SYNC_ENGINE\",\"at\":\"com/android/server/wm/WindowContainer.java\"},\"-1915280162\":{\"message\":\"Attempted to add wallpaper window with bad token %s.  Aborting.\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-1906387645\":{\"message\":\"SURFACE controller=%s alpha=%f HScale=%f, VScale=%f: %s\",\"level\":\"INFO\",\"group\":\"WM_SHOW_TRANSACTIONS\",\"at\":\"com/android/server/wm/WindowStateAnimator.java\"},\"-1905191109\":{\"message\":\"SyncGroup %d: Finished!\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_SYNC_ENGINE\",\"at\":\"com/android/server/wm/BLASTSyncEngine.java\"},\"-1898316768\":{\"message\":\"Unable to retrieve window container to start layer mirroring for display %d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_LAYER_MIRRORING\",\"at\":\"com/android/server/wm/DisplayContent.java\"},\"-1895337367\":{\"message\":\"Delete root task display=%d winMode=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/TaskOrganizerController.java\"},\"-1886145147\":{\"message\":\"resumeTopActivity: Going to sleep and all paused\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/TaskFragment.java\"},\"-1884933373\":{\"message\":\"enableScreenAfterBoot: mDisplayEnabled=%b mForceDisplayEnabled=%b mShowingBootMessages=%b mSystemBooted=%b. %s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_BOOT\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-1878839956\":{\"message\":\"Marking app token %s with replacing windows.\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-1872288685\":{\"message\":\"applyAnimation: anim=%s nextAppTransition=%s transit=%s isEntrance=%b Callers=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS_ANIM\",\"at\":\"com/android/server/wm/AppTransition.java\"},\"-1868124841\":{\"message\":\"screenOnEarly=%b, awake=%b, currentAppOrientation=%d, orientationSensorEnabled=%b, keyguardDrawComplete=%b, windowManagerDrawComplete=%b\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/DisplayRotation.java\"},\"-1868048288\":{\"message\":\"Updating to new configuration after starting activity.\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONFIGURATION\",\"at\":\"com/android/server/wm/ActivityStarter.java\"},\"-1862269827\":{\"message\":\"applyAnimation: anim=%s transit=%s isEntrance=%b Callers=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS_ANIM\",\"at\":\"com/android/server/wm/AppTransition.java\"},\"-1844540996\":{\"message\":\"  Initial targets: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"-1838803135\":{\"message\":\"Attempted to set windowing mode to a display that does not exist: %d\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-1834214907\":{\"message\":\"createNonAppWindowAnimations()\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_REMOTE_ANIMATIONS\",\"at\":\"com/android/server/wm/RemoteAnimationController.java\"},\"-1824578273\":{\"message\":\"Reporting new frame to %s: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_RESIZE\",\"at\":\"com/android/server/wm/WindowState.java\"},\"-1810446914\":{\"message\":\"Trying to update display configuration for system/invalid process.\",\"level\":\"WARN\",\"group\":\"WM_DEBUG_CONFIGURATION\",\"at\":\"com/android/server/wm/ActivityTaskManagerService.java\"},\"-1800899273\":{\"message\":\"applyAnimation: anim=%s transit=%s Callers=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS_ANIM\",\"at\":\"com/android/server/wm/AppTransition.java\"},\"-1792633344\":{\"message\":\"Register task organizer=%s uid=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/TaskOrganizerController.java\"},\"-1791031393\":{\"message\":\"Ensuring correct configuration: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONFIGURATION\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-1782453012\":{\"message\":\"Checking theme of starting window: 0x%x\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STARTING_WINDOW\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-1777196134\":{\"message\":\"goodToGo(): No apps to animate, mPendingAnimations=%d\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_REMOTE_ANIMATIONS\",\"at\":\"com/android/server/wm/RemoteAnimationController.java\"},\"-1770075711\":{\"message\":\"Adding window client %s that is dead, aborting.\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-1768557332\":{\"message\":\"removeWallpaperAnimation()\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_RECENTS_ANIMATIONS\",\"at\":\"com/android/server/wm/RecentsAnimationController.java\"},\"-1750384749\":{\"message\":\"Launch on display check: allow launch on public display\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/ActivityTaskSupervisor.java\"},\"-1750206390\":{\"message\":\"Exception thrown when creating surface for client %s (%s). %s\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-1747461042\":{\"message\":\"set mOrientationChanging of %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/WindowState.java\"},\"-1740512980\":{\"message\":\"Stopping %s: nowVisible=%b animating=%b finishing=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityTaskSupervisor.java\"},\"-1730156332\":{\"message\":\"Display id=%d rotation changed to %d from %d, lastOrientation=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/DisplayRotation.java\"},\"-1715268616\":{\"message\":\"Last window, removing starting window %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STARTING_WINDOW\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-1710206702\":{\"message\":\"Display id=%d is frozen while keyguard locked, return %d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/DisplayContent.java\"},\"-1707370822\":{\"message\":\"Ready to stop: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityTaskSupervisor.java\"},\"-1704402370\":{\"message\":\"resetTaskIntendedTask: calling finishActivity on %s\",\"level\":\"WARN\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/ResetTargetTaskHelper.java\"},\"-1699018375\":{\"message\":\"Adding activity %s to task %s callers: %s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/Task.java\"},\"-1698815688\":{\"message\":\"Resetting app token %s of replacing window marks.\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-1679411993\":{\"message\":\"setVr2dDisplayId called for: %d\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/ActivityTaskManagerService.java\"},\"-1670695197\":{\"message\":\"Attempted to add presentation window to a non-suitable display.  Aborting.\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-1661704580\":{\"message\":\"Attempted to set replacing window on non-existing app token %s\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-1647332198\":{\"message\":\"remove RecentTask %s when finishing user %d\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/RecentTasks.java\"},\"-1638958146\":{\"message\":\"Removing activity %s from task=%s adding to task=%s Callers=%s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/ResetTargetTaskHelper.java\"},\"-1633115609\":{\"message\":\"Key dispatch not paused for screen off\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/TaskFragment.java\"},\"-1632122349\":{\"message\":\"Changing surface while display frozen: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-1630752478\":{\"message\":\"removeLockedTask: removed %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_LOCKTASK\",\"at\":\"com/android/server/wm/LockTaskController.java\"},\"-1598452494\":{\"message\":\"activityDestroyedLocked: r=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_CONTAINERS\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-1596995693\":{\"message\":\"startAnimation\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_REMOTE_ANIMATIONS\",\"at\":\"com/android/server/wm/RemoteAnimationController.java\"},\"-1587921395\":{\"message\":\"  Top targets: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"-1585311008\":{\"message\":\"Bring to front target: %s from %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/ActivityStarter.java\"},\"-1575977269\":{\"message\":\"Skipping %s: mismatch root %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/RootWindowContainer.java\"},\"-1568331821\":{\"message\":\"Enabling listeners\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/DisplayRotation.java\"},\"-1567866547\":{\"message\":\"Collecting in transition %d: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"-1564228464\":{\"message\":\"App died while pausing: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/TaskFragment.java\"},\"-1559645910\":{\"message\":\"Looking for task of type=%s, taskAffinity=%s, intent=%s, info=%s, preferredTDA=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/RootWindowContainer.java\"},\"-1558137010\":{\"message\":\"Config is relaunching invisible activity %s called by %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-1554521902\":{\"message\":\"showInsets(ime) was requested by different window: %s \",\"level\":\"WARN\",\"group\":\"WM_DEBUG_IME\",\"at\":\"com/android/server/wm/ImeInsetsSourceProvider.java\"},\"-1545962566\":{\"message\":\"View server did not start\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-1539974875\":{\"message\":\"removeAppToken: %s delayed=%b Callers=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-1526645239\":{\"message\":\"Timeout waiting for drawn: undrawn=%s\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-1521427940\":{\"message\":\"commitVisibility: %s: visible=%b mVisibleRequested=%b\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-1517908912\":{\"message\":\"requestScrollCapture: caught exception dispatching to window.token=%s\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-1515151503\":{\"message\":\">>> OPEN TRANSACTION removeReplacedWindows\",\"level\":\"INFO\",\"group\":\"WM_SHOW_TRANSACTIONS\",\"at\":\"com/android/server/wm/RootWindowContainer.java\"},\"-1501564055\":{\"message\":\"Organized TaskFragment is not ready= %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/AppTransitionController.java\"},\"-1499134947\":{\"message\":\"Removing starting %s from %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-1497837552\":{\"message\":\"onAnimationFinished(): mPendingAnimations=%d\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_REMOTE_ANIMATIONS\",\"at\":\"com/android/server/wm/RemoteAnimationController.java\"},\"-1495062622\":{\"message\":\"Can't report activity moved to display - client not running, activityRecord=%s, displayId=%d\",\"level\":\"WARN\",\"group\":\"WM_DEBUG_SWITCH\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-1492881555\":{\"message\":\"Starting activity when config will change = %b\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONFIGURATION\",\"at\":\"com/android/server/wm/ActivityStarter.java\"},\"-1483435730\":{\"message\":\"InsetsSource setWin %s for type %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_WINDOW_INSETS\",\"at\":\"com/android/server/wm/InsetsSourceProvider.java\"},\"-1480772131\":{\"message\":\"No app or window is requesting an orientation, return %d for display id=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/DisplayContent.java\"},\"-1478175541\":{\"message\":\"No longer animating wallpaper targets!\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WALLPAPER\",\"at\":\"com/android/server/wm/WallpaperController.java\"},\"-1474602871\":{\"message\":\"Launch on display check: disallow launch on virtual display for not-embedded activity.\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/ActivityTaskSupervisor.java\"},\"-1474292612\":{\"message\":\"Could not find task for id: %d\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/ActivityTaskManagerService.java\"},\"-1471946192\":{\"message\":\"Marking app token %s with replacing child windows.\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-1468740466\":{\"message\":\"Moving to PAUSED: %s (starting in paused state)\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityTaskSupervisor.java\"},\"-1452274694\":{\"message\":\"      CAN PROMOTE: promoting to parent %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"-1443029505\":{\"message\":\"SAFE MODE ENABLED (menu=%d s=%d dpad=%d trackball=%d)\",\"level\":\"INFO\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-1442613680\":{\"message\":\" Creating Ready-group for Transition %d with root=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"-1438175584\":{\"message\":\"Input focus has changed to %s display=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_FOCUS_LIGHT\",\"at\":\"com/android/server/wm/InputMonitor.java\"},\"-1434147454\":{\"message\":\"cleanupAnimation(): Notify animation finished mPendingAnimations=%d reorderMode=%d\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_RECENTS_ANIMATIONS\",\"at\":\"com/android/server/wm/RecentsAnimationController.java\"},\"-1432963966\":{\"message\":\"Moving to DESTROYING: %s (destroy requested)\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-1427184084\":{\"message\":\"addWindow: New client %s: window=%s Callers=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-1421296808\":{\"message\":\"Moving to RESUMED: %s (in existing)\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/TaskFragment.java\"},\"-1419762046\":{\"message\":\"moveRootTaskToDisplay: moving taskId=%d to displayId=%d\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/ActivityTaskManagerService.java\"},\"-1419461256\":{\"message\":\"resumeTopActivity: Resumed %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/TaskFragment.java\"},\"-1413901262\":{\"message\":\"startRecentsActivity(): intent=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_RECENTS_ANIMATIONS\",\"at\":\"com/android/server/wm/RecentsAnimation.java\"},\"-1410260105\":{\"message\":\"Schedule IME show for %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_IME\",\"at\":\"com/android/server/wm/ImeInsetsSourceProvider.java\"},\"-1394745488\":{\"message\":\"ControlAdapter onAnimationCancelled mSource: %s mControlTarget: %s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_WINDOW_INSETS\",\"at\":\"com/android/server/wm/InsetsSourceProvider.java\"},\"-1391944764\":{\"message\":\"SURFACE DESTROY: %s. %s\",\"level\":\"INFO\",\"group\":\"WM_SHOW_SURFACE_ALLOC\",\"at\":\"com/android/server/wm/WindowStateAnimator.java\"},\"-1389772804\":{\"message\":\"Attempted to add voice interaction window with bad token %s.  Aborting.\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-1376035390\":{\"message\":\"No task found\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/RootWindowContainer.java\"},\"-1375751630\":{\"message\":\"  --- Start combine pass ---\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"-1364754753\":{\"message\":\"Task vanished taskId=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/TaskOrganizerController.java\"},\"-1352076759\":{\"message\":\"Removing app token: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-1350198040\":{\"message\":\"hideBootMessagesLocked: mDisplayEnabled=%b mForceDisplayEnabled=%b mShowingBootMessages=%b mSystemBooted=%b. %s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_BOOT\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-1343787701\":{\"message\":\"startBackNavigation task=%s, topRunningActivity=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_BACK_PREVIEW\",\"at\":\"com/android/server/wm/BackNavigationController.java\"},\"-1340540100\":{\"message\":\"Creating SnapshotStartingData\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STARTING_WINDOW\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-1311436264\":{\"message\":\"Unregister task fragment organizer=%s uid=%d pid=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/TaskFragmentOrganizerController.java\"},\"-1305966693\":{\"message\":\"Sending position change to %s, onTop: %b\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-1305791032\":{\"message\":\"Moving to STOPPED: %s (stop complete)\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-1305755880\":{\"message\":\"Initial config: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONFIGURATION\",\"at\":\"com/android/server/wm/ActivityTaskManagerService.java\"},\"-1304806505\":{\"message\":\"Starting new activity %s in new task %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/ActivityStarter.java\"},\"-1292329638\":{\"message\":\"Added starting %s: startingWindow=%s startingView=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STARTING_WINDOW\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-1270731689\":{\"message\":\"Attempted to set replacing window on app token with no content %s\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-1270148832\":{\"message\":\"Resize start waiting for draw, mDrawState=DRAW_PENDING in %s, surfaceController %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_RESIZE\",\"at\":\"com/android/server/wm/WindowState.java\"},\"-1263316010\":{\"message\":\"Computed rotation=%s (%d) for display id=%d based on lastOrientation=%s (%d) and oldRotation=%s (%d)\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/DisplayRotation.java\"},\"-1259022216\":{\"message\":\"SURFACE HIDE ( %s ): %s\",\"level\":\"INFO\",\"group\":\"WM_SHOW_TRANSACTIONS\",\"at\":\"com/android/server/wm/WindowSurfaceController.java\"},\"-1257821162\":{\"message\":\"OUT SURFACE %s: copied\",\"level\":\"INFO\",\"group\":\"WM_SHOW_TRANSACTIONS\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-1248645819\":{\"message\":\"\\tAdd container=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_REMOTE_ANIMATIONS\",\"at\":\"com/android/server/wm/RemoteAnimationController.java\"},\"-1248290210\":{\"message\":\"Passing transform hint %d for window %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-1228653755\":{\"message\":\"Launch on display check: displayId=%d callingPid=%d callingUid=%d\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/ActivityTaskSupervisor.java\"},\"-1219773477\":{\"message\":\"setInputConsumerEnabled(%s): mCanceled=%b\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_RECENTS_ANIMATIONS\",\"at\":\"com/android/server/wm/RecentsAnimationController.java\"},\"-1207757583\":{\"message\":\"startAnimation(): Notify animation start: %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_RECENTS_ANIMATIONS\",\"at\":\"com/android/server/wm/RecentsAnimationController.java\"},\"-1198579104\":{\"message\":\"Pushing next activity %s out to target's task %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/ResetTargetTaskHelper.java\"},\"-1193946201\":{\"message\":\"Can't report activity position update - client not running, activityRecord=%s\",\"level\":\"WARN\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-1187377055\":{\"message\":\"Enqueue pending stop if needed: %s wasStopping=%b visibleRequested=%b\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/TaskFragment.java\"},\"-1185473319\":{\"message\":\"ControlAdapter startAnimation mSource: %s controlTarget: %s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_WINDOW_INSETS\",\"at\":\"com/android/server/wm/InsetsSourceProvider.java\"},\"-1176488860\":{\"message\":\"SURFACE isSecure=%b: %s\",\"level\":\"INFO\",\"group\":\"WM_SHOW_TRANSACTIONS\",\"at\":\"com/android/server/wm/WindowSurfaceController.java\"},\"-1164930508\":{\"message\":\"Moving to RESUMED: %s (starting new instance) callers=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/Task.java\"},\"-1156118957\":{\"message\":\"Updated config=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_RECENTS_ANIMATIONS\",\"at\":\"com/android/server/wm/RecentsAnimation.java\"},\"-1153814764\":{\"message\":\"onAnimationCancelled\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_REMOTE_ANIMATIONS\",\"at\":\"com/android/server/wm/NonAppWindowAnimationAdapter.java\"},\"-1145384901\":{\"message\":\"shouldWaitAnimatingExit: isTransition: %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/WindowState.java\"},\"-1142279614\":{\"message\":\"Looking for focus: %s, flags=%d, canReceive=%b, reason=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_FOCUS\",\"at\":\"com/android/server/wm/DisplayContent.java\"},\"-1136467585\":{\"message\":\"The listener does not exist.\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/WindowContextListenerController.java\"},\"-1136139407\":{\"message\":\"no-history finish of %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-1130891072\":{\"message\":\"Orientation continue waiting for draw in %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/WindowStateAnimator.java\"},\"-1130868271\":{\"message\":\"Resizing %s WITH DRAW PENDING\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/WindowState.java\"},\"-1128015008\":{\"message\":\"Schedule remove starting %s startingWindow=%s startingView=%s Callers=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STARTING_WINDOW\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-1117599386\":{\"message\":\"Deferring rotation, display is not enabled.\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/DisplayRotation.java\"},\"-1115019498\":{\"message\":\"Configuration & display unchanged in %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONFIGURATION\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-1113134997\":{\"message\":\"Attempted to add application window with unknown token %s.  Aborting.\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-1108775960\":{\"message\":\"%s is requesting orientation %d (%s)\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/WindowContainer.java\"},\"-1103716954\":{\"message\":\"Not removing %s due to exit animation\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/WindowState.java\"},\"-1103115659\":{\"message\":\"Performing post-rotate rotation\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/RootWindowContainer.java\"},\"-1101551167\":{\"message\":\"Auto-PIP allowed, entering PIP mode directly: %s, didAutoPip: %b\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/TaskFragment.java\"},\"-1089874824\":{\"message\":\"SURFACE SHOW (performLayout): %s\",\"level\":\"INFO\",\"group\":\"WM_SHOW_TRANSACTIONS\",\"at\":\"com/android/server/wm/WindowSurfaceController.java\"},\"-1076978367\":{\"message\":\"thawRotation: mRotation=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-1069336896\":{\"message\":\"onRootTaskOrderChanged(): rootTask=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_RECENTS_ANIMATIONS\",\"at\":\"com/android/server/wm/RecentsAnimation.java\"},\"-1060365734\":{\"message\":\"Attempted to add QS dialog window with bad token %s.  Aborting.\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-1047945589\":{\"message\":\"Remove client=%x, surfaceController=%s Callers=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_FOCUS\",\"at\":\"com/android/server/wm/WindowState.java\"},\"-1042574499\":{\"message\":\"Attempted to add Accessibility overlay window with unknown token %s.  Aborting.\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-1022146708\":{\"message\":\"Skipping %s: mismatch activity type\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/RootWindowContainer.java\"},\"-1016578046\":{\"message\":\"Moving to %s Relaunching %s callers=%s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-1009117329\":{\"message\":\"isFetchingAppTransitionSpecs=true\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/AppTransitionController.java\"},\"-1003678883\":{\"message\":\"Cleaning splash screen token=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STARTING_WINDOW\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-1003060523\":{\"message\":\"Finish needs to pause: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-993378225\":{\"message\":\"finishDrawingLocked: mDrawState=COMMIT_DRAW_PENDING %s in %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_DRAW\",\"at\":\"com/android/server/wm/WindowStateAnimator.java\"},\"-986746907\":{\"message\":\"Starting window removed %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_STARTING_WINDOW\",\"at\":\"com/android/server/wm/WindowState.java\"},\"-957060823\":{\"message\":\"Moving to PAUSING: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/TaskFragment.java\"},\"-951939129\":{\"message\":\"Unregister task organizer=%s uid=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/TaskOrganizerController.java\"},\"-948446688\":{\"message\":\"Create TaskDisplayArea uid=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/DisplayAreaOrganizerController.java\"},\"-938271693\":{\"message\":\"allResumedActivitiesIdle: rootTask=%d %s not idle\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/RootWindowContainer.java\"},\"-937498525\":{\"message\":\"Executing finish of failed to pause activity: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-930893991\":{\"message\":\"Set sync ready, syncId=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/WindowOrganizerController.java\"},\"-929676529\":{\"message\":\"Configuration changes for %s, allChanges=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONFIGURATION\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-927199900\":{\"message\":\"Updating global configuration to: %s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_CONFIGURATION\",\"at\":\"com/android/server/wm/ActivityTaskManagerService.java\"},\"-926231510\":{\"message\":\"State unchanged from:%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-917215012\":{\"message\":\"%s: caller %d is using old GET_TASKS but privileged; allowing\",\"level\":\"WARN\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/ActivityTaskManagerService.java\"},\"-916108501\":{\"message\":\"Adding %s to %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/WindowState.java\"},\"-914253865\":{\"message\":\"Attempted to add voice interaction window with unknown token %s.  Aborting.\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-904499590\":{\"message\":\"Provided surface for layer mirroring on display %d is not present, so do not update the surface\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_LAYER_MIRRORING\",\"at\":\"com/android/server/wm/DisplayContent.java\"},\"-883738232\":{\"message\":\"Adding more than one toast window for UID at a time.\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-877494781\":{\"message\":\"Start pushing activity %s out to bottom task %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/ResetTargetTaskHelper.java\"},\"-874888131\":{\"message\":\"Set transition ready=%b %d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"-874446906\":{\"message\":\"showBootMessage: msg=%s always=%b mAllowBootMessages=%b mShowingBootMessages=%b mSystemBooted=%b. %s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_BOOT\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-863438038\":{\"message\":\"Aborting Transition: %d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"-861859917\":{\"message\":\"Attempted to add window to a display that does not exist: %d. Aborting.\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-861707633\":{\"message\":\"Destroying surface %s called by %s\",\"level\":\"INFO\",\"group\":\"WM_SHOW_SURFACE_ALLOC\",\"at\":\"com/android/server/wm/WindowSurfaceController.java\"},\"-856750101\":{\"message\":\"Launch on display check: allow launch for owner of the display\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/ActivityTaskSupervisor.java\"},\"-856590985\":{\"message\":\"dcTarget: %s mImeRequester: %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_IME\",\"at\":\"com/android/server/wm/ImeInsetsSourceProvider.java\"},\"-855366859\":{\"message\":\"        merging children in from %s: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"-853404763\":{\"message\":\"\\twallpaper=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_REMOTE_ANIMATIONS\",\"at\":\"com/android/server/wm/RemoteAnimationController.java\"},\"-853226675\":{\"message\":\"Attempted to add window with exiting application token .%s Aborting.\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-846931068\":{\"message\":\"Update camera compat control state to %s for taskId=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/TaskOrganizerController.java\"},\"-846078709\":{\"message\":\"Configuration doesn't matter in finishing %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONFIGURATION\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-814760297\":{\"message\":\"Looking for task of %s in %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/RootWindowContainer.java\"},\"-809771899\":{\"message\":\"findFocusedWindow: Reached focused app=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_FOCUS_LIGHT\",\"at\":\"com/android/server/wm/DisplayContent.java\"},\"-804217032\":{\"message\":\"Skipping config check (will change): %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONFIGURATION\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-784959154\":{\"message\":\"Attempted to add private presentation window to a non-private display.  Aborting.\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-783405930\":{\"message\":\"Performing post-rotate rotation\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-779535710\":{\"message\":\"Transition %d: Set %s as transient-launch\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"-775004869\":{\"message\":\"Not a match: %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/RootWindowContainer.java\"},\"-771177730\":{\"message\":\"Removing focused app token:%s displayId=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_FOCUS_LIGHT\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-766059044\":{\"message\":\"Display id=%d selected orientation %s (%d), got rotation %s (%d)\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/DisplayRotation.java\"},\"-760801764\":{\"message\":\"onAnimationCancelled\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_REMOTE_ANIMATIONS\",\"at\":\"com/android/server/wm/WallpaperAnimationAdapter.java\"},\"-760764543\":{\"message\":\"Focus not requested for window=%s because it has no surface or is not focusable.\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_FOCUS_LIGHT\",\"at\":\"com/android/server/wm/InputMonitor.java\"},\"-754503024\":{\"message\":\"Relayout %s: oldVis=%d newVis=%d. %s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_SCREEN_ON\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-743856570\":{\"message\":\"shouldWaitAnimatingExit: isAnimating: %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/WindowState.java\"},\"-743431900\":{\"message\":\"Configuration no differences in %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONFIGURATION\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-729530161\":{\"message\":\"Moving to DESTROYED: %s (no app)\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-706481945\":{\"message\":\"TaskFragment parent info changed name=%s parentTaskId=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/TaskFragmentOrganizerController.java\"},\"-705939410\":{\"message\":\"Waiting for pause to complete...\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-703543418\":{\"message\":\"      check sibling %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"-702650156\":{\"message\":\"Override with TaskFragment remote animation for transit=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/AppTransitionController.java\"},\"-701167286\":{\"message\":\"applyAnimation: transit=%s, enter=%b, wc=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS_ANIM\",\"at\":\"com/android/server/wm/WindowContainer.java\"},\"-694710814\":{\"message\":\"Pausing rotation during drag\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/DragState.java\"},\"-677449371\":{\"message\":\"moveTaskToRootTask: moving task=%d to rootTaskId=%d toTop=%b\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/ActivityTaskManagerService.java\"},\"-672355406\":{\"message\":\"  Rejecting as no-op: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"-668956537\":{\"message\":\"  THUMBNAIL %s: CREATE\",\"level\":\"INFO\",\"group\":\"WM_SHOW_TRANSACTIONS\",\"at\":\"com/android/server/wm/SurfaceFreezer.java\"},\"-666510420\":{\"message\":\"With display frozen, orientationChangeComplete=%b\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/RootWindowContainer.java\"},\"-663411559\":{\"message\":\"Going ahead with updating layer mirroring for display %d to new bounds %s and/or orientation %d.\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_LAYER_MIRRORING\",\"at\":\"com/android/server/wm/DisplayContent.java\"},\"-655104359\":{\"message\":\"Frontmost changed immersion: %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_IMMERSIVE\",\"at\":\"com/android/server/wm/ActivityClientController.java\"},\"-653156702\":{\"message\":\"createAppAnimations()\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_REMOTE_ANIMATIONS\",\"at\":\"com/android/server/wm/RemoteAnimationController.java\"},\"-648891906\":{\"message\":\"Activity not running or entered PiP, resuming next.\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/TaskFragment.java\"},\"-641258376\":{\"message\":\"realStartActivityLocked: Skipping start of r=%s some activities pausing...\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityTaskSupervisor.java\"},\"-639217716\":{\"message\":\"setFocusedApp %s displayId=%d Callers=%s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_FOCUS_LIGHT\",\"at\":\"com/android/server/wm/DisplayContent.java\"},\"-635082269\":{\"message\":\"******** booted=%b msg=%b haveBoot=%b haveApp=%b haveWall=%b wallEnabled=%b haveKeyguard=%b\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_SCREEN_ON\",\"at\":\"com/android/server/wm/DisplayContent.java\"},\"-622997754\":{\"message\":\"postWindowRemoveCleanupLocked: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-622017164\":{\"message\":\"Finish Transition: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/TransitionController.java\"},\"-618015844\":{\"message\":\"performEnableScreen: mDisplayEnabled=%b mForceDisplayEnabled=%b mShowingBootMessages=%b mSystemBooted=%b mOnlyCore=%b. %s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_BOOT\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-597091183\":{\"message\":\"Delete TaskDisplayArea uid=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/DisplayAreaOrganizerController.java\"},\"-593535526\":{\"message\":\"Binding proc %s with config %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONFIGURATION\",\"at\":\"com/android/server/am/ActivityManagerService.java\"},\"-583031528\":{\"message\":\"%s\",\"level\":\"INFO\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-576070986\":{\"message\":\"Performing post-rotate rotation after seamless rotation\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/DisplayRotation.java\"},\"-567946587\":{\"message\":\"Requested redraw for orientation change: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/WindowState.java\"},\"-561092364\":{\"message\":\"onPointerDownOutsideFocusLocked called on %s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_FOCUS_LIGHT\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-549028919\":{\"message\":\"enableScreenIfNeededLocked: mDisplayEnabled=%b mForceDisplayEnabled=%b mShowingBootMessages=%b mSystemBooted=%b. %s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_BOOT\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-548282316\":{\"message\":\"setLockTaskMode: Locking to %s Callers=%s\",\"level\":\"WARN\",\"group\":\"WM_DEBUG_LOCKTASK\",\"at\":\"com/android/server/wm/LockTaskController.java\"},\"-547111355\":{\"message\":\"hideIme Control target: %s \",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_IME\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-545190927\":{\"message\":\"<<< CLOSE TRANSACTION animate\",\"level\":\"INFO\",\"group\":\"WM_SHOW_TRANSACTIONS\",\"at\":\"com/android/server/wm/WindowAnimator.java\"},\"-542756093\":{\"message\":\"TaskFragment vanished name=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/TaskFragmentOrganizerController.java\"},\"-532081937\":{\"message\":\"  Commit activity becoming invisible: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"-521613870\":{\"message\":\"App died during pause, not stopping: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/TaskFragment.java\"},\"-519504830\":{\"message\":\"applyAnimation: anim=%s nextAppTransition=ANIM_CUSTOM transit=%s isEntrance=%b Callers=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS_ANIM\",\"at\":\"com/android/server/wm/AppTransition.java\"},\"-509601642\":{\"message\":\"    checking %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"-507657818\":{\"message\":\"Window %s is already added\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-503656156\":{\"message\":\"Update process config of %s to new config %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONFIGURATION\",\"at\":\"com/android/server/wm/ActivityTaskManagerService.java\"},\"-497620140\":{\"message\":\"Transaction ready, syncId=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/WindowOrganizerController.java\"},\"-496681057\":{\"message\":\"Attempted to get remove mode of a display that does not exist: %d\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-484194149\":{\"message\":\"no-history finish of %s on new resume\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityTaskSupervisor.java\"},\"-481924678\":{\"message\":\"handleNotObscuredLocked w: %s, w.mHasSurface: %b, w.isOnScreen(): %b, w.isDisplayedLw(): %b, w.mAttrs.userActivityTimeout: %d\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_KEEP_SCREEN_ON\",\"at\":\"com/android/server/wm/RootWindowContainer.java\"},\"-463348344\":{\"message\":\"Removing and adding activity %s to root task at top callers=%s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/Task.java\"},\"-449118559\":{\"message\":\"Trying to update display configuration for invalid process, pid=%d\",\"level\":\"WARN\",\"group\":\"WM_DEBUG_CONFIGURATION\",\"at\":\"com/android/server/wm/ActivityTaskManagerService.java\"},\"-446752714\":{\"message\":\"        SKIP: sibling contains top target %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"-445944810\":{\"message\":\"finish(%b): mCanceled=%b\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_RECENTS_ANIMATIONS\",\"at\":\"com/android/server/wm/RecentsAnimationController.java\"},\"-443173857\":{\"message\":\"Moving pending starting from %s to %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STARTING_WINDOW\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-439951996\":{\"message\":\"Disabling listeners\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/DisplayRotation.java\"},\"-436553282\":{\"message\":\"Remove sleep token: tag=%s, displayId=%d\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/RootWindowContainer.java\"},\"-415865166\":{\"message\":\"findFocusedWindow: Found new focus @ %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_FOCUS_LIGHT\",\"at\":\"com/android/server/wm/DisplayContent.java\"},\"-401282500\":{\"message\":\"destroyIfPossible: r=%s destroy returned removed=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_CONTAINERS\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-401029526\":{\"message\":\"%s: caller %d does not hold REAL_GET_TASKS; limiting output\",\"level\":\"WARN\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/ActivityTaskManagerService.java\"},\"-399343789\":{\"message\":\"Skipping %s: different user\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/RootWindowContainer.java\"},\"-393505149\":{\"message\":\"unable to update pointer icon\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-386552155\":{\"message\":\"Attempted to set system decors flag to a display that does not exist: %d\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-384564722\":{\"message\":\"Unable to start layer mirroring for display %d since the surface is not available.\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_LAYER_MIRRORING\",\"at\":\"com/android/server/wm/DisplayContent.java\"},\"-381475323\":{\"message\":\"DisplayContent: boot is waiting for window of type %d to be drawn\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_BOOT\",\"at\":\"com/android/server/wm/DisplayContent.java\"},\"-379068494\":{\"message\":\"unknownApps is not empty: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/AppTransitionController.java\"},\"-374767836\":{\"message\":\"setAppVisibility(%s, visible=%b): %s visible=%b mVisibleRequested=%b Callers=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-373110070\":{\"message\":\"Skipping task: (mismatch activity/task) %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/RootWindowContainer.java\"},\"-360208282\":{\"message\":\"Animating wallpapers: old: %s hidden=%b new: %s hidden=%b\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WALLPAPER\",\"at\":\"com/android/server/wm/WallpaperController.java\"},\"-354571697\":{\"message\":\"Existence Changed in transition %d: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"-344488673\":{\"message\":\"Finishing drawing window %s: mDrawState=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STARTING_WINDOW\",\"at\":\"com/android/server/wm/WindowStateAnimator.java\"},\"-322743468\":{\"message\":\"setInputMethodInputTarget %s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_IME\",\"at\":\"com/android/server/wm/DisplayContent.java\"},\"-322035974\":{\"message\":\"App freeze timeout expired.\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-320419645\":{\"message\":\"Removing replaced window: %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/WindowState.java\"},\"-317761482\":{\"message\":\"Create sleep token: tag=%s, displayId=%d\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/RootWindowContainer.java\"},\"-317194205\":{\"message\":\"clearLockedTasks: %s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_LOCKTASK\",\"at\":\"com/android/server/wm/LockTaskController.java\"},\"-312353598\":{\"message\":\"Executing finish of activity: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/TaskFragment.java\"},\"-310337305\":{\"message\":\"Activity config changed during resume: %s, new next: %s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/TaskFragment.java\"},\"-309399422\":{\"message\":\"Display %d state is now (%d), so update layer mirroring?\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_LAYER_MIRRORING\",\"at\":\"com/android/server/wm/DisplayContent.java\"},\"-304728471\":{\"message\":\"New wallpaper: target=%s prev=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_WALLPAPER\",\"at\":\"com/android/server/wm/WallpaperController.java\"},\"-302468788\":{\"message\":\"Expected target rootTask=%s to be top most but found rootTask=%s\",\"level\":\"WARN\",\"group\":\"WM_DEBUG_RECENTS_ANIMATIONS\",\"at\":\"com/android/server/wm/RecentsAnimation.java\"},\"-302335479\":{\"message\":\"        remove from topTargets %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"-292790591\":{\"message\":\"Attempted to set IME policy to a display that does not exist: %d\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-275077723\":{\"message\":\"New animation: %s old animation: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WALLPAPER\",\"at\":\"com/android/server/wm/WallpaperController.java\"},\"-262984451\":{\"message\":\"Relaunch failed %s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-251259736\":{\"message\":\"No longer freezing: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-248761393\":{\"message\":\"startPausing: taskFrag =%s mResumedActivity=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/TaskFragment.java\"},\"-240296576\":{\"message\":\"handleAppTransitionReady: displayId=%d appTransition={%s} openingApps=[%s] closingApps=[%s] transit=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/AppTransitionController.java\"},\"-235225312\":{\"message\":\"Skipping config check for initializing activity: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONFIGURATION\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-230587670\":{\"message\":\"SyncGroup %d:  Unfinished container: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_SYNC_ENGINE\",\"at\":\"com/android/server/wm/BLASTSyncEngine.java\"},\"-208825711\":{\"message\":\"shouldWaitAnimatingExit: isWallpaperTarget: %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/WindowState.java\"},\"-198463978\":{\"message\":\"updateRotationUnchecked: alwaysSendConfiguration=%b forceRelayout=%b\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-193782861\":{\"message\":\"Final remove of window: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_MOVEMENT\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-190034097\":{\"message\":\"Unable to retrieve window container to update layer mirroring for display %d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_LAYER_MIRRORING\",\"at\":\"com/android/server/wm/DisplayContent.java\"},\"-182877285\":{\"message\":\"Wallpaper layer changed: assigning layers + relayout\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WALLPAPER\",\"at\":\"com/android/server/wm/DisplayContent.java\"},\"-177040661\":{\"message\":\"Start rotation animation. customAnim=%s, mCurRotation=%s, mOriginalRotation=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/ScreenRotationAnimation.java\"},\"-172900257\":{\"message\":\"addTaskToTargets, target: %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_RECENTS_ANIMATIONS\",\"at\":\"com/android/server/wm/RecentsAnimationController.java\"},\"-172326720\":{\"message\":\"Saving icicle of %s: %s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-168799453\":{\"message\":\"Allowing features %d:0x%s\",\"level\":\"WARN\",\"group\":\"WM_DEBUG_LOCKTASK\",\"at\":\"com/android/server/wm/ActivityTaskManagerService.java\"},\"-167822951\":{\"message\":\"Attempted to add starting window to token with already existing starting window\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-163974242\":{\"message\":\"setFinishTaskTransaction(%d): transaction=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_RECENTS_ANIMATIONS\",\"at\":\"com/android/server/wm/RecentsAnimationController.java\"},\"-143556958\":{\"message\":\"resumeNextFocusableActivityWhenRootTaskIsEmpty: %s, go home\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/Task.java\"},\"-134091882\":{\"message\":\"Screenshotting Activity %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_BACK_PREVIEW\",\"at\":\"com/android/server/wm/TaskFragment.java\"},\"-124316973\":{\"message\":\"Translucent=%s Floating=%s ShowWallpaper=%s Disable=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STARTING_WINDOW\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-116086365\":{\"message\":\"******************** ENABLING SCREEN!\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_SCREEN_ON\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-108977760\":{\"message\":\"Sandbox max bounds for uid %s to bounds %s. config to never sandbox = %s, config to always sandbox = %s, letterboxing from mismatch with parent bounds = %s, has mCompatDisplayInsets = %s, should create compatDisplayInsets = %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_CONFIGURATION\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-106400104\":{\"message\":\"Preload recents with %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_RECENTS_ANIMATIONS\",\"at\":\"com/android/server/wm/RecentsAnimation.java\"},\"-90559682\":{\"message\":\"Config is skipping already pausing %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONFIGURATION\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-87705714\":{\"message\":\"findFocusedWindow: focusedApp=null using new focus @ %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_FOCUS_LIGHT\",\"at\":\"com/android/server/wm/DisplayContent.java\"},\"-87703044\":{\"message\":\"Boot completed: SurfaceFlinger is dead!\",\"level\":\"ERROR\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-86763148\":{\"message\":\"  KILL SURFACE SESSION %s\",\"level\":\"INFO\",\"group\":\"WM_SHOW_TRANSACTIONS\",\"at\":\"com/android/server/wm/Session.java\"},\"-80004683\":{\"message\":\"Resume failed; resetting state to %s: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/TaskFragment.java\"},\"-79877120\":{\"message\":\"Display %d has content (%b) so disable layer mirroring\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_LAYER_MIRRORING\",\"at\":\"com/android/server/wm/DisplayContent.java\"},\"-70719599\":{\"message\":\"Unregister remote animations for organizer=%s uid=%d pid=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/TaskFragmentOrganizerController.java\"},\"-55185509\":{\"message\":\"setFocusedTask: taskId=%d touchedActivity=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_FOCUS\",\"at\":\"com/android/server/wm/ActivityTaskManagerService.java\"},\"-50336993\":{\"message\":\"moveFocusableActivityToTop: activity=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_FOCUS\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-33096143\":{\"message\":\"applyAnimation: transition animation is disabled or skipped. container=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS_ANIM\",\"at\":\"com/android/server/wm/WindowContainer.java\"},\"-23020844\":{\"message\":\"Back: Reset surfaces\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_BACK_PREVIEW\",\"at\":\"com/android/server/wm/BackNavigationController.java\"},\"-21399771\":{\"message\":\"activity %s already destroying, skipping request with reason:%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-8483143\":{\"message\":\"No root task above target root task=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_RECENTS_ANIMATIONS\",\"at\":\"com/android/server/wm/RecentsAnimation.java\"}},\"groups\":{\"WM_DEBUG_ADD_REMOVE\":{\"tag\":\"WindowManager\"},\"WM_DEBUG_APP_TRANSITIONS\":{\"tag\":\"WindowManager\"},\"WM_DEBUG_APP_TRANSITIONS_ANIM\":{\"tag\":\"WindowManager\"},\"WM_DEBUG_BACK_PREVIEW\":{\"tag\":\"CoreBackPreview\"},\"WM_DEBUG_BOOT\":{\"tag\":\"WindowManager\"},\"WM_DEBUG_CONFIGURATION\":{\"tag\":\"WindowManager\"},\"WM_DEBUG_CONTAINERS\":{\"tag\":\"WindowManager\"},\"WM_DEBUG_DRAW\":{\"tag\":\"WindowManager\"},\"WM_DEBUG_FOCUS\":{\"tag\":\"WindowManager\"},\"WM_DEBUG_FOCUS_LIGHT\":{\"tag\":\"WindowManager\"},\"WM_DEBUG_IME\":{\"tag\":\"WindowManager\"},\"WM_DEBUG_IMMERSIVE\":{\"tag\":\"WindowManager\"},\"WM_DEBUG_KEEP_SCREEN_ON\":{\"tag\":\"WindowManager\"},\"WM_DEBUG_LAYER_MIRRORING\":{\"tag\":\"WindowManager\"},\"WM_DEBUG_LOCKTASK\":{\"tag\":\"WindowManager\"},\"WM_DEBUG_ORIENTATION\":{\"tag\":\"WindowManager\"},\"WM_DEBUG_RECENTS_ANIMATIONS\":{\"tag\":\"WindowManager\"},\"WM_DEBUG_REMOTE_ANIMATIONS\":{\"tag\":\"WindowManager\"},\"WM_DEBUG_RESIZE\":{\"tag\":\"WindowManager\"},\"WM_DEBUG_SCREEN_ON\":{\"tag\":\"WindowManager\"},\"WM_DEBUG_STARTING_WINDOW\":{\"tag\":\"WindowManager\"},\"WM_DEBUG_STATES\":{\"tag\":\"WindowManager\"},\"WM_DEBUG_SWITCH\":{\"tag\":\"WindowManager\"},\"WM_DEBUG_SYNC_ENGINE\":{\"tag\":\"WindowManager\"},\"WM_DEBUG_TASKS\":{\"tag\":\"WindowManager\"},\"WM_DEBUG_WALLPAPER\":{\"tag\":\"WindowManager\"},\"WM_DEBUG_WINDOW_INSETS\":{\"tag\":\"WindowManager\"},\"WM_DEBUG_WINDOW_MOVEMENT\":{\"tag\":\"WindowManager\"},\"WM_DEBUG_WINDOW_ORGANIZER\":{\"tag\":\"WindowManager\"},\"WM_DEBUG_WINDOW_TRANSITIONS\":{\"tag\":\"WindowManager\"},\"WM_ERROR\":{\"tag\":\"WindowManager\"},\"WM_SHOW_SURFACE_ALLOC\":{\"tag\":\"WindowManager\"},\"WM_SHOW_TRANSACTIONS\":{\"tag\":\"WindowManager\"}}}");
+module.exports = JSON.parse("{\"version\":\"1.0.0\",\"messages\":{\"3593205\":{\"message\":\"commitVisibility: %s: visible=%b mVisibleRequested=%b\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/WallpaperWindowToken.java\"},\"9803449\":{\"message\":\"startFreezingDisplayLocked: exitAnim=%d enterAnim=%d called by %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"10608884\":{\"message\":\"  FREEZE %s: CREATE\",\"level\":\"INFO\",\"group\":\"WM_SHOW_SURFACE_ALLOC\",\"at\":\"com/android/server/wm/ScreenRotationAnimation.java\"},\"11060725\":{\"message\":\"Attempted to get system decors flag of a display that does not exist: %d\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"17696244\":{\"message\":\"startAnimation(): mPendingStart=%b mCanceled=%b\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_RECENTS_ANIMATIONS\",\"at\":\"com/android/server/wm/RecentsAnimationController.java\"},\"35398067\":{\"message\":\"goodToGo(): onAnimationStart, transit=%s, apps=%d, wallpapers=%d, nonApps=%d\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_REMOTE_ANIMATIONS\",\"at\":\"com/android/server/wm/RemoteAnimationController.java\"},\"38267433\":{\"message\":\"Attempted to reset replacing window on non-existing app token %s\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"45285419\":{\"message\":\"startingWindow was set but startingSurface==null, couldn't remove\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STARTING_WINDOW\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"51200510\":{\"message\":\"  BLACK %s: DESTROY\",\"level\":\"INFO\",\"group\":\"WM_SHOW_SURFACE_ALLOC\",\"at\":\"com/android/server/wm/BlackFrame.java\"},\"51628177\":{\"message\":\"Attempted to get windowing mode of a display that does not exist: %d\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"51927339\":{\"message\":\"Skipping %s: voice session\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/RootWindowContainer.java\"},\"74885950\":{\"message\":\"Waiting for top state to be released by %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityTaskSupervisor.java\"},\"83950285\":{\"message\":\"removeAnimation(%d)\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_RECENTS_ANIMATIONS\",\"at\":\"com/android/server/wm/RecentsAnimationController.java\"},\"90764070\":{\"message\":\"Could not report token removal to the window token client.\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowContextListenerController.java\"},\"95216706\":{\"message\":\"hideIme target: %s \",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_IME\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"95902367\":{\"message\":\"Relayout of %s: focusMayChange=%b\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_FOCUS\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"100936473\":{\"message\":\"Wallpaper animation!\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/AppTransitionController.java\"},\"102618780\":{\"message\":\"resumeTopActivity: Pausing %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/TaskFragment.java\"},\"108170907\":{\"message\":\"Add starting %s: startingData=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STARTING_WINDOW\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"112145970\":{\"message\":\"      SKIP: its sibling was rejected\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"114070759\":{\"message\":\"New wallpaper target: %s prevTarget: %s caller=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WALLPAPER\",\"at\":\"com/android/server/wm/WallpaperController.java\"},\"115358443\":{\"message\":\"Focus changing: %s -> %s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_FOCUS_LIGHT\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"140319294\":{\"message\":\"IME target changed within ActivityRecord\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_IME\",\"at\":\"com/android/server/wm/ImeInsetsSourceProvider.java\"},\"146871307\":{\"message\":\"Tried to remove starting window but startingWindow was null: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STARTING_WINDOW\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"150351993\":{\"message\":\"addWindow: %s startingWindow=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STARTING_WINDOW\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"152914409\":{\"message\":\"  BLACK %s: CREATE layer=%d\",\"level\":\"INFO\",\"group\":\"WM_SHOW_SURFACE_ALLOC\",\"at\":\"com/android/server/wm/BlackFrame.java\"},\"155482615\":{\"message\":\"Focus requested for window=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_FOCUS_LIGHT\",\"at\":\"com/android/server/wm/InputMonitor.java\"},\"174572959\":{\"message\":\"DisplayArea info changed name=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/DisplayAreaOrganizerController.java\"},\"182319432\":{\"message\":\"        remove from targets %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"184362060\":{\"message\":\"screenshotTask(%d): mCanceled=%b\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_RECENTS_ANIMATIONS\",\"at\":\"com/android/server/wm/RecentsAnimationController.java\"},\"184610856\":{\"message\":\"Start calculating TransitionInfo based on participants: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"186668272\":{\"message\":\"Now changing app %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/AppTransitionController.java\"},\"189628502\":{\"message\":\"Moving to STOPPING: %s (stop requested)\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"200829729\":{\"message\":\"ScreenRotationAnimation onAnimationEnd\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/ScreenRotationAnimation.java\"},\"202263690\":{\"message\":\"rotationForOrientation(orient=%s (%d), last=%s (%d)); user=%s (%d) %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/DisplayRotation.java\"},\"210750281\":{\"message\":\"applyAnimationUnchecked, control: %s, task: %s, transit: %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_RECENTS_ANIMATIONS\",\"at\":\"com/android/server/wm/Task.java\"},\"221540118\":{\"message\":\"mUserActivityTimeout set to %d\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_KEEP_SCREEN_ON\",\"at\":\"com/android/server/wm/RootWindowContainer.java\"},\"232317536\":{\"message\":\"Set intercept back pressed on root=%b\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/TaskOrganizerController.java\"},\"240271590\":{\"message\":\"moveFocusableActivityToTop: unfocusable activity=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_FOCUS\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"241961619\":{\"message\":\"Adding %s to %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/WindowToken.java\"},\"246676969\":{\"message\":\"Attempted to add window with non-application token .%s Aborting.\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"248210157\":{\"message\":\"Finishing remote animation\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_REMOTE_ANIMATIONS\",\"at\":\"com/android/server/wm/RemoteAnimationController.java\"},\"251812577\":{\"message\":\"Register display organizer=%s uid=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/DisplayAreaOrganizerController.java\"},\"254883724\":{\"message\":\"addWindowToken: Attempted to add binder token: %s for already created window token: %s displayId=%d\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"255339989\":{\"message\":\"setFocusedRootTask: taskId=%d\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_FOCUS\",\"at\":\"com/android/server/wm/ActivityTaskManagerService.java\"},\"255692476\":{\"message\":\"**** GOOD TO GO\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/AppTransitionController.java\"},\"259206414\":{\"message\":\"Creating Transition: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/TransitionController.java\"},\"269576220\":{\"message\":\"Resuming rotation after drag\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/DragState.java\"},\"269976641\":{\"message\":\"goodToGo(): Animation canceled already\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_REMOTE_ANIMATIONS\",\"at\":\"com/android/server/wm/RemoteAnimationController.java\"},\"274773837\":{\"message\":\"applyAnimation: anim=%s nextAppTransition=ANIM_CLIP_REVEAL transit=%s Callers=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS_ANIM\",\"at\":\"com/android/server/wm/AppTransition.java\"},\"288485303\":{\"message\":\"Attempted to set remove mode to a display that does not exist: %d\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"289967521\":{\"message\":\"Check opening app=%s: allDrawn=%b startingDisplayed=%b startingMoved=%b isRelaunching()=%b startingWindow=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/AppTransitionController.java\"},\"292904800\":{\"message\":\"Deferring rotation, animation in progress.\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/DisplayRotation.java\"},\"295861935\":{\"message\":\"startLockTaskMode: %s\",\"level\":\"WARN\",\"group\":\"WM_DEBUG_LOCKTASK\",\"at\":\"com/android/server/wm/ActivityTaskManagerService.java\"},\"302969511\":{\"message\":\"Task info changed taskId=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/TaskOrganizerController.java\"},\"302992539\":{\"message\":\"addAnimation(%s)\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_RECENTS_ANIMATIONS\",\"at\":\"com/android/server/wm/RecentsAnimationController.java\"},\"306524472\":{\"message\":\"Stop failed; moving to STOPPED: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"309039362\":{\"message\":\"SURFACE MATRIX [%f,%f,%f,%f]: %s\",\"level\":\"INFO\",\"group\":\"WM_SHOW_TRANSACTIONS\",\"at\":\"com/android/server/wm/WindowSurfaceController.java\"},\"312030608\":{\"message\":\"New topFocusedDisplayId=%d\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_FOCUS_LIGHT\",\"at\":\"com/android/server/wm/RootWindowContainer.java\"},\"315395835\":{\"message\":\"Trying to add window with invalid user=%d\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"327461496\":{\"message\":\"Complete pause: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/TaskFragment.java\"},\"341055768\":{\"message\":\"resumeTopActivity: Skip resume: need to start pausing\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/TaskFragment.java\"},\"342460966\":{\"message\":\"DRAG %s: pos=(%d,%d)\",\"level\":\"INFO\",\"group\":\"WM_SHOW_TRANSACTIONS\",\"at\":\"com/android/server/wm/DragState.java\"},\"344795667\":{\"message\":\"*** APP TRANSITION TIMEOUT. displayId=%d isTransitionSet()=%b mOpeningApps.size()=%d mClosingApps.size()=%d mChangingApps.size()=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/AppTransition.java\"},\"350168164\":{\"message\":\"Removing activity %s, reason= %s callers=%s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"352982444\":{\"message\":\" allReady query: used=%b override=%b states=[%s]\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"355720268\":{\"message\":\"stopFreezingDisplayLocked: Unfreezing now\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"371173718\":{\"message\":\"finishSync cancel=%b for %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_SYNC_ENGINE\",\"at\":\"com/android/server/wm/WindowContainer.java\"},\"371641947\":{\"message\":\"Window Manager Crash %s\",\"level\":\"WTF\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"372792199\":{\"message\":\"Non-null activity for system window of rootType=%d\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"374506950\":{\"message\":\"Reporting activity moved to display, activityRecord=%s, displayId=%d, config=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_SWITCH\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"374972436\":{\"message\":\"performEnableScreen: Waiting for anim complete\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_BOOT\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"378825104\":{\"message\":\"Enqueueing pending pause: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/TaskFragment.java\"},\"397105698\":{\"message\":\"grantEmbeddedWindowFocus remove request for win=%s dropped since no candidate was found\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_FOCUS\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"397382873\":{\"message\":\"Moving to PAUSED: %s %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"399841913\":{\"message\":\"SURFACE RECOVER DESTROY: %s\",\"level\":\"INFO\",\"group\":\"WM_SHOW_SURFACE_ALLOC\",\"at\":\"com/android/server/wm/RootWindowContainer.java\"},\"405146734\":{\"message\":\"  Final targets: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"416924848\":{\"message\":\"InsetsSource Control %s for target %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_WINDOW_INSETS\",\"at\":\"com/android/server/wm/InsetsSourceProvider.java\"},\"417311568\":{\"message\":\"onResize: Resizing %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_RESIZE\",\"at\":\"com/android/server/wm/WindowState.java\"},\"422634333\":{\"message\":\"First draw done in potential wallpaper target %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WALLPAPER\",\"at\":\"com/android/server/wm/DisplayContent.java\"},\"424524729\":{\"message\":\"Attempted to add wallpaper window with unknown token %s.  Aborting.\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"431715812\":{\"message\":\"Launch on display check: allow launch any on display\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/ActivityTaskSupervisor.java\"},\"435494046\":{\"message\":\"Attempted to add window to a display for which the application does not have access: %d.  Aborting.\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"463993897\":{\"message\":\"Aborted waiting for drawn: %s\",\"level\":\"WARN\",\"group\":\"WM_DEBUG_SCREEN_ON\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"466506262\":{\"message\":\"Clear freezing of %s: visible=%b freezing=%b\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"485170982\":{\"message\":\"Not finishing noHistory %s on stop because we're just sleeping\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"487621047\":{\"message\":\"DisplayArea vanished name=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/DisplayAreaOrganizerController.java\"},\"508887531\":{\"message\":\"applyAnimation voice: anim=%s transit=%s isEntrance=%b Callers=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS_ANIM\",\"at\":\"com/android/server/wm/AppTransition.java\"},\"528150092\":{\"message\":\"        keep as target %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"531242746\":{\"message\":\"  THUMBNAIL %s: CREATE\",\"level\":\"INFO\",\"group\":\"WM_SHOW_TRANSACTIONS\",\"at\":\"com/android/server/wm/WindowContainerThumbnail.java\"},\"535103992\":{\"message\":\"Wallpaper may change!  Adjusting\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WALLPAPER\",\"at\":\"com/android/server/wm/RootWindowContainer.java\"},\"539077569\":{\"message\":\"Clear freezing of %s force=%b\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"544101314\":{\"message\":\"performEnableScreen: Waited %dms for all windows to be drawn\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_BOOT\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"550717438\":{\"message\":\"SyncGroup %d: Started for listener: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_SYNC_ENGINE\",\"at\":\"com/android/server/wm/BLASTSyncEngine.java\"},\"556758086\":{\"message\":\"Applying new update lock state '%s' for %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_IMMERSIVE\",\"at\":\"com/android/server/wm/ActivityTaskManagerService.java\"},\"557227556\":{\"message\":\"onAnimationFinished(): Notify animation finished:\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_REMOTE_ANIMATIONS\",\"at\":\"com/android/server/wm/RemoteAnimationController.java\"},\"558823034\":{\"message\":\"SURFACE isOpaque=%b: %s\",\"level\":\"INFO\",\"group\":\"WM_SHOW_TRANSACTIONS\",\"at\":\"com/android/server/wm/WindowSurfaceController.java\"},\"573582981\":{\"message\":\"reparent: moving activity=%s to new task fragment in task=%d at %d\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"579298675\":{\"message\":\"Moving to DESTROYED: %s (removed from history)\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"585096182\":{\"message\":\"SURFACE isColorSpaceAgnostic=%b: %s\",\"level\":\"INFO\",\"group\":\"WM_SHOW_TRANSACTIONS\",\"at\":\"com/android/server/wm/WindowSurfaceController.java\"},\"585839596\":{\"message\":\"call showInsets(ime) on %s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_IME\",\"at\":\"com/android/server/wm/ImeInsetsSourceProvider.java\"},\"594260577\":{\"message\":\"createWallpaperAnimations()\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_REMOTE_ANIMATIONS\",\"at\":\"com/android/server/wm/RemoteAnimationController.java\"},\"594260654\":{\"message\":\"Remove %s: mSurfaceController=%s mAnimatingExit=%b mRemoveOnExit=%b mHasSurface=%b surfaceShowing=%b animating=%b app-animation=%b mWillReplaceWindow=%b mDisplayFrozen=%b callers=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/WindowState.java\"},\"599897753\":{\"message\":\"Previous Activity is %s. Back type is %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_BACK_PREVIEW\",\"at\":\"com/android/server/wm/BackNavigationController.java\"},\"600140673\":{\"message\":\"checkBootAnimationComplete: Waiting for anim complete\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_BOOT\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"608694300\":{\"message\":\"  NEW SURFACE SESSION %s\",\"level\":\"INFO\",\"group\":\"WM_SHOW_TRANSACTIONS\",\"at\":\"com/android/server/wm/Session.java\"},\"609880497\":{\"message\":\"Display %d has no content and is on, so start recording for state %d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONTENT_RECORDING\",\"at\":\"com/android/server/wm/ContentRecorder.java\"},\"620368427\":{\"message\":\"******* TELLING SURFACE FLINGER WE ARE BOOTED!\",\"level\":\"INFO\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"620519522\":{\"message\":\"findFocusedWindow: No focusable windows, display=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_FOCUS_LIGHT\",\"at\":\"com/android/server/wm/DisplayContent.java\"},\"625447638\":{\"message\":\"Resize reasons for w=%s:  %s configChanged=%b dragResizingChanged=%b reportOrientationChanged=%b\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_RESIZE\",\"at\":\"com/android/server/wm/WindowState.java\"},\"628276090\":{\"message\":\"Delaying app transition for screen rotation animation to finish\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/AppTransitionController.java\"},\"631792420\":{\"message\":\"Attempted to add window with token that is not a window: %s.  Aborting.\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"633654009\":{\"message\":\"SURFACE POS (setPositionInTransaction) @ (%f,%f): %s\",\"level\":\"INFO\",\"group\":\"WM_SHOW_TRANSACTIONS\",\"at\":\"com/android/server/wm/WindowSurfaceController.java\"},\"638429464\":{\"message\":\"\\tRemove container=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_REMOTE_ANIMATIONS\",\"at\":\"com/android/server/wm/RemoteAnimationController.java\"},\"644675193\":{\"message\":\"Real start recents\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_RECENTS_ANIMATIONS\",\"at\":\"com/android/server/wm/RecentsAnimation.java\"},\"646155519\":{\"message\":\"Started intent=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_RECENTS_ANIMATIONS\",\"at\":\"com/android/server/wm/RecentsAnimation.java\"},\"646981048\":{\"message\":\"Invalid displayId for requestScrollCapture: %d\",\"level\":\"ERROR\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"662572728\":{\"message\":\"Attempted to add a toast window with bad token %s.  Aborting.\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"665256544\":{\"message\":\"All windows drawn!\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_SCREEN_ON\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"666937535\":{\"message\":\"attachWindowContextToDisplayArea: trying to attach to a non-existing display:%d\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"669361121\":{\"message\":\"Sleep still need to stop %d activities\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/TaskFragment.java\"},\"674932310\":{\"message\":\"Setting Intent of %s to target %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/Task.java\"},\"675705156\":{\"message\":\"resumeTopActivity: Top activity resumed %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/TaskFragment.java\"},\"685047360\":{\"message\":\"Resizing window %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_RESIZE\",\"at\":\"com/android/server/wm/WindowState.java\"},\"691515534\":{\"message\":\"  Commit wallpaper becoming invisible: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"693423992\":{\"message\":\"setAnimationLocked: setting mFocusMayChange true\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_FOCUS_LIGHT\",\"at\":\"com/android/server/wm/WindowState.java\"},\"704998117\":{\"message\":\"Failed to create surface control for %s\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"708142634\":{\"message\":\"Top resumed state released %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityTaskSupervisor.java\"},\"715749922\":{\"message\":\"Allowlisting %d:%s\",\"level\":\"WARN\",\"group\":\"WM_DEBUG_LOCKTASK\",\"at\":\"com/android/server/wm/ActivityTaskManagerService.java\"},\"726205185\":{\"message\":\"Moving to DESTROYED: %s (destroy skipped)\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"733466617\":{\"message\":\"Wallpaper token %s visible=%b\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_WALLPAPER\",\"at\":\"com/android/server/wm/WallpaperWindowToken.java\"},\"736692676\":{\"message\":\"Config is relaunching %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONFIGURATION\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"743418423\":{\"message\":\"Sending TaskFragment error exception=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/TaskFragmentOrganizerController.java\"},\"744171317\":{\"message\":\"      SKIP: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"745391677\":{\"message\":\"  CREATE SURFACE %s IN SESSION %s: pid=%d format=%d flags=0x%x / %s\",\"level\":\"INFO\",\"group\":\"WM_SHOW_SURFACE_ALLOC\",\"at\":\"com/android/server/wm/WindowStateAnimator.java\"},\"765395228\":{\"message\":\"onAnimationFinished(): controller=%s reorderMode=%d\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_RECENTS_ANIMATIONS\",\"at\":\"com/android/server/wm/RecentsAnimation.java\"},\"781471998\":{\"message\":\"moveWindowTokenToDisplay: Cannot move to the original display for token: %s\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"791468751\":{\"message\":\"Pausing rotation during re-position\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/TaskPositioner.java\"},\"793568608\":{\"message\":\"        SKIP: sibling is visible but not part of transition\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"794570322\":{\"message\":\"Now closing app %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/AppTransitionController.java\"},\"800698875\":{\"message\":\"SyncGroup %d: Started when there is other active SyncGroup\",\"level\":\"WARN\",\"group\":\"WM_DEBUG_SYNC_ENGINE\",\"at\":\"com/android/server/wm/BLASTSyncEngine.java\"},\"806891543\":{\"message\":\"Setting mOrientationChangeComplete=true because wtoken %s numInteresting=%d numDrawn=%d\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"829434921\":{\"message\":\"Draw state now committed in %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STARTING_WINDOW\",\"at\":\"com/android/server/wm/WindowStateAnimator.java\"},\"835814848\":{\"message\":\"%s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_REMOTE_ANIMATIONS\",\"at\":\"com/android/server/wm/RemoteAnimationController.java\"},\"872933199\":{\"message\":\"Changing focus from %s to %s displayId=%d Callers=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_FOCUS_LIGHT\",\"at\":\"com/android/server/wm/DisplayContent.java\"},\"873914452\":{\"message\":\"goodToGo()\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_REMOTE_ANIMATIONS\",\"at\":\"com/android/server/wm/RemoteAnimationController.java\"},\"892244061\":{\"message\":\"Waiting for drawn %s: removed=%b visible=%b mHasSurface=%b drawState=%d\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_SCREEN_ON\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"895158150\":{\"message\":\"allPausedActivitiesComplete: r=%s state=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/RootWindowContainer.java\"},\"898863925\":{\"message\":\"Attempted to add QS dialog window with unknown token %s.  Aborting.\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"906215061\":{\"message\":\"Apply window transaction, syncId=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/WindowOrganizerController.java\"},\"913494177\":{\"message\":\"removeAllWindowsIfPossible: removing win=%s\",\"level\":\"WARN\",\"group\":\"WM_DEBUG_WINDOW_MOVEMENT\",\"at\":\"com/android/server/wm/WindowToken.java\"},\"916191774\":{\"message\":\"Orientation change complete in %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/WindowStateAnimator.java\"},\"935418348\":{\"message\":\"resumeTopActivity: Skip resume: some activity pausing.\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/TaskFragment.java\"},\"948208142\":{\"message\":\"Setting Activity.mLauncherTaskBehind to true. Activity=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_BACK_PREVIEW\",\"at\":\"com/android/server/wm/BackNavigationController.java\"},\"950074526\":{\"message\":\"setLockTaskMode: Can't lock due to auth\",\"level\":\"WARN\",\"group\":\"WM_DEBUG_LOCKTASK\",\"at\":\"com/android/server/wm/LockTaskController.java\"},\"954470154\":{\"message\":\"FORCED DISPLAY SCALING DISABLED\",\"level\":\"INFO\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"956374481\":{\"message\":\"removeLockedTask: task=%s last task, reverting locktask mode. Callers=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_LOCKTASK\",\"at\":\"com/android/server/wm/LockTaskController.java\"},\"959486822\":{\"message\":\"setSyncGroup #%d on %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_SYNC_ENGINE\",\"at\":\"com/android/server/wm/WindowContainer.java\"},\"966569777\":{\"message\":\"SyncGroup %d: onSurfacePlacement checking %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_SYNC_ENGINE\",\"at\":\"com/android/server/wm/BLASTSyncEngine.java\"},\"969323241\":{\"message\":\"Sending new config to %s, config: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONFIGURATION\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"972354148\":{\"message\":\"\\tcontainer=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_REMOTE_ANIMATIONS\",\"at\":\"com/android/server/wm/RemoteAnimationController.java\"},\"979347997\":{\"message\":\"Launch on display check: disallow activity embedding without permission.\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/ActivityTaskSupervisor.java\"},\"987903142\":{\"message\":\"Sleep needs to pause %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/TaskFragment.java\"},\"996960396\":{\"message\":\"Starting Transition %d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"1001904964\":{\"message\":\"***** BOOT TIMEOUT: forcing display enabled\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"1011462000\":{\"message\":\"Re-launching after pause: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/TaskFragment.java\"},\"1022095595\":{\"message\":\"TaskFragment info changed name=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/TaskFragmentOrganizerController.java\"},\"1023413388\":{\"message\":\"Finish waiting for pause of: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1030898920\":{\"message\":\"notifyInsetsControlChanged for %s \",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_WINDOW_INSETS\",\"at\":\"com/android/server/wm/WindowState.java\"},\"1033274509\":{\"message\":\"moveWindowTokenToDisplay: Attempted to move non-existing token: %s\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"1040675582\":{\"message\":\"Can't report activity configuration update - client not running, activityRecord=%s\",\"level\":\"WARN\",\"group\":\"WM_DEBUG_CONFIGURATION\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1046922686\":{\"message\":\"requestScrollCapture: caught exception dispatching callback: %s\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"1047505501\":{\"message\":\"notifyInsetsChanged for %s \",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_WINDOW_INSETS\",\"at\":\"com/android/server/wm/WindowState.java\"},\"1047769218\":{\"message\":\"Finishing activity r=%s, result=%d, data=%s, reason=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1049367566\":{\"message\":\"Sending to proc %s new config %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONFIGURATION\",\"at\":\"com/android/server/wm/WindowProcessController.java\"},\"1051545910\":{\"message\":\"Exit animation finished in %s: remove=%b\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/WindowState.java\"},\"1068803972\":{\"message\":\"Activity paused: token=%s, timeout=%b\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1073230342\":{\"message\":\"startAnimation\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_REMOTE_ANIMATIONS\",\"at\":\"com/android/server/wm/WallpaperAnimationAdapter.java\"},\"1087494661\":{\"message\":\"Clear window stuck on animatingExit status: %s\",\"level\":\"WARN\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/WindowState.java\"},\"1088929964\":{\"message\":\"onLockTaskPackagesUpdated: starting new locktask task=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_LOCKTASK\",\"at\":\"com/android/server/wm/LockTaskController.java\"},\"1089714158\":{\"message\":\"  FREEZE %s: DESTROY\",\"level\":\"INFO\",\"group\":\"WM_SHOW_SURFACE_ALLOC\",\"at\":\"com/android/server/wm/ScreenRotationAnimation.java\"},\"1100065297\":{\"message\":\"Attempted to get IME policy of a display that does not exist: %d\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"1105210816\":{\"message\":\"Skipping config check in destroyed state %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONFIGURATION\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1112047265\":{\"message\":\"finishDrawingWindow: %s mDrawState=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"1115248873\":{\"message\":\"Calling onTransitionReady: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"1115417974\":{\"message\":\"FORCED DISPLAY SIZE: %dx%d\",\"level\":\"INFO\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"1126328412\":{\"message\":\"Scheduling idle now: forceIdle=%b immediate=%b\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1140424002\":{\"message\":\"Finished screen turning on...\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_SCREEN_ON\",\"at\":\"com/android/server/wm/DisplayPolicy.java\"},\"1149424314\":{\"message\":\"Unregister display organizer=%s uid=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/DisplayAreaOrganizerController.java\"},\"1166381079\":{\"message\":\"Execute app transition: %s, displayId: %d Callers=%s\",\"level\":\"WARN\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/DisplayContent.java\"},\"1172542963\":{\"message\":\"onBackNavigationDone backType=%s, task=%s, prevTaskTopActivity=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_BACK_PREVIEW\",\"at\":\"com/android/server/wm/BackNavigationController.java\"},\"1178653181\":{\"message\":\"Old wallpaper still the target.\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WALLPAPER\",\"at\":\"com/android/server/wm/WallpaperController.java\"},\"1191587912\":{\"message\":\"Moved rootTask=%s behind rootTask=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_RECENTS_ANIMATIONS\",\"at\":\"com/android/server/wm/RecentsAnimation.java\"},\"1192413464\":{\"message\":\"Comparing existing cls=%s /aff=%s to new cls=%s /aff=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/RootWindowContainer.java\"},\"1208313423\":{\"message\":\"addWindowToken: Attempted to add token: %s for non-exiting displayId=%d\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"1210037962\":{\"message\":\"Register remote animations for organizer=%s uid=%d pid=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/TaskFragmentOrganizerController.java\"},\"1219600119\":{\"message\":\"addWindow: win=%s Callers=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_FOCUS\",\"at\":\"com/android/server/wm/WindowToken.java\"},\"1224184681\":{\"message\":\"No longer Stopped: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1224307091\":{\"message\":\"checkBootAnimationComplete: Animation complete!\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_BOOT\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"1246035185\":{\"message\":\"stopFreezingDisplayLocked: Returning waitingForConfig=%b, waitingForRemoteRotation=%b, mAppsFreezingScreen=%d, mWindowsFreezingScreen=%d, mClientFreezingScreen=%b, mOpeningApps.size()=%d\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"1252594551\":{\"message\":\"Window types in WindowContext and LayoutParams.type should match! Type from LayoutParams is %d, but type from WindowContext is %d\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"1254403969\":{\"message\":\"Surface returned was null: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STARTING_WINDOW\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1270792394\":{\"message\":\"Resumed after relaunch %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1284122013\":{\"message\":\"TaskFragment appeared name=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/TaskFragmentOrganizerController.java\"},\"1288731814\":{\"message\":\"WindowState.hideLw: setting mFocusMayChange true\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_FOCUS_LIGHT\",\"at\":\"com/android/server/wm/WindowState.java\"},\"1305412562\":{\"message\":\"Report configuration: %s %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONFIGURATION\",\"at\":\"com/android/server/wm/ActivityClientController.java\"},\"1316533291\":{\"message\":\"State movement: %s from:%s to:%s reason:%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1325649102\":{\"message\":\"Bad requesting window %s\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"1329340614\":{\"message\":\"Orientation not waiting for draw in %s, surfaceController %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/WindowState.java\"},\"1330804250\":{\"message\":\"addChild: %s at top.\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/Task.java\"},\"1331177619\":{\"message\":\"Attempted to add a toast window with unknown token %s.  Aborting.\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"1333520287\":{\"message\":\"Creating PendingTransition: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/TransitionController.java\"},\"1337596507\":{\"message\":\"Sending to proc %s new compat %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONFIGURATION\",\"at\":\"com/android/server/wm/CompatModePackages.java\"},\"1346895820\":{\"message\":\"ScreenRotation still animating: type: %d\\nmDisplayAnimator: %s\\nmEnterBlackFrameAnimator: %s\\nmRotateScreenAnimator: %s\\nmScreenshotRotationAnimator: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/ScreenRotationAnimation.java\"},\"1364126018\":{\"message\":\"Resumed activity; dropping state of: %s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1364498663\":{\"message\":\"notifyAppResumed: wasStopped=%b %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1373000889\":{\"message\":\"abortShowImePostLayout\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_IME\",\"at\":\"com/android/server/wm/ImeInsetsSourceProvider.java\"},\"1381227466\":{\"message\":\"App is requesting an orientation, return %d for display id=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/TaskDisplayArea.java\"},\"1396893178\":{\"message\":\"createRootTask unknown displayId=%d\",\"level\":\"ERROR\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/TaskOrganizerController.java\"},\"1401287081\":{\"message\":\"Handle incoming session on display %d, with a pre-existing session %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONTENT_RECORDING\",\"at\":\"com/android/server/wm/ContentRecordingController.java\"},\"1401295262\":{\"message\":\"Mode default, asking user\",\"level\":\"WARN\",\"group\":\"WM_DEBUG_LOCKTASK\",\"at\":\"com/android/server/wm/LockTaskController.java\"},\"1401700824\":{\"message\":\"Window drawn win=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_SCREEN_ON\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"1422781269\":{\"message\":\"Resuming rotation after re-position\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/TaskPositioner.java\"},\"1423418408\":{\"message\":\"unable to restore pointer icon\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"1423592961\":{\"message\":\"<<< CLOSE TRANSACTION removeReplacedWindows\",\"level\":\"INFO\",\"group\":\"WM_SHOW_TRANSACTIONS\",\"at\":\"com/android/server/wm/RootWindowContainer.java\"},\"1430336882\":{\"message\":\"findFocusedWindow: focusedApp windows not focusable using new focus @ %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_FOCUS_LIGHT\",\"at\":\"com/android/server/wm/DisplayContent.java\"},\"1434383382\":{\"message\":\"Attempted to get flag of a display that does not exist: %d\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"1444064727\":{\"message\":\"Unexpectedly null window container; unable to update recording for display %d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONTENT_RECORDING\",\"at\":\"com/android/server/wm/ContentRecorder.java\"},\"1448683958\":{\"message\":\"Override pending remote transitionSet=%b adapter=%s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/AppTransition.java\"},\"1457990604\":{\"message\":\"applyAnimation: anim=%s nextAppTransition=ANIM_CUSTOM_IN_PLACE transit=%s Callers=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS_ANIM\",\"at\":\"com/android/server/wm/AppTransition.java\"},\"1460759282\":{\"message\":\"getAnimationTarget in=%s, out=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS_ANIM\",\"at\":\"com/android/server/wm/AppTransitionController.java\"},\"1469310004\":{\"message\":\"          SKIP: common mode mismatch. was %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"1494644409\":{\"message\":\"  Rejecting as detached: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"1495525537\":{\"message\":\"createWallpaperAnimations()\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_RECENTS_ANIMATIONS\",\"at\":\"com/android/server/wm/RecentsAnimationController.java\"},\"1497304204\":{\"message\":\"Deferring rotation, rotation is paused.\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/DisplayRotation.java\"},\"1504168072\":{\"message\":\"removeIfPossible: %s callers=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/WindowState.java\"},\"1515161239\":{\"message\":\"removeDeadWindows: %s\",\"level\":\"WARN\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1518495446\":{\"message\":\"removeWindowToken: Attempted to remove non-existing token: %s\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"1519757176\":{\"message\":\"setHomeApp(%s)\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_RECENTS_ANIMATIONS\",\"at\":\"com/android/server/wm/RecentsAnimationController.java\"},\"1521476038\":{\"message\":\"Attempted to set flag to a display that does not exist: %d\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"1524174282\":{\"message\":\"Launch on display check: no caller info, skip check\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/ActivityTaskSupervisor.java\"},\"1525976603\":{\"message\":\"cancelAnimation(): reason=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_RECENTS_ANIMATIONS\",\"at\":\"com/android/server/wm/RecentsAnimationController.java\"},\"1528528509\":{\"message\":\"No thumbnail header bitmap for: %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1544805551\":{\"message\":\"Skipping app transition animation. task=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_BACK_PREVIEW\",\"at\":\"com/android/server/wm/Task.java\"},\"1557732761\":{\"message\":\"For Intent %s bringing to top: %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/RootWindowContainer.java\"},\"1563755163\":{\"message\":\"Permission Denial: %s from pid=%d, uid=%d requires %s\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"1577579529\":{\"message\":\"win=%s destroySurfaces: appStopped=%b win.mWindowRemovalAllowed=%b win.mRemoveOnExit=%b\",\"level\":\"ERROR\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/WindowState.java\"},\"1584270979\":{\"message\":\"applyAnimation: container=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS_ANIM\",\"at\":\"com/android/server/wm/WindowContainer.java\"},\"1589610525\":{\"message\":\"applyAnimation NEXT_TRANSIT_TYPE_OPEN_CROSS_PROFILE_APPS: anim=%s transit=%s isEntrance=true Callers=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS_ANIM\",\"at\":\"com/android/server/wm/AppTransition.java\"},\"1608402305\":{\"message\":\"Unable to start recording due to invalid region for display %d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONTENT_RECORDING\",\"at\":\"com/android/server/wm/ContentRecorder.java\"},\"1610646518\":{\"message\":\"Enqueueing pending finish: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1628345525\":{\"message\":\"Now opening app %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/AppTransitionController.java\"},\"1634557978\":{\"message\":\"**** Dismissing screen rotation animation\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"1635062046\":{\"message\":\"Skipping config check invisible: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONFIGURATION\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1635462459\":{\"message\":\"onMovedByResize: Moving %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_RESIZE\",\"at\":\"com/android/server/wm/WindowState.java\"},\"1640436199\":{\"message\":\"No app is requesting an orientation, return %d for display id=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/TaskDisplayArea.java\"},\"1648338379\":{\"message\":\"Display id=%d is ignoring all orientation requests, return %d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/DisplayContent.java\"},\"1653025361\":{\"message\":\"Register task fragment organizer=%s uid=%d pid=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/TaskFragmentOrganizerController.java\"},\"1653210583\":{\"message\":\"Removing app %s delayed=%b animation=%s animating=%b\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1658605381\":{\"message\":\"onImeControlTargetChanged %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_IME\",\"at\":\"com/android/server/wm/InsetsStateController.java\"},\"1670933628\":{\"message\":\" Setting allReady override\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"1671994402\":{\"message\":\"Nulling last startingData\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STARTING_WINDOW\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1674747211\":{\"message\":\"%s forcing orientation to %d for display id=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/DisplayArea.java\"},\"1677260366\":{\"message\":\"Finish starting %s: first real window is shown, no animation\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STARTING_WINDOW\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1679569477\":{\"message\":\"Configuration doesn't matter not running %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONFIGURATION\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1689989893\":{\"message\":\"SyncGroup %d: Set ready\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_SYNC_ENGINE\",\"at\":\"com/android/server/wm/BLASTSyncEngine.java\"},\"1699269281\":{\"message\":\"Don't organize or trigger events for untrusted displayId=%d\",\"level\":\"WARN\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/DisplayAreaOrganizerController.java\"},\"1720229827\":{\"message\":\"Creating animation bounds layer\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_APP_TRANSITIONS_ANIM\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1720696061\":{\"message\":\"Adding window to Display that has been removed.\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"1739298851\":{\"message\":\"removeWindowToken: Attempted to remove token: %s for non-exiting displayId=%d\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"1742235936\":{\"message\":\"Removing startingView=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STARTING_WINDOW\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1746778201\":{\"message\":\"Set freezing of %s: visible=%b freezing=%b visibleRequested=%b. %s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1756082882\":{\"message\":\"Orientation change skips hidden %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/WindowStateAnimator.java\"},\"1774661765\":{\"message\":\"Devices still not ready after waiting %d milliseconds before attempting to detect safe mode.\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"1781673113\":{\"message\":\"onAnimationFinished(): targetRootTask=%s targetActivity=%s mRestoreTargetBehindRootTask=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_RECENTS_ANIMATIONS\",\"at\":\"com/android/server/wm/RecentsAnimation.java\"},\"1789321832\":{\"message\":\"Then token:%s is invalid. It might be removed\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"1789603530\":{\"message\":\"Removing activity %s hasSavedState=%b stateNotNeeded=%s finishing=%b state=%s callers=%s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1794249572\":{\"message\":\"Requesting StartTransition: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/TransitionController.java\"},\"1804245629\":{\"message\":\"Attempted to add starting window to token but already cleaned\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"1805116444\":{\"message\":\"We don't support remote animation for Task with multiple TaskFragmentOrganizers.\",\"level\":\"ERROR\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/AppTransitionController.java\"},\"1810019902\":{\"message\":\"TRANSIT_FLAG_OPEN_BEHIND,  adding %s to mOpeningApps\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1822314934\":{\"message\":\"Expected target rootTask=%s to restored behind rootTask=%s but it is behind rootTask=%s\",\"level\":\"WARN\",\"group\":\"WM_DEBUG_RECENTS_ANIMATIONS\",\"at\":\"com/android/server/wm/RecentsAnimation.java\"},\"1822843721\":{\"message\":\"Aborted starting %s: startingData=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STARTING_WINDOW\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1824105730\":{\"message\":\"setLockTaskAuth: task=%s mLockTaskAuth=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_LOCKTASK\",\"at\":\"com/android/server/wm/Task.java\"},\"1829094918\":{\"message\":\"onLockTaskPackagesUpdated: removing %s mLockTaskAuth()=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_LOCKTASK\",\"at\":\"com/android/server/wm/LockTaskController.java\"},\"1831008694\":{\"message\":\"Loading animation for app transition. transit=%s enter=%b frame=%s insets=%s surfaceInsets=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/WindowContainer.java\"},\"1836214582\":{\"message\":\"startingData was nulled out before handling mAddStartingWindow: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STARTING_WINDOW\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1836306327\":{\"message\":\"Skipping set freeze of %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1853793312\":{\"message\":\"Notify removed startingWindow %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STARTING_WINDOW\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1856211951\":{\"message\":\"moveFocusableActivityToTop: already on top, activity=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_FOCUS\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1856783490\":{\"message\":\"resumeTopActivity: Restarting %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/TaskFragment.java\"},\"1865125884\":{\"message\":\"finishScreenTurningOn: mAwake=%b, mScreenOnEarly=%b, mScreenOnFully=%b, mKeyguardDrawComplete=%b, mWindowManagerDrawComplete=%b\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_SCREEN_ON\",\"at\":\"com/android/server/wm/DisplayPolicy.java\"},\"1866772666\":{\"message\":\"SAFE MODE not enabled\",\"level\":\"INFO\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"1874559932\":{\"message\":\"The TaskDisplayArea with %s does not exist.\",\"level\":\"WARN\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/DisplayAreaPolicyBuilder.java\"},\"1891501279\":{\"message\":\"cancelAnimation(): reason=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_REMOTE_ANIMATIONS\",\"at\":\"com/android/server/wm/RemoteAnimationController.java\"},\"1903353011\":{\"message\":\"notifyAppStopped: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1912291550\":{\"message\":\"Sleep still waiting to pause %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/TaskFragment.java\"},\"1918448345\":{\"message\":\"Task appeared taskId=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/TaskOrganizerController.java\"},\"1921821199\":{\"message\":\"Preserving %s until the new one is added\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/WindowState.java\"},\"1928325128\":{\"message\":\"Run showImeRunner\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_IME\",\"at\":\"com/android/server/wm/ImeInsetsSourceProvider.java\"},\"1931178855\":{\"message\":\"\\tnonApp=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_REMOTE_ANIMATIONS\",\"at\":\"com/android/server/wm/RemoteAnimationController.java\"},\"1947239194\":{\"message\":\"Deferring rotation, still finishing previous rotation\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/DisplayRotation.java\"},\"1947936538\":{\"message\":\"Found matching class!\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/RootWindowContainer.java\"},\"1948483534\":{\"message\":\"Could not report config changes to the window token client.\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowContextListenerController.java\"},\"1964565370\":{\"message\":\"Starting remote animation\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_REMOTE_ANIMATIONS\",\"at\":\"com/android/server/wm/RemoteAnimationController.java\"},\"1967975839\":{\"message\":\"Changing app %s visible=%b performLayout=%b\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/AppTransitionController.java\"},\"1984782949\":{\"message\":\">>> OPEN TRANSACTION animate\",\"level\":\"INFO\",\"group\":\"WM_SHOW_TRANSACTIONS\",\"at\":\"com/android/server/wm/WindowAnimator.java\"},\"1984843251\":{\"message\":\"Hiding wallpaper %s from %s target=%s prev=%s callers=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_WALLPAPER\",\"at\":\"com/android/server/wm/WallpaperController.java\"},\"1995093920\":{\"message\":\"Checking to restart %s: changed=0x%s, handles=0x%s, mLastReportedConfiguration=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONFIGURATION\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"1999594750\":{\"message\":\"startAnimation\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_REMOTE_ANIMATIONS\",\"at\":\"com/android/server/wm/NonAppWindowAnimationAdapter.java\"},\"2001473656\":{\"message\":\"App %s is focused, but the window is not ready. Start a transaction to remove focus from the window of non-focused apps.\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_FOCUS_LIGHT\",\"at\":\"com/android/server/wm/InputMonitor.java\"},\"2018454757\":{\"message\":\"WS.removeImmediately: %s Already removed...\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/WindowState.java\"},\"2018852077\":{\"message\":\"Creating SplashScreenStartingData\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STARTING_WINDOW\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"2022422429\":{\"message\":\"createAnimationAdapter(): container=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_REMOTE_ANIMATIONS\",\"at\":\"com/android/server/wm/RemoteAnimationController.java\"},\"2024493888\":{\"message\":\"\\tWallpaper of display=%s is not visible\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_REMOTE_ANIMATIONS\",\"at\":\"com/android/server/wm/WallpaperAnimationAdapter.java\"},\"2028163120\":{\"message\":\"applyAnimation: anim=%s nextAppTransition=ANIM_SCALE_UP transit=%s isEntrance=%s Callers=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS_ANIM\",\"at\":\"com/android/server/wm/AppTransition.java\"},\"2034780299\":{\"message\":\"CHECK_IF_BOOT_ANIMATION_FINISHED:\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_BOOT\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"2034988903\":{\"message\":\"PendingStartTransaction found\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/WindowOrganizerController.java\"},\"2039056415\":{\"message\":\"Found matching affinity candidate!\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/RootWindowContainer.java\"},\"2045641491\":{\"message\":\"Checking %d opening apps (frozen=%b timeout=%b)...\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/AppTransitionController.java\"},\"2060978050\":{\"message\":\"moveWindowTokenToDisplay: Attempted to move token: %s to non-exiting displayId=%d\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"2070726247\":{\"message\":\"InsetsSource updateVisibility for %s, serverVisible: %s clientVisible: %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_WINDOW_INSETS\",\"at\":\"com/android/server/wm/InsetsSourceProvider.java\"},\"2083556954\":{\"message\":\"Set mOrientationChanging of %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/DisplayContent.java\"},\"2086878461\":{\"message\":\"Could not send command %s with parameters %s. %s\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"2088592090\":{\"message\":\"handleNotObscuredLocked: %s was holding screen wakelock but no longer has FLAG_KEEP_SCREEN_ON!!! called by%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_KEEP_SCREEN_ON\",\"at\":\"com/android/server/wm/RootWindowContainer.java\"},\"2096635066\":{\"message\":\"Acquiring screen wakelock due to %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_KEEP_SCREEN_ON\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"2114149926\":{\"message\":\"Not removing %s because app died while it's visible\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/WindowState.java\"},\"2117696413\":{\"message\":\"moveTaskToFront: moving taskId=%d\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/ActivityTaskManagerService.java\"},\"2119122320\":{\"message\":\"setInputMethodTarget %s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_IME\",\"at\":\"com/android/server/wm/DisplayContent.java\"},\"2128917433\":{\"message\":\"onProposedRotationChanged, rotation=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/DisplayRotation.java\"},\"2137411379\":{\"message\":\"applyAnimation: anim=%s animAttr=0x%x transit=%s isEntrance=%b Callers=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS_ANIM\",\"at\":\"com/android/server/wm/AppTransition.java\"},\"-2146181682\":{\"message\":\"Releasing screen wakelock, obscured by %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_KEEP_SCREEN_ON\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-2127842445\":{\"message\":\"Clearing startingData for token=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STARTING_WINDOW\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-2121056984\":{\"message\":\"%s\",\"level\":\"WARN\",\"group\":\"WM_DEBUG_LOCKTASK\",\"at\":\"com/android/server/wm/LockTaskController.java\"},\"-2109936758\":{\"message\":\"removeAppToken make exiting: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-2109864870\":{\"message\":\"app-release(): mOuter=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_REMOTE_ANIMATIONS\",\"at\":\"com/android/server/wm/RemoteAnimationController.java\"},\"-2107721178\":{\"message\":\"grantEmbeddedWindowFocus win=%s grantFocus=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_FOCUS\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-2101985723\":{\"message\":\"Failed looking up window session=%s callers=%s\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-2093859262\":{\"message\":\"setClientVisible: %s clientVisible=%b Callers=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/WindowToken.java\"},\"-2072089308\":{\"message\":\"Attempted to add window with token that is a sub-window: %s.  Aborting.\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-2054442123\":{\"message\":\"Setting Intent of %s to %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/Task.java\"},\"-2049725903\":{\"message\":\"Task back pressed on root taskId=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/TaskOrganizerController.java\"},\"-2039580386\":{\"message\":\"Attempted to add input method window with unknown token %s.  Aborting.\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-2036671725\":{\"message\":\"      SKIP: is wallpaper\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"-2024464438\":{\"message\":\"app-onAnimationFinished(): mOuter=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_REMOTE_ANIMATIONS\",\"at\":\"com/android/server/wm/RemoteAnimationController.java\"},\"-2014162875\":{\"message\":\"Could not register window container listener token=%s, container=%s\",\"level\":\"ERROR\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowContextListenerController.java\"},\"-2012562539\":{\"message\":\"startAnimation(): Notify animation start:\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_REMOTE_ANIMATIONS\",\"at\":\"com/android/server/wm/RemoteAnimationController.java\"},\"-2010331310\":{\"message\":\"resumeTopActivity: Top activity resumed (dontWaitForPause) %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/TaskFragment.java\"},\"-1980468143\":{\"message\":\"DisplayArea appeared name=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/DisplayAreaOrganizerController.java\"},\"-1979455254\":{\"message\":\"Launch on display check: allow launch for caller present on the display\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/ActivityTaskSupervisor.java\"},\"-1976930686\":{\"message\":\"Attempted to add Accessibility overlay window with bad token %s.  Aborting.\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-1973119651\":{\"message\":\"SyncGroup %d: Adding to group: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_SYNC_ENGINE\",\"at\":\"com/android/server/wm/BLASTSyncEngine.java\"},\"-1963461591\":{\"message\":\"Removing %s from %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-1963363332\":{\"message\":\"Restart top activity process of Task taskId=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/TaskOrganizerController.java\"},\"-1949279037\":{\"message\":\"Attempted to add input method window with bad token %s.  Aborting.\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-1939861963\":{\"message\":\"Create root task displayId=%d winMode=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/TaskOrganizerController.java\"},\"-1938839202\":{\"message\":\"SURFACE LEAK DESTROY: %s\",\"level\":\"INFO\",\"group\":\"WM_SHOW_TRANSACTIONS\",\"at\":\"com/android/server/wm/DisplayContent.java\"},\"-1938204785\":{\"message\":\"Moving existing starting %s from %s to %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STARTING_WINDOW\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-1924376693\":{\"message\":\" Setting Ready-group to %b. group=%s from %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"-1918702467\":{\"message\":\"onSyncFinishedDrawing %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_SYNC_ENGINE\",\"at\":\"com/android/server/wm/WindowContainer.java\"},\"-1915280162\":{\"message\":\"Attempted to add wallpaper window with bad token %s.  Aborting.\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-1906387645\":{\"message\":\"SURFACE controller=%s alpha=%f HScale=%f, VScale=%f: %s\",\"level\":\"INFO\",\"group\":\"WM_SHOW_TRANSACTIONS\",\"at\":\"com/android/server/wm/WindowStateAnimator.java\"},\"-1905191109\":{\"message\":\"SyncGroup %d: Finished!\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_SYNC_ENGINE\",\"at\":\"com/android/server/wm/BLASTSyncEngine.java\"},\"-1895337367\":{\"message\":\"Delete root task display=%d winMode=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/TaskOrganizerController.java\"},\"-1886145147\":{\"message\":\"resumeTopActivity: Going to sleep and all paused\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/TaskFragment.java\"},\"-1884933373\":{\"message\":\"enableScreenAfterBoot: mDisplayEnabled=%b mForceDisplayEnabled=%b mShowingBootMessages=%b mSystemBooted=%b. %s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_BOOT\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-1878839956\":{\"message\":\"Marking app token %s with replacing windows.\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-1872288685\":{\"message\":\"applyAnimation: anim=%s nextAppTransition=%s transit=%s isEntrance=%b Callers=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS_ANIM\",\"at\":\"com/android/server/wm/AppTransition.java\"},\"-1868124841\":{\"message\":\"screenOnEarly=%b, awake=%b, currentAppOrientation=%d, orientationSensorEnabled=%b, keyguardDrawComplete=%b, windowManagerDrawComplete=%b\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/DisplayRotation.java\"},\"-1868048288\":{\"message\":\"Updating to new configuration after starting activity.\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONFIGURATION\",\"at\":\"com/android/server/wm/ActivityStarter.java\"},\"-1862269827\":{\"message\":\"applyAnimation: anim=%s transit=%s isEntrance=%b Callers=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS_ANIM\",\"at\":\"com/android/server/wm/AppTransition.java\"},\"-1844540996\":{\"message\":\"  Initial targets: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"-1838803135\":{\"message\":\"Attempted to set windowing mode to a display that does not exist: %d\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-1834214907\":{\"message\":\"createNonAppWindowAnimations()\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_REMOTE_ANIMATIONS\",\"at\":\"com/android/server/wm/RemoteAnimationController.java\"},\"-1824578273\":{\"message\":\"Reporting new frame to %s: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_RESIZE\",\"at\":\"com/android/server/wm/WindowState.java\"},\"-1810446914\":{\"message\":\"Trying to update display configuration for system/invalid process.\",\"level\":\"WARN\",\"group\":\"WM_DEBUG_CONFIGURATION\",\"at\":\"com/android/server/wm/ActivityTaskManagerService.java\"},\"-1800899273\":{\"message\":\"applyAnimation: anim=%s transit=%s Callers=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS_ANIM\",\"at\":\"com/android/server/wm/AppTransition.java\"},\"-1792633344\":{\"message\":\"Register task organizer=%s uid=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/TaskOrganizerController.java\"},\"-1791031393\":{\"message\":\"Ensuring correct configuration: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONFIGURATION\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-1782453012\":{\"message\":\"Checking theme of starting window: 0x%x\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STARTING_WINDOW\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-1781861035\":{\"message\":\"Display %d has content (%b) so pause recording\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONTENT_RECORDING\",\"at\":\"com/android/server/wm/ContentRecorder.java\"},\"-1777196134\":{\"message\":\"goodToGo(): No apps to animate, mPendingAnimations=%d\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_REMOTE_ANIMATIONS\",\"at\":\"com/android/server/wm/RemoteAnimationController.java\"},\"-1770075711\":{\"message\":\"Adding window client %s that is dead, aborting.\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-1768557332\":{\"message\":\"removeWallpaperAnimation()\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_RECENTS_ANIMATIONS\",\"at\":\"com/android/server/wm/RecentsAnimationController.java\"},\"-1764792832\":{\"message\":\"Start collecting in Transition: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/TransitionController.java\"},\"-1750384749\":{\"message\":\"Launch on display check: allow launch on public display\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/ActivityTaskSupervisor.java\"},\"-1750206390\":{\"message\":\"Exception thrown when creating surface for client %s (%s). %s\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-1747461042\":{\"message\":\"set mOrientationChanging of %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/WindowState.java\"},\"-1740512980\":{\"message\":\"Stopping %s: nowVisible=%b animating=%b finishing=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityTaskSupervisor.java\"},\"-1730156332\":{\"message\":\"Display id=%d rotation changed to %d from %d, lastOrientation=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/DisplayRotation.java\"},\"-1728919185\":{\"message\":\"        unrelated invisible sibling %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"-1715268616\":{\"message\":\"Last window, removing starting window %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STARTING_WINDOW\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-1710206702\":{\"message\":\"Display id=%d is frozen while keyguard locked, return %d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/DisplayContent.java\"},\"-1707370822\":{\"message\":\"Ready to stop: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityTaskSupervisor.java\"},\"-1704402370\":{\"message\":\"resetTaskIntendedTask: calling finishActivity on %s\",\"level\":\"WARN\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/ResetTargetTaskHelper.java\"},\"-1699018375\":{\"message\":\"Adding activity %s to task %s callers: %s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/Task.java\"},\"-1698815688\":{\"message\":\"Resetting app token %s of replacing window marks.\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-1679411993\":{\"message\":\"setVr2dDisplayId called for: %d\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/ActivityTaskManagerService.java\"},\"-1670695197\":{\"message\":\"Attempted to add presentation window to a non-suitable display.  Aborting.\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-1661704580\":{\"message\":\"Attempted to set replacing window on non-existing app token %s\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-1647332198\":{\"message\":\"remove RecentTask %s when finishing user %d\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/RecentTasks.java\"},\"-1638958146\":{\"message\":\"Removing activity %s from task=%s adding to task=%s Callers=%s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/ResetTargetTaskHelper.java\"},\"-1633115609\":{\"message\":\"Key dispatch not paused for screen off\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/TaskFragment.java\"},\"-1632122349\":{\"message\":\"Changing surface while display frozen: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-1630752478\":{\"message\":\"removeLockedTask: removed %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_LOCKTASK\",\"at\":\"com/android/server/wm/LockTaskController.java\"},\"-1605829532\":{\"message\":\"Unable to start recording due to null token for display %d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONTENT_RECORDING\",\"at\":\"com/android/server/wm/ContentRecorder.java\"},\"-1598452494\":{\"message\":\"activityDestroyedLocked: r=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_CONTAINERS\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-1596995693\":{\"message\":\"startAnimation\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_REMOTE_ANIMATIONS\",\"at\":\"com/android/server/wm/RemoteAnimationController.java\"},\"-1585311008\":{\"message\":\"Bring to front target: %s from %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/ActivityStarter.java\"},\"-1575977269\":{\"message\":\"Skipping %s: mismatch root %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/RootWindowContainer.java\"},\"-1568331821\":{\"message\":\"Enabling listeners\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/DisplayRotation.java\"},\"-1567866547\":{\"message\":\"Collecting in transition %d: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"-1564228464\":{\"message\":\"App died while pausing: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/TaskFragment.java\"},\"-1559645910\":{\"message\":\"Looking for task of type=%s, taskAffinity=%s, intent=%s, info=%s, preferredTDA=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/RootWindowContainer.java\"},\"-1558137010\":{\"message\":\"Config is relaunching invisible activity %s called by %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-1554521902\":{\"message\":\"showInsets(ime) was requested by different window: %s \",\"level\":\"WARN\",\"group\":\"WM_DEBUG_IME\",\"at\":\"com/android/server/wm/ImeInsetsSourceProvider.java\"},\"-1545962566\":{\"message\":\"View server did not start\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-1539974875\":{\"message\":\"removeAppToken: %s delayed=%b Callers=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-1526645239\":{\"message\":\"Timeout waiting for drawn: undrawn=%s\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-1521427940\":{\"message\":\"commitVisibility: %s: visible=%b mVisibleRequested=%b\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-1517908912\":{\"message\":\"requestScrollCapture: caught exception dispatching to window.token=%s\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-1515151503\":{\"message\":\">>> OPEN TRANSACTION removeReplacedWindows\",\"level\":\"INFO\",\"group\":\"WM_SHOW_TRANSACTIONS\",\"at\":\"com/android/server/wm/RootWindowContainer.java\"},\"-1501564055\":{\"message\":\"Organized TaskFragment is not ready= %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/AppTransitionController.java\"},\"-1499134947\":{\"message\":\"Removing starting %s from %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-1497837552\":{\"message\":\"onAnimationFinished(): mPendingAnimations=%d\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_REMOTE_ANIMATIONS\",\"at\":\"com/android/server/wm/RemoteAnimationController.java\"},\"-1495062622\":{\"message\":\"Can't report activity moved to display - client not running, activityRecord=%s, displayId=%d\",\"level\":\"WARN\",\"group\":\"WM_DEBUG_SWITCH\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-1492881555\":{\"message\":\"Starting activity when config will change = %b\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONFIGURATION\",\"at\":\"com/android/server/wm/ActivityStarter.java\"},\"-1483435730\":{\"message\":\"InsetsSource setWin %s for type %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_WINDOW_INSETS\",\"at\":\"com/android/server/wm/InsetsSourceProvider.java\"},\"-1480772131\":{\"message\":\"No app or window is requesting an orientation, return %d for display id=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/DisplayContent.java\"},\"-1478175541\":{\"message\":\"No longer animating wallpaper targets!\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WALLPAPER\",\"at\":\"com/android/server/wm/WallpaperController.java\"},\"-1474602871\":{\"message\":\"Launch on display check: disallow launch on virtual display for not-embedded activity.\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/ActivityTaskSupervisor.java\"},\"-1474292612\":{\"message\":\"Could not find task for id: %d\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/ActivityTaskManagerService.java\"},\"-1471946192\":{\"message\":\"Marking app token %s with replacing child windows.\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-1468740466\":{\"message\":\"Moving to PAUSED: %s (starting in paused state)\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityTaskSupervisor.java\"},\"-1452274694\":{\"message\":\"      CAN PROMOTE: promoting to parent %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"-1443029505\":{\"message\":\"SAFE MODE ENABLED (menu=%d s=%d dpad=%d trackball=%d)\",\"level\":\"INFO\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-1442613680\":{\"message\":\" Creating Ready-group for Transition %d with root=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"-1438175584\":{\"message\":\"Input focus has changed to %s display=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_FOCUS_LIGHT\",\"at\":\"com/android/server/wm/InputMonitor.java\"},\"-1434147454\":{\"message\":\"cleanupAnimation(): Notify animation finished mPendingAnimations=%d reorderMode=%d\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_RECENTS_ANIMATIONS\",\"at\":\"com/android/server/wm/RecentsAnimationController.java\"},\"-1432963966\":{\"message\":\"Moving to DESTROYING: %s (destroy requested)\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-1427184084\":{\"message\":\"addWindow: New client %s: window=%s Callers=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-1421296808\":{\"message\":\"Moving to RESUMED: %s (in existing)\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/TaskFragment.java\"},\"-1419762046\":{\"message\":\"moveRootTaskToDisplay: moving taskId=%d to displayId=%d\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/ActivityTaskManagerService.java\"},\"-1419461256\":{\"message\":\"resumeTopActivity: Resumed %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/TaskFragment.java\"},\"-1413901262\":{\"message\":\"startRecentsActivity(): intent=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_RECENTS_ANIMATIONS\",\"at\":\"com/android/server/wm/RecentsAnimation.java\"},\"-1410260105\":{\"message\":\"Schedule IME show for %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_IME\",\"at\":\"com/android/server/wm/ImeInsetsSourceProvider.java\"},\"-1394745488\":{\"message\":\"ControlAdapter onAnimationCancelled mSource: %s mControlTarget: %s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_WINDOW_INSETS\",\"at\":\"com/android/server/wm/InsetsSourceProvider.java\"},\"-1391944764\":{\"message\":\"SURFACE DESTROY: %s. %s\",\"level\":\"INFO\",\"group\":\"WM_SHOW_SURFACE_ALLOC\",\"at\":\"com/android/server/wm/WindowStateAnimator.java\"},\"-1389772804\":{\"message\":\"Attempted to add voice interaction window with bad token %s.  Aborting.\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-1376035390\":{\"message\":\"No task found\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/RootWindowContainer.java\"},\"-1373875178\":{\"message\":\"Going ahead with updating recording for display %d to new bounds %s and/or orientation %d.\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONTENT_RECORDING\",\"at\":\"com/android/server/wm/ContentRecorder.java\"},\"-1364754753\":{\"message\":\"Task vanished taskId=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/TaskOrganizerController.java\"},\"-1352076759\":{\"message\":\"Removing app token: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-1350198040\":{\"message\":\"hideBootMessagesLocked: mDisplayEnabled=%b mForceDisplayEnabled=%b mShowingBootMessages=%b mSystemBooted=%b. %s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_BOOT\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-1340540100\":{\"message\":\"Creating SnapshotStartingData\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STARTING_WINDOW\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-1326876381\":{\"message\":\"Provided surface for recording on display %d is not present, so do not update the surface\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONTENT_RECORDING\",\"at\":\"com/android/server/wm/ContentRecorder.java\"},\"-1311436264\":{\"message\":\"Unregister task fragment organizer=%s uid=%d pid=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/TaskFragmentOrganizerController.java\"},\"-1305966693\":{\"message\":\"Sending position change to %s, onTop: %b\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-1305791032\":{\"message\":\"Moving to STOPPED: %s (stop complete)\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-1305755880\":{\"message\":\"Initial config: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONFIGURATION\",\"at\":\"com/android/server/wm/ActivityTaskManagerService.java\"},\"-1304806505\":{\"message\":\"Starting new activity %s in new task %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/ActivityStarter.java\"},\"-1292329638\":{\"message\":\"Added starting %s: startingWindow=%s startingView=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STARTING_WINDOW\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-1270731689\":{\"message\":\"Attempted to set replacing window on app token with no content %s\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-1270148832\":{\"message\":\"Resize start waiting for draw, mDrawState=DRAW_PENDING in %s, surfaceController %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_RESIZE\",\"at\":\"com/android/server/wm/WindowState.java\"},\"-1263316010\":{\"message\":\"Computed rotation=%s (%d) for display id=%d based on lastOrientation=%s (%d) and oldRotation=%s (%d)\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/DisplayRotation.java\"},\"-1259022216\":{\"message\":\"SURFACE HIDE ( %s ): %s\",\"level\":\"INFO\",\"group\":\"WM_SHOW_TRANSACTIONS\",\"at\":\"com/android/server/wm/WindowSurfaceController.java\"},\"-1257821162\":{\"message\":\"OUT SURFACE %s: copied\",\"level\":\"INFO\",\"group\":\"WM_SHOW_TRANSACTIONS\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-1248645819\":{\"message\":\"\\tAdd container=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_REMOTE_ANIMATIONS\",\"at\":\"com/android/server/wm/RemoteAnimationController.java\"},\"-1228653755\":{\"message\":\"Launch on display check: displayId=%d callingPid=%d callingUid=%d\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/ActivityTaskSupervisor.java\"},\"-1219773477\":{\"message\":\"setInputConsumerEnabled(%s): mCanceled=%b\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_RECENTS_ANIMATIONS\",\"at\":\"com/android/server/wm/RecentsAnimationController.java\"},\"-1207757583\":{\"message\":\"startAnimation(): Notify animation start: %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_RECENTS_ANIMATIONS\",\"at\":\"com/android/server/wm/RecentsAnimationController.java\"},\"-1198579104\":{\"message\":\"Pushing next activity %s out to target's task %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/ResetTargetTaskHelper.java\"},\"-1193946201\":{\"message\":\"Can't report activity position update - client not running, activityRecord=%s\",\"level\":\"WARN\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-1187377055\":{\"message\":\"Enqueue pending stop if needed: %s wasStopping=%b visibleRequested=%b\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/TaskFragment.java\"},\"-1185473319\":{\"message\":\"ControlAdapter startAnimation mSource: %s controlTarget: %s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_WINDOW_INSETS\",\"at\":\"com/android/server/wm/InsetsSourceProvider.java\"},\"-1176488860\":{\"message\":\"SURFACE isSecure=%b: %s\",\"level\":\"INFO\",\"group\":\"WM_SHOW_TRANSACTIONS\",\"at\":\"com/android/server/wm/WindowSurfaceController.java\"},\"-1164930508\":{\"message\":\"Moving to RESUMED: %s (starting new instance) callers=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/Task.java\"},\"-1156118957\":{\"message\":\"Updated config=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_RECENTS_ANIMATIONS\",\"at\":\"com/android/server/wm/RecentsAnimation.java\"},\"-1153814764\":{\"message\":\"onAnimationCancelled\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_REMOTE_ANIMATIONS\",\"at\":\"com/android/server/wm/NonAppWindowAnimationAdapter.java\"},\"-1145384901\":{\"message\":\"shouldWaitAnimatingExit: isTransition: %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/WindowState.java\"},\"-1142279614\":{\"message\":\"Looking for focus: %s, flags=%d, canReceive=%b, reason=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_FOCUS\",\"at\":\"com/android/server/wm/DisplayContent.java\"},\"-1136467585\":{\"message\":\"The listener does not exist.\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/WindowContextListenerController.java\"},\"-1136139407\":{\"message\":\"no-history finish of %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-1130891072\":{\"message\":\"Orientation continue waiting for draw in %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/WindowStateAnimator.java\"},\"-1130868271\":{\"message\":\"Resizing %s WITH DRAW PENDING\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/WindowState.java\"},\"-1128015008\":{\"message\":\"Schedule remove starting %s startingWindow=%s startingView=%s Callers=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STARTING_WINDOW\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-1117599386\":{\"message\":\"Deferring rotation, display is not enabled.\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/DisplayRotation.java\"},\"-1115019498\":{\"message\":\"Configuration & display unchanged in %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONFIGURATION\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-1113134997\":{\"message\":\"Attempted to add application window with unknown token %s.  Aborting.\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-1108775960\":{\"message\":\"%s is requesting orientation %d (%s)\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/WindowContainer.java\"},\"-1103716954\":{\"message\":\"Not removing %s due to exit animation\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/WindowState.java\"},\"-1103115659\":{\"message\":\"Performing post-rotate rotation\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/RootWindowContainer.java\"},\"-1101551167\":{\"message\":\"Auto-PIP allowed, entering PIP mode directly: %s, didAutoPip: %b\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/TaskFragment.java\"},\"-1089874824\":{\"message\":\"SURFACE SHOW (performLayout): %s\",\"level\":\"INFO\",\"group\":\"WM_SHOW_TRANSACTIONS\",\"at\":\"com/android/server/wm/WindowSurfaceController.java\"},\"-1076978367\":{\"message\":\"thawRotation: mRotation=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-1069336896\":{\"message\":\"onRootTaskOrderChanged(): rootTask=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_RECENTS_ANIMATIONS\",\"at\":\"com/android/server/wm/RecentsAnimation.java\"},\"-1060365734\":{\"message\":\"Attempted to add QS dialog window with bad token %s.  Aborting.\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-1047945589\":{\"message\":\"Remove client=%x, surfaceController=%s Callers=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_FOCUS\",\"at\":\"com/android/server/wm/WindowState.java\"},\"-1042574499\":{\"message\":\"Attempted to add Accessibility overlay window with unknown token %s.  Aborting.\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-1022146708\":{\"message\":\"Skipping %s: mismatch activity type\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/RootWindowContainer.java\"},\"-1016578046\":{\"message\":\"Moving to %s Relaunching %s callers=%s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-1009117329\":{\"message\":\"isFetchingAppTransitionSpecs=true\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/AppTransitionController.java\"},\"-1003678883\":{\"message\":\"Cleaning splash screen token=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STARTING_WINDOW\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-1003060523\":{\"message\":\"Finish needs to pause: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-993378225\":{\"message\":\"finishDrawingLocked: mDrawState=COMMIT_DRAW_PENDING %s in %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_DRAW\",\"at\":\"com/android/server/wm/WindowStateAnimator.java\"},\"-986746907\":{\"message\":\"Starting window removed %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_STARTING_WINDOW\",\"at\":\"com/android/server/wm/WindowState.java\"},\"-957060823\":{\"message\":\"Moving to PAUSING: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/TaskFragment.java\"},\"-951939129\":{\"message\":\"Unregister task organizer=%s uid=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/TaskOrganizerController.java\"},\"-948446688\":{\"message\":\"Create TaskDisplayArea uid=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/DisplayAreaOrganizerController.java\"},\"-938271693\":{\"message\":\"allResumedActivitiesIdle: rootTask=%d %s not idle\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/RootWindowContainer.java\"},\"-937498525\":{\"message\":\"Executing finish of failed to pause activity: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-930893991\":{\"message\":\"Set sync ready, syncId=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/WindowOrganizerController.java\"},\"-929676529\":{\"message\":\"Configuration changes for %s, allChanges=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONFIGURATION\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-927199900\":{\"message\":\"Updating global configuration to: %s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_CONFIGURATION\",\"at\":\"com/android/server/wm/ActivityTaskManagerService.java\"},\"-926231510\":{\"message\":\"State unchanged from:%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-917215012\":{\"message\":\"%s: caller %d is using old GET_TASKS but privileged; allowing\",\"level\":\"WARN\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/ActivityTaskManagerService.java\"},\"-916108501\":{\"message\":\"Adding %s to %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/WindowState.java\"},\"-914253865\":{\"message\":\"Attempted to add voice interaction window with unknown token %s.  Aborting.\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-883738232\":{\"message\":\"Adding more than one toast window for UID at a time.\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-877494781\":{\"message\":\"Start pushing activity %s out to bottom task %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/ResetTargetTaskHelper.java\"},\"-874888131\":{\"message\":\"Set transition ready=%b %d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"-874446906\":{\"message\":\"showBootMessage: msg=%s always=%b mAllowBootMessages=%b mShowingBootMessages=%b mSystemBooted=%b. %s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_BOOT\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-863438038\":{\"message\":\"Aborting Transition: %d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"-861859917\":{\"message\":\"Attempted to add window to a display that does not exist: %d. Aborting.\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-861707633\":{\"message\":\"Destroying surface %s called by %s\",\"level\":\"INFO\",\"group\":\"WM_SHOW_SURFACE_ALLOC\",\"at\":\"com/android/server/wm/WindowSurfaceController.java\"},\"-856750101\":{\"message\":\"Launch on display check: allow launch for owner of the display\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/ActivityTaskSupervisor.java\"},\"-856590985\":{\"message\":\"dcTarget: %s mImeRequester: %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_IME\",\"at\":\"com/android/server/wm/ImeInsetsSourceProvider.java\"},\"-853404763\":{\"message\":\"\\twallpaper=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_REMOTE_ANIMATIONS\",\"at\":\"com/android/server/wm/RemoteAnimationController.java\"},\"-853226675\":{\"message\":\"Attempted to add window with exiting application token .%s Aborting.\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-846931068\":{\"message\":\"Update camera compat control state to %s for taskId=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/TaskOrganizerController.java\"},\"-846078709\":{\"message\":\"Configuration doesn't matter in finishing %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONFIGURATION\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-814760297\":{\"message\":\"Looking for task of %s in %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/RootWindowContainer.java\"},\"-809771899\":{\"message\":\"findFocusedWindow: Reached focused app=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_FOCUS_LIGHT\",\"at\":\"com/android/server/wm/DisplayContent.java\"},\"-804217032\":{\"message\":\"Skipping config check (will change): %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONFIGURATION\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-784959154\":{\"message\":\"Attempted to add private presentation window to a non-private display.  Aborting.\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-783405930\":{\"message\":\"Performing post-rotate rotation\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-779535710\":{\"message\":\"Transition %d: Set %s as transient-launch\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"-779095785\":{\"message\":\"        sibling is a participant with mode %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"-775004869\":{\"message\":\"Not a match: %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/RootWindowContainer.java\"},\"-771177730\":{\"message\":\"Removing focused app token:%s displayId=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_FOCUS_LIGHT\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-766059044\":{\"message\":\"Display id=%d selected orientation %s (%d), got rotation %s (%d)\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/DisplayRotation.java\"},\"-760801764\":{\"message\":\"onAnimationCancelled\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_REMOTE_ANIMATIONS\",\"at\":\"com/android/server/wm/WallpaperAnimationAdapter.java\"},\"-760764543\":{\"message\":\"Focus not requested for window=%s because it has no surface or is not focusable.\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_FOCUS_LIGHT\",\"at\":\"com/android/server/wm/InputMonitor.java\"},\"-754503024\":{\"message\":\"Relayout %s: oldVis=%d newVis=%d. %s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_SCREEN_ON\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-751255162\":{\"message\":\"Unable to update recording for display %d to new bounds %s and/or orientation %d, since the surface is not available.\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONTENT_RECORDING\",\"at\":\"com/android/server/wm/ContentRecorder.java\"},\"-743856570\":{\"message\":\"shouldWaitAnimatingExit: isAnimating: %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/WindowState.java\"},\"-743431900\":{\"message\":\"Configuration no differences in %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONFIGURATION\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-732715767\":{\"message\":\"Unable to retrieve window container to start recording for display %d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONTENT_RECORDING\",\"at\":\"com/android/server/wm/ContentRecorder.java\"},\"-729530161\":{\"message\":\"Moving to DESTROYED: %s (no app)\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-711194343\":{\"message\":\"Setting Activity.mLauncherTaskBehind to false. Activity=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_BACK_PREVIEW\",\"at\":\"com/android/server/wm/BackNavigationController.java\"},\"-706481945\":{\"message\":\"TaskFragment parent info changed name=%s parentTaskId=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/TaskFragmentOrganizerController.java\"},\"-705939410\":{\"message\":\"Waiting for pause to complete...\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-703543418\":{\"message\":\"      check sibling %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"-702650156\":{\"message\":\"Override with TaskFragment remote animation for transit=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/AppTransitionController.java\"},\"-701167286\":{\"message\":\"applyAnimation: transit=%s, enter=%b, wc=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS_ANIM\",\"at\":\"com/android/server/wm/WindowContainer.java\"},\"-694710814\":{\"message\":\"Pausing rotation during drag\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/DragState.java\"},\"-677449371\":{\"message\":\"moveTaskToRootTask: moving task=%d to rootTaskId=%d toTop=%b\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/ActivityTaskManagerService.java\"},\"-672355406\":{\"message\":\"  Rejecting as no-op: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"-668956537\":{\"message\":\"  THUMBNAIL %s: CREATE\",\"level\":\"INFO\",\"group\":\"WM_SHOW_TRANSACTIONS\",\"at\":\"com/android/server/wm/SurfaceFreezer.java\"},\"-666510420\":{\"message\":\"With display frozen, orientationChangeComplete=%b\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/RootWindowContainer.java\"},\"-655104359\":{\"message\":\"Frontmost changed immersion: %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_IMMERSIVE\",\"at\":\"com/android/server/wm/ActivityClientController.java\"},\"-653156702\":{\"message\":\"createAppAnimations()\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_REMOTE_ANIMATIONS\",\"at\":\"com/android/server/wm/RemoteAnimationController.java\"},\"-648891906\":{\"message\":\"Activity not running or entered PiP, resuming next.\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/TaskFragment.java\"},\"-641258376\":{\"message\":\"realStartActivityLocked: Skipping start of r=%s some activities pausing...\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityTaskSupervisor.java\"},\"-639217716\":{\"message\":\"setFocusedApp %s displayId=%d Callers=%s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_FOCUS_LIGHT\",\"at\":\"com/android/server/wm/DisplayContent.java\"},\"-635082269\":{\"message\":\"******** booted=%b msg=%b haveBoot=%b haveApp=%b haveWall=%b wallEnabled=%b haveKeyguard=%b\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_SCREEN_ON\",\"at\":\"com/android/server/wm/DisplayContent.java\"},\"-622997754\":{\"message\":\"postWindowRemoveCleanupLocked: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-622017164\":{\"message\":\"Finish Transition: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/TransitionController.java\"},\"-618015844\":{\"message\":\"performEnableScreen: mDisplayEnabled=%b mForceDisplayEnabled=%b mShowingBootMessages=%b mSystemBooted=%b mOnlyCore=%b. %s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_BOOT\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-597091183\":{\"message\":\"Delete TaskDisplayArea uid=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/DisplayAreaOrganizerController.java\"},\"-593535526\":{\"message\":\"Binding proc %s with config %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONFIGURATION\",\"at\":\"com/android/server/am/ActivityManagerService.java\"},\"-583031528\":{\"message\":\"%s\",\"level\":\"INFO\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-576070986\":{\"message\":\"Performing post-rotate rotation after seamless rotation\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/DisplayRotation.java\"},\"-567946587\":{\"message\":\"Requested redraw for orientation change: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/WindowState.java\"},\"-561092364\":{\"message\":\"onPointerDownOutsideFocusLocked called on %s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_FOCUS_LIGHT\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-549028919\":{\"message\":\"enableScreenIfNeededLocked: mDisplayEnabled=%b mForceDisplayEnabled=%b mShowingBootMessages=%b mSystemBooted=%b. %s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_BOOT\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-548282316\":{\"message\":\"setLockTaskMode: Locking to %s Callers=%s\",\"level\":\"WARN\",\"group\":\"WM_DEBUG_LOCKTASK\",\"at\":\"com/android/server/wm/LockTaskController.java\"},\"-547111355\":{\"message\":\"hideIme Control target: %s \",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_IME\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-545190927\":{\"message\":\"<<< CLOSE TRANSACTION animate\",\"level\":\"INFO\",\"group\":\"WM_SHOW_TRANSACTIONS\",\"at\":\"com/android/server/wm/WindowAnimator.java\"},\"-542756093\":{\"message\":\"TaskFragment vanished name=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/TaskFragmentOrganizerController.java\"},\"-532081937\":{\"message\":\"  Commit activity becoming invisible: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"-521613870\":{\"message\":\"App died during pause, not stopping: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/TaskFragment.java\"},\"-519504830\":{\"message\":\"applyAnimation: anim=%s nextAppTransition=ANIM_CUSTOM transit=%s isEntrance=%b Callers=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS_ANIM\",\"at\":\"com/android/server/wm/AppTransition.java\"},\"-509601642\":{\"message\":\"    checking %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"-507657818\":{\"message\":\"Window %s is already added\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-503656156\":{\"message\":\"Update process config of %s to new config %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONFIGURATION\",\"at\":\"com/android/server/wm/ActivityTaskManagerService.java\"},\"-497620140\":{\"message\":\"Transaction ready, syncId=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/WindowOrganizerController.java\"},\"-496681057\":{\"message\":\"Attempted to get remove mode of a display that does not exist: %d\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-484194149\":{\"message\":\"no-history finish of %s on new resume\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityTaskSupervisor.java\"},\"-481924678\":{\"message\":\"handleNotObscuredLocked w: %s, w.mHasSurface: %b, w.isOnScreen(): %b, w.isDisplayedLw(): %b, w.mAttrs.userActivityTimeout: %d\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_KEEP_SCREEN_ON\",\"at\":\"com/android/server/wm/RootWindowContainer.java\"},\"-463348344\":{\"message\":\"Removing and adding activity %s to root task at top callers=%s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/Task.java\"},\"-449118559\":{\"message\":\"Trying to update display configuration for invalid process, pid=%d\",\"level\":\"WARN\",\"group\":\"WM_DEBUG_CONFIGURATION\",\"at\":\"com/android/server/wm/ActivityTaskManagerService.java\"},\"-445944810\":{\"message\":\"finish(%b): mCanceled=%b\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_RECENTS_ANIMATIONS\",\"at\":\"com/android/server/wm/RecentsAnimationController.java\"},\"-443173857\":{\"message\":\"Moving pending starting from %s to %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STARTING_WINDOW\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-439951996\":{\"message\":\"Disabling listeners\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/DisplayRotation.java\"},\"-436553282\":{\"message\":\"Remove sleep token: tag=%s, displayId=%d\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/RootWindowContainer.java\"},\"-432881038\":{\"message\":\"startBackNavigation task=%s, topRunningActivity=%s, applicationBackCallback=%s, systemBackCallback=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_BACK_PREVIEW\",\"at\":\"com/android/server/wm/BackNavigationController.java\"},\"-415865166\":{\"message\":\"findFocusedWindow: Found new focus @ %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_FOCUS_LIGHT\",\"at\":\"com/android/server/wm/DisplayContent.java\"},\"-401282500\":{\"message\":\"destroyIfPossible: r=%s destroy returned removed=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_CONTAINERS\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-401029526\":{\"message\":\"%s: caller %d does not hold REAL_GET_TASKS; limiting output\",\"level\":\"WARN\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/ActivityTaskManagerService.java\"},\"-399343789\":{\"message\":\"Skipping %s: different user\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/RootWindowContainer.java\"},\"-393505149\":{\"message\":\"unable to update pointer icon\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-386552155\":{\"message\":\"Attempted to set system decors flag to a display that does not exist: %d\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-381522987\":{\"message\":\"Display %d state is now (%d), so update recording?\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONTENT_RECORDING\",\"at\":\"com/android/server/wm/DisplayContent.java\"},\"-381475323\":{\"message\":\"DisplayContent: boot is waiting for window of type %d to be drawn\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_BOOT\",\"at\":\"com/android/server/wm/DisplayContent.java\"},\"-379068494\":{\"message\":\"unknownApps is not empty: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/AppTransitionController.java\"},\"-374767836\":{\"message\":\"setAppVisibility(%s, visible=%b): %s visible=%b mVisibleRequested=%b Callers=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-373110070\":{\"message\":\"Skipping task: (mismatch activity/task) %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_TASKS\",\"at\":\"com/android/server/wm/RootWindowContainer.java\"},\"-360208282\":{\"message\":\"Animating wallpapers: old: %s hidden=%b new: %s hidden=%b\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WALLPAPER\",\"at\":\"com/android/server/wm/WallpaperController.java\"},\"-354571697\":{\"message\":\"Existence Changed in transition %d: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_TRANSITIONS\",\"at\":\"com/android/server/wm/Transition.java\"},\"-344488673\":{\"message\":\"Finishing drawing window %s: mDrawState=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STARTING_WINDOW\",\"at\":\"com/android/server/wm/WindowStateAnimator.java\"},\"-322743468\":{\"message\":\"setInputMethodInputTarget %s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_IME\",\"at\":\"com/android/server/wm/DisplayContent.java\"},\"-322035974\":{\"message\":\"App freeze timeout expired.\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-320419645\":{\"message\":\"Removing replaced window: %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_ADD_REMOVE\",\"at\":\"com/android/server/wm/WindowState.java\"},\"-317761482\":{\"message\":\"Create sleep token: tag=%s, displayId=%d\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/RootWindowContainer.java\"},\"-317194205\":{\"message\":\"clearLockedTasks: %s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_LOCKTASK\",\"at\":\"com/android/server/wm/LockTaskController.java\"},\"-312353598\":{\"message\":\"Executing finish of activity: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/TaskFragment.java\"},\"-310337305\":{\"message\":\"Activity config changed during resume: %s, new next: %s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/TaskFragment.java\"},\"-304728471\":{\"message\":\"New wallpaper: target=%s prev=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_WALLPAPER\",\"at\":\"com/android/server/wm/WallpaperController.java\"},\"-302468788\":{\"message\":\"Expected target rootTask=%s to be top most but found rootTask=%s\",\"level\":\"WARN\",\"group\":\"WM_DEBUG_RECENTS_ANIMATIONS\",\"at\":\"com/android/server/wm/RecentsAnimation.java\"},\"-302468137\":{\"message\":\"Display %d was already recording, so apply transformations if necessary\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONTENT_RECORDING\",\"at\":\"com/android/server/wm/ContentRecorder.java\"},\"-292790591\":{\"message\":\"Attempted to set IME policy to a display that does not exist: %d\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-275077723\":{\"message\":\"New animation: %s old animation: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WALLPAPER\",\"at\":\"com/android/server/wm/WallpaperController.java\"},\"-262984451\":{\"message\":\"Relaunch failed %s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-251259736\":{\"message\":\"No longer freezing: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-248761393\":{\"message\":\"startPausing: taskFrag =%s mResumedActivity=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/TaskFragment.java\"},\"-240296576\":{\"message\":\"handleAppTransitionReady: displayId=%d appTransition={%s} openingApps=[%s] closingApps=[%s] transit=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/AppTransitionController.java\"},\"-237664290\":{\"message\":\"Pause the recording session on display %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONTENT_RECORDING\",\"at\":\"com/android/server/wm/ContentRecordingController.java\"},\"-235225312\":{\"message\":\"Skipping config check for initializing activity: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONFIGURATION\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-230587670\":{\"message\":\"SyncGroup %d:  Unfinished container: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_SYNC_ENGINE\",\"at\":\"com/android/server/wm/BLASTSyncEngine.java\"},\"-228813488\":{\"message\":\"%s: Setting back callback %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_BACK_PREVIEW\",\"at\":\"com/android/server/wm/WindowState.java\"},\"-208825711\":{\"message\":\"shouldWaitAnimatingExit: isWallpaperTarget: %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_APP_TRANSITIONS\",\"at\":\"com/android/server/wm/WindowState.java\"},\"-198463978\":{\"message\":\"updateRotationUnchecked: alwaysSendConfiguration=%b forceRelayout=%b\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-193782861\":{\"message\":\"Final remove of window: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_MOVEMENT\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-182877285\":{\"message\":\"Wallpaper layer changed: assigning layers + relayout\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WALLPAPER\",\"at\":\"com/android/server/wm/DisplayContent.java\"},\"-177040661\":{\"message\":\"Start rotation animation. customAnim=%s, mCurRotation=%s, mOriginalRotation=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_ORIENTATION\",\"at\":\"com/android/server/wm/ScreenRotationAnimation.java\"},\"-172900257\":{\"message\":\"addTaskToTargets, target: %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_RECENTS_ANIMATIONS\",\"at\":\"com/android/server/wm/RecentsAnimationController.java\"},\"-172326720\":{\"message\":\"Saving icicle of %s: %s\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-168799453\":{\"message\":\"Allowing features %d:0x%s\",\"level\":\"WARN\",\"group\":\"WM_DEBUG_LOCKTASK\",\"at\":\"com/android/server/wm/ActivityTaskManagerService.java\"},\"-167822951\":{\"message\":\"Attempted to add starting window to token with already existing starting window\",\"level\":\"WARN\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-163974242\":{\"message\":\"setFinishTaskTransaction(%d): transaction=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_RECENTS_ANIMATIONS\",\"at\":\"com/android/server/wm/RecentsAnimationController.java\"},\"-143556958\":{\"message\":\"resumeNextFocusableActivityWhenRootTaskIsEmpty: %s, go home\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/Task.java\"},\"-142844021\":{\"message\":\"Unable to start recording for display %d since the surface is not available.\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONTENT_RECORDING\",\"at\":\"com/android/server/wm/ContentRecorder.java\"},\"-134091882\":{\"message\":\"Screenshotting Activity %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_BACK_PREVIEW\",\"at\":\"com/android/server/wm/TaskFragment.java\"},\"-124316973\":{\"message\":\"Translucent=%s Floating=%s ShowWallpaper=%s Disable=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STARTING_WINDOW\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-116086365\":{\"message\":\"******************** ENABLING SCREEN!\",\"level\":\"INFO\",\"group\":\"WM_DEBUG_SCREEN_ON\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-108977760\":{\"message\":\"Sandbox max bounds for uid %s to bounds %s. config to never sandbox = %s, config to always sandbox = %s, letterboxing from mismatch with parent bounds = %s, has mCompatDisplayInsets = %s, should create compatDisplayInsets = %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_CONFIGURATION\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-106400104\":{\"message\":\"Preload recents with %s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_RECENTS_ANIMATIONS\",\"at\":\"com/android/server/wm/RecentsAnimation.java\"},\"-90559682\":{\"message\":\"Config is skipping already pausing %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_CONFIGURATION\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-87705714\":{\"message\":\"findFocusedWindow: focusedApp=null using new focus @ %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_FOCUS_LIGHT\",\"at\":\"com/android/server/wm/DisplayContent.java\"},\"-87703044\":{\"message\":\"Boot completed: SurfaceFlinger is dead!\",\"level\":\"ERROR\",\"group\":\"WM_ERROR\",\"at\":\"com/android/server/wm/WindowManagerService.java\"},\"-86763148\":{\"message\":\"  KILL SURFACE SESSION %s\",\"level\":\"INFO\",\"group\":\"WM_SHOW_TRANSACTIONS\",\"at\":\"com/android/server/wm/Session.java\"},\"-80004683\":{\"message\":\"Resume failed; resetting state to %s: %s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/TaskFragment.java\"},\"-70719599\":{\"message\":\"Unregister remote animations for organizer=%s uid=%d pid=%d\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_WINDOW_ORGANIZER\",\"at\":\"com/android/server/wm/TaskFragmentOrganizerController.java\"},\"-55185509\":{\"message\":\"setFocusedTask: taskId=%d touchedActivity=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_FOCUS\",\"at\":\"com/android/server/wm/ActivityTaskManagerService.java\"},\"-50336993\":{\"message\":\"moveFocusableActivityToTop: activity=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_FOCUS\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-33096143\":{\"message\":\"applyAnimation: transition animation is disabled or skipped. container=%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_APP_TRANSITIONS_ANIM\",\"at\":\"com/android/server/wm/WindowContainer.java\"},\"-23020844\":{\"message\":\"Back: Reset surfaces\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_BACK_PREVIEW\",\"at\":\"com/android/server/wm/BackNavigationController.java\"},\"-21399771\":{\"message\":\"activity %s already destroying, skipping request with reason:%s\",\"level\":\"VERBOSE\",\"group\":\"WM_DEBUG_STATES\",\"at\":\"com/android/server/wm/ActivityRecord.java\"},\"-8483143\":{\"message\":\"No root task above target root task=%s\",\"level\":\"DEBUG\",\"group\":\"WM_DEBUG_RECENTS_ANIMATIONS\",\"at\":\"com/android/server/wm/RecentsAnimation.java\"}},\"groups\":{\"WM_DEBUG_ADD_REMOVE\":{\"tag\":\"WindowManager\"},\"WM_DEBUG_APP_TRANSITIONS\":{\"tag\":\"WindowManager\"},\"WM_DEBUG_APP_TRANSITIONS_ANIM\":{\"tag\":\"WindowManager\"},\"WM_DEBUG_BACK_PREVIEW\":{\"tag\":\"CoreBackPreview\"},\"WM_DEBUG_BOOT\":{\"tag\":\"WindowManager\"},\"WM_DEBUG_CONFIGURATION\":{\"tag\":\"WindowManager\"},\"WM_DEBUG_CONTAINERS\":{\"tag\":\"WindowManager\"},\"WM_DEBUG_CONTENT_RECORDING\":{\"tag\":\"WindowManager\"},\"WM_DEBUG_DRAW\":{\"tag\":\"WindowManager\"},\"WM_DEBUG_FOCUS\":{\"tag\":\"WindowManager\"},\"WM_DEBUG_FOCUS_LIGHT\":{\"tag\":\"WindowManager\"},\"WM_DEBUG_IME\":{\"tag\":\"WindowManager\"},\"WM_DEBUG_IMMERSIVE\":{\"tag\":\"WindowManager\"},\"WM_DEBUG_KEEP_SCREEN_ON\":{\"tag\":\"WindowManager\"},\"WM_DEBUG_LOCKTASK\":{\"tag\":\"WindowManager\"},\"WM_DEBUG_ORIENTATION\":{\"tag\":\"WindowManager\"},\"WM_DEBUG_RECENTS_ANIMATIONS\":{\"tag\":\"WindowManager\"},\"WM_DEBUG_REMOTE_ANIMATIONS\":{\"tag\":\"WindowManager\"},\"WM_DEBUG_RESIZE\":{\"tag\":\"WindowManager\"},\"WM_DEBUG_SCREEN_ON\":{\"tag\":\"WindowManager\"},\"WM_DEBUG_STARTING_WINDOW\":{\"tag\":\"WindowManager\"},\"WM_DEBUG_STATES\":{\"tag\":\"WindowManager\"},\"WM_DEBUG_SWITCH\":{\"tag\":\"WindowManager\"},\"WM_DEBUG_SYNC_ENGINE\":{\"tag\":\"WindowManager\"},\"WM_DEBUG_TASKS\":{\"tag\":\"WindowManager\"},\"WM_DEBUG_WALLPAPER\":{\"tag\":\"WindowManager\"},\"WM_DEBUG_WINDOW_INSETS\":{\"tag\":\"WindowManager\"},\"WM_DEBUG_WINDOW_MOVEMENT\":{\"tag\":\"WindowManager\"},\"WM_DEBUG_WINDOW_ORGANIZER\":{\"tag\":\"WindowManager\"},\"WM_DEBUG_WINDOW_TRANSITIONS\":{\"tag\":\"WindowManager\"},\"WM_ERROR\":{\"tag\":\"WindowManager\"},\"WM_SHOW_SURFACE_ALLOC\":{\"tag\":\"WindowManager\"},\"WM_SHOW_TRANSACTIONS\":{\"tag\":\"WindowManager\"}}}");
 
 /***/ }),
 
@@ -165853,24 +166714,6 @@
 
 /***/ }),
 
-/***/ "fQvw":
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("JPst");
-/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__);
-// Imports
-
-var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default()(function(i){return i[1]});
-// Module
-___CSS_LOADER_EXPORT___.push([module.i, "\n.config-selection[data-v-60fe90a6] {\n  width: 150px;\n  display: inline-flex;\n  margin-left: 5px;\n  margin-right: 5px;\n}\n.device-choice[data-v-60fe90a6] {\n  display: inline-flex;\n}\nh3[data-v-60fe90a6] {\n  margin-bottom: 0;\n}\n.trace-btn[data-v-60fe90a6], .dump-btn[data-v-60fe90a6] {\n  margin-top: 0;\n}\npre[data-v-60fe90a6] {\n  white-space: pre-wrap;\n}\n", ""]);
-// Exports
-/* harmony default export */ __webpack_exports__["default"] = (___CSS_LOADER_EXPORT___);
-
-
-/***/ }),
-
 /***/ "fcXw":
 /***/ (function(module, __webpack_exports__, __webpack_require__) {
 
@@ -165945,22 +166788,6 @@
 
 /***/ }),
 
-/***/ "iast":
-/***/ (function(module, exports, __webpack_require__) {
-
-// style-loader: Adds some css to the DOM by adding a <style> tag
-
-// load the styles
-var content = __webpack_require__("fQvw");
-if(content.__esModule) content = content.default;
-if(typeof content === 'string') content = [[module.i, content, '']];
-if(content.locals) module.exports = content.locals;
-// add the styles to the DOM
-var add = __webpack_require__("SZ7m").default
-var update = add("24965959", content, true, {});
-
-/***/ }),
-
 /***/ "jKyZ":
 /***/ (function(module, exports, __webpack_require__) {
 
@@ -166097,6 +166924,10 @@
                         "hardKeyboardAvailable": {
                           "type": "bool",
                           "id": 10
+                        },
+                        "windowFramesValid": {
+                          "type": "bool",
+                          "id": 11
                         }
                       }
                     },
@@ -166143,7 +166974,10 @@
                         },
                         "defaultMinSizeResizableTask": {
                           "type": "int32",
-                          "id": 8
+                          "id": 8,
+                          "options": {
+                            "deprecated": true
+                          }
                         }
                       },
                       "reserved": [
@@ -166639,6 +167473,15 @@
                           "rule": "repeated",
                           "type": "string",
                           "id": 37
+                        },
+                        "keepClearAreas": {
+                          "rule": "repeated",
+                          "type": ".android.graphics.RectProto",
+                          "id": 38
+                        },
+                        "minSizeOfResizeableTaskDp": {
+                          "type": "int32",
+                          "id": 39
                         }
                       },
                       "reserved": [
@@ -167154,6 +167997,10 @@
                         "providesMaxBounds": {
                           "type": "bool",
                           "id": 34
+                        },
+                        "enableRecentsScreenshot": {
+                          "type": "bool",
+                          "id": 35
                         }
                       },
                       "reserved": [
@@ -167415,7 +168262,10 @@
                         },
                         "finishedSeamlessRotationFrame": {
                           "type": "int64",
-                          "id": 40
+                          "id": 40,
+                          "options": {
+                            "deprecated": true
+                          }
                         },
                         "windowFrames": {
                           "type": "WindowFramesProto",
@@ -167432,6 +168282,16 @@
                         "globalScale": {
                           "type": "float",
                           "id": 44
+                        },
+                        "keepClearAreas": {
+                          "rule": "repeated",
+                          "type": ".android.graphics.RectProto",
+                          "id": 45
+                        },
+                        "unrestrictedKeepClearAreas": {
+                          "rule": "repeated",
+                          "type": ".android.graphics.RectProto",
+                          "id": 46
                         }
                       }
                     },
@@ -169826,17 +170686,6 @@
 
 /***/ }),
 
-/***/ "qM6R":
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-/* harmony import */ var _node_modules_vue_style_loader_index_js_node_modules_css_loader_dist_cjs_js_ref_3_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_vue_loader_lib_index_js_vue_loader_options_DataAdb_vue_vue_type_style_index_0_id_60fe90a6_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("iast");
-/* harmony import */ var _node_modules_vue_style_loader_index_js_node_modules_css_loader_dist_cjs_js_ref_3_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_vue_loader_lib_index_js_vue_loader_options_DataAdb_vue_vue_type_style_index_0_id_60fe90a6_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_vue_style_loader_index_js_node_modules_css_loader_dist_cjs_js_ref_3_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_vue_loader_lib_index_js_vue_loader_options_DataAdb_vue_vue_type_style_index_0_id_60fe90a6_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__);
-/* unused harmony reexport * */
-
-
-/***/ }),
-
 /***/ "t+B9":
 /***/ (function(module, exports, __webpack_require__) {
 
@@ -169847,6 +170696,7 @@
   var Kind_CLASS = Kotlin.Kind.CLASS;
   var hashCode = Kotlin.hashCode;
   var joinToString = Kotlin.kotlin.collections.joinToString_fmv235$;
+  var listOf = Kotlin.kotlin.collections.listOf_i5x0yv$;
   var Collection = Kotlin.kotlin.collections.Collection;
   var L1000000 = Kotlin.Long.fromInt(1000000);
   var L1000000000 = Kotlin.Long.fromInt(1000000000);
@@ -169871,12 +170721,11 @@
   var RuntimeException_init = Kotlin.kotlin.RuntimeException_init_pdl1vj$;
   var Kind_INTERFACE = Kotlin.Kind.INTERFACE;
   var numberToInt = Kotlin.numberToInt;
-  var listOf = Kotlin.kotlin.collections.listOf_mh5how$;
+  var listOf_0 = Kotlin.kotlin.collections.listOf_mh5how$;
   var L500 = Kotlin.Long.fromInt(500);
   var IllegalArgumentException_init = Kotlin.kotlin.IllegalArgumentException_init_pdl1vj$;
   var ArrayList_init = Kotlin.kotlin.collections.ArrayList_init_287e2$;
   var addAll = Kotlin.kotlin.collections.addAll_ipc267$;
-  var listOf_0 = Kotlin.kotlin.collections.listOf_i5x0yv$;
   var contentEquals = Kotlin.arrayEquals;
   var contentDeepHashCode = Kotlin.arrayDeepHashCode;
   var joinToString_0 = Kotlin.kotlin.collections.joinToString_cgipc5$;
@@ -169885,14 +170734,14 @@
   var lastOrNull = Kotlin.kotlin.collections.lastOrNull_us0mfu$;
   var toList = Kotlin.kotlin.collections.toList_us0mfu$;
   var List = Kotlin.kotlin.collections.List;
+  var contentHashCode = Kotlin.arrayHashCode;
+  var copyToArray = Kotlin.kotlin.collections.copyToArray;
   var ULong_init = Kotlin.kotlin.ULong;
   var addAll_0 = Kotlin.kotlin.collections.addAll_ye1y7v$;
-  var copyToArray = Kotlin.kotlin.collections.copyToArray;
   var toMutableList = Kotlin.kotlin.collections.toMutableList_us0mfu$;
   var mutableListOf = Kotlin.kotlin.collections.mutableListOf_i5x0yv$;
   var reversed = Kotlin.kotlin.collections.reversed_7wnvza$;
   var contains_0 = Kotlin.kotlin.collections.contains_mjy6jw$;
-  var contentHashCode = Kotlin.arrayHashCode;
   var sortedWith = Kotlin.kotlin.collections.sortedWith_iwcb0m$;
   var wrapFunction = Kotlin.wrapFunction;
   var Comparator = Kotlin.kotlin.Comparator;
@@ -169954,6 +170803,8 @@
   ConditionList.prototype.constructor = ConditionList;
   Matrix33.prototype = Object.create(Matrix22.prototype);
   Matrix33.prototype.constructor = Matrix33;
+  LayerTraceEntry.prototype = Object.create(BaseLayerTraceEntry.prototype);
+  LayerTraceEntry.prototype.constructor = LayerTraceEntry;
   Region$Op.prototype = Object.create(Enum.prototype);
   Region$Op.prototype.constructor = Region$Op;
   BaseFsmState.prototype = Object.create(FSMState.prototype);
@@ -170238,6 +171089,11 @@
     return false;
   }
   ConditionList.$metadata$ = {kind: Kind_CLASS, simpleName: 'ConditionList', interfaces: [Condition]};
+  function ConditionList_init(conditions, $this) {
+    $this = $this || Object.create(ConditionList.prototype);
+    ConditionList.call($this, listOf(conditions.slice()));
+    return $this;
+  }
   function DeviceStateDump(wmState, layerState) {
     this.wmState = wmState;
     this.layerState = layerState;
@@ -170692,7 +171548,7 @@
     return this.prettyPrint();
   };
   Rect.prototype.clone = function () {
-    return new Rect(this.left, this.top, this.right, this.bottom);
+    return (this != null ? this.equals(Rect$Companion_getInstance().EMPTY) : null) ? Rect$Companion_getInstance().EMPTY : new Rect(this.left, this.top, this.right, this.bottom);
   };
   function Rect$Companion() {
     Rect$Companion_instance = this;
@@ -170944,7 +171800,7 @@
       if (Kotlin.isType(element, ConditionList)) {
         transform$result = element.conditions;
       } else {
-        transform$result = listOf(element);
+        transform$result = listOf_0(element);
       }
       var list = transform$result;
       addAll(destination, list);
@@ -170996,7 +171852,7 @@
     this.statusBarLayerName_0 = FlickerComponentName$Companion_getInstance().STATUS_BAR.toLayerName();
   }
   WindowManagerConditionsFactory.prototype.isNavBarVisible = function () {
-    return new ConditionList(listOf_0([this.isNavBarWindowVisible(), this.isNavBarLayerVisible(), this.isNavBarLayerOpaque()]));
+    return new ConditionList(listOf([this.isNavBarWindowVisible(), this.isNavBarLayerVisible(), this.isNavBarLayerOpaque()]));
   };
   function WindowManagerConditionsFactory$isNavBarWindowVisible$lambda(this$WindowManagerConditionsFactory) {
     return function (it) {
@@ -171019,7 +171875,7 @@
     return new Condition('isNavBarLayerOpaque', WindowManagerConditionsFactory$isNavBarLayerOpaque$lambda(this));
   };
   WindowManagerConditionsFactory.prototype.isStatusBarVisible = function () {
-    return new ConditionList(listOf_0([this.isStatusBarWindowVisible(), this.isStatusBarLayerVisible(), this.isStatusBarLayerOpaque()]));
+    return new ConditionList(listOf([this.isStatusBarWindowVisible(), this.isStatusBarLayerVisible(), this.isStatusBarLayerOpaque()]));
   };
   function WindowManagerConditionsFactory$isStatusBarWindowVisible$lambda(this$WindowManagerConditionsFactory) {
     return function (it) {
@@ -171106,7 +171962,12 @@
   }
   WindowManagerConditionsFactory.prototype.hasRotation_vux9f0$ = function (expectedRotation, displayId) {
     var hasRotationCondition = new Condition('hasRotation[' + expectedRotation + ', display=' + displayId + ']', WindowManagerConditionsFactory$hasRotation$lambda(displayId, expectedRotation));
-    return new ConditionList(listOf_0([hasRotationCondition, this.isLayerVisible_n5t22c$(FlickerComponentName$Companion_getInstance().ROTATION).negate(), this.isLayerVisible_n5t22c$(FlickerComponentName$Companion_getInstance().BACK_SURFACE).negate(), this.hasLayersAnimating().negate()]));
+    return new ConditionList(listOf([hasRotationCondition, this.isLayerVisible_n5t22c$(FlickerComponentName$Companion_getInstance().ROTATION).negate(), this.isLayerVisible_n5t22c$(FlickerComponentName$Companion_getInstance().BACK_SURFACE).negate(), this.hasLayersAnimating().negate()]));
+  };
+  WindowManagerConditionsFactory.prototype.isWindowVisible_em69mm$ = function (component, displayId) {
+    if (displayId === void 0)
+      displayId = 0;
+    return ConditionList_init([this.containsActivity_n5t22c$(component), this.containsWindow_n5t22c$(component), this.isActivityVisible_n5t22c$(component), this.isWindowSurfaceShown_n5t22c$(component), this.isAppTransitionIdle_za3lpa$(displayId)]);
   };
   function WindowManagerConditionsFactory$isLayerVisible$lambda(closure$layerName) {
     return function (it) {
@@ -171127,7 +171988,7 @@
   };
   function WindowManagerConditionsFactory$isLayerColorAlphaOne$lambda(closure$component, this$WindowManagerConditionsFactory) {
     return function (it) {
-      var layers = this$WindowManagerConditionsFactory.getVisibleLayersByName_p3srjn$(it.layerState, closure$component);
+      var layers = this$WindowManagerConditionsFactory.getVisibleLayersByName_9ou002$(it.layerState, closure$component);
       var any$result;
       any$break: do {
         var tmp$;
@@ -171162,7 +172023,7 @@
   };
   function WindowManagerConditionsFactory$isLayerTransformFlagSet$lambda(closure$component, this$WindowManagerConditionsFactory, closure$transform) {
     return function (it) {
-      var layers = this$WindowManagerConditionsFactory.getVisibleLayersByName_p3srjn$(it.layerState, closure$component);
+      var layers = this$WindowManagerConditionsFactory.getVisibleLayersByName_9ou002$(it.layerState, closure$component);
       var any$result;
       any$break: do {
         var tmp$;
@@ -171197,13 +172058,13 @@
     return new Condition('isLayerTransformFlagSet[' + layerId + ', ' + transform + ']', WindowManagerConditionsFactory$isLayerTransformFlagSet$lambda_0(layerId, transform));
   };
   WindowManagerConditionsFactory.prototype.isLayerTransformIdentity_za3lpa$ = function (layerId) {
-    return new ConditionList(listOf_0([this.isLayerTransformFlagSet_vux9f0$(layerId, 4).negate(), this.isLayerTransformFlagSet_vux9f0$(layerId, 1).negate(), this.isLayerTransformFlagSet_vux9f0$(layerId, 2).negate()]));
+    return new ConditionList(listOf([this.isLayerTransformFlagSet_vux9f0$(layerId, 4).negate(), this.isLayerTransformFlagSet_vux9f0$(layerId, 1).negate(), this.isLayerTransformFlagSet_vux9f0$(layerId, 2).negate()]));
   };
   WindowManagerConditionsFactory.prototype.isTransformFlagSet_0 = function (layer, transform) {
     var tmp$, tmp$_0;
     return (tmp$_0 = (tmp$ = layer.transform.type) != null ? Transform$Companion_getInstance().isFlagSet_dqglrj$(tmp$, transform) : null) != null ? tmp$_0 : false;
   };
-  WindowManagerConditionsFactory.prototype.getVisibleLayersByName_p3srjn$ = function ($receiver, component) {
+  WindowManagerConditionsFactory.prototype.getVisibleLayersByName_9ou002$ = function ($receiver, component) {
     var $receiver_0 = $receiver.visibleLayers;
     var destination = ArrayList_init();
     var tmp$;
@@ -171271,7 +172132,7 @@
     return new Condition('hasPipWindow', WindowManagerConditionsFactory$hasPipWindow$lambda);
   };
   WindowManagerConditionsFactory.prototype.isImeShown_za3lpa$ = function (displayId) {
-    return new ConditionList(listOf_0([this.isImeOnDisplay_0(displayId), this.isLayerVisible_n5t22c$(FlickerComponentName$Companion_getInstance().IME), this.isImeSurfaceShown_0(), this.isWindowSurfaceShown_61zpoe$(FlickerComponentName$Companion_getInstance().IME.toWindowName())]));
+    return new ConditionList(listOf([this.isImeOnDisplay_0(displayId), this.isLayerVisible_n5t22c$(FlickerComponentName$Companion_getInstance().IME), this.isImeSurfaceShown_0(), this.isWindowSurfaceShown_61zpoe$(FlickerComponentName$Companion_getInstance().IME.toWindowName())]));
   };
   function WindowManagerConditionsFactory$isImeOnDisplay$lambda(closure$displayId) {
     return function (it) {
@@ -171491,6 +172352,143 @@
   ErrorTrace.prototype.copy_uik7ky$ = function (entries) {
     return new ErrorTrace(entries === void 0 ? this.entries : entries);
   };
+  function BaseLayerTraceEntry() {
+    this.isVisible = true;
+  }
+  Object.defineProperty(BaseLayerTraceEntry.prototype, 'stableId', {configurable: true, get: function () {
+    var tmp$;
+    var tmp$_0;
+    if ((tmp$ = Kotlin.getKClassFromExpression(this).simpleName) != null)
+      tmp$_0 = tmp$;
+    else {
+      throw IllegalStateException_init('Unable to determine class'.toString());
+    }
+    return tmp$_0;
+  }});
+  Object.defineProperty(BaseLayerTraceEntry.prototype, 'name', {configurable: true, get: function () {
+    return prettyTimestamp(this.timestamp);
+  }});
+  Object.defineProperty(BaseLayerTraceEntry.prototype, 'visibleLayers', {configurable: true, get: function () {
+    var $receiver = this.flattenedLayers;
+    var destination = ArrayList_init();
+    var tmp$;
+    for (tmp$ = 0; tmp$ !== $receiver.length; ++tmp$) {
+      var element = $receiver[tmp$];
+      if (element.isVisible)
+        destination.add_11rb$(element);
+    }
+    return copyToArray(destination);
+  }});
+  Object.defineProperty(BaseLayerTraceEntry.prototype, 'children', {configurable: true, get: function () {
+    var $receiver = this.flattenedLayers;
+    var destination = ArrayList_init();
+    var tmp$;
+    for (tmp$ = 0; tmp$ !== $receiver.length; ++tmp$) {
+      var element = $receiver[tmp$];
+      if (element.isRootLayer)
+        destination.add_11rb$(element);
+    }
+    return copyToArray(destination);
+  }});
+  BaseLayerTraceEntry.prototype.getLayerWithBuffer_61zpoe$ = function (name) {
+    var $receiver = this.flattenedLayers;
+    var firstOrNull$result;
+    firstOrNull$break: do {
+      var tmp$;
+      for (tmp$ = 0; tmp$ !== $receiver.length; ++tmp$) {
+        var element = $receiver[tmp$];
+        if (contains(element.name, name) && element.activeBuffer.isNotEmpty) {
+          firstOrNull$result = element;
+          break firstOrNull$break;
+        }}
+      firstOrNull$result = null;
+    }
+     while (false);
+    return firstOrNull$result;
+  };
+  BaseLayerTraceEntry.prototype.getLayerById_za3lpa$ = function (layerId) {
+    var $receiver = this.flattenedLayers;
+    var firstOrNull$result;
+    firstOrNull$break: do {
+      var tmp$;
+      for (tmp$ = 0; tmp$ !== $receiver.length; ++tmp$) {
+        var element = $receiver[tmp$];
+        if (element.id === layerId) {
+          firstOrNull$result = element;
+          break firstOrNull$break;
+        }}
+      firstOrNull$result = null;
+    }
+     while (false);
+    return firstOrNull$result;
+  };
+  BaseLayerTraceEntry.prototype.isAnimating_61zpoe$ = function (windowName) {
+    if (windowName === void 0)
+      windowName = '';
+    var $receiver = this.visibleLayers;
+    var destination = ArrayList_init();
+    var tmp$;
+    for (tmp$ = 0; tmp$ !== $receiver.length; ++tmp$) {
+      var element = $receiver[tmp$];
+      if (contains(element.name, windowName))
+        destination.add_11rb$(element);
+    }
+    var layers = destination;
+    var any$result;
+    any$break: do {
+      var tmp$_0;
+      if (Kotlin.isType(layers, Collection) && layers.isEmpty()) {
+        any$result = false;
+        break any$break;
+      }tmp$_0 = layers.iterator();
+      while (tmp$_0.hasNext()) {
+        var element_0 = tmp$_0.next();
+        if (!element_0.transform.isSimpleRotation) {
+          any$result = true;
+          break any$break;
+        }}
+      any$result = false;
+    }
+     while (false);
+    var layersAnimating = any$result;
+    var pipAnimating = this.isVisible_61zpoe$(FlickerComponentName$Companion_getInstance().PIP_CONTENT_OVERLAY.toWindowName());
+    return layersAnimating || pipAnimating;
+  };
+  BaseLayerTraceEntry.prototype.isVisible_61zpoe$ = function (windowName) {
+    var $receiver = this.visibleLayers;
+    var any$result;
+    any$break: do {
+      var tmp$;
+      for (tmp$ = 0; tmp$ !== $receiver.length; ++tmp$) {
+        var element = $receiver[tmp$];
+        if (contains(element.name, windowName)) {
+          any$result = true;
+          break any$break;
+        }}
+      any$result = false;
+    }
+     while (false);
+    return any$result;
+  };
+  BaseLayerTraceEntry.prototype.asTrace = function () {
+    return new LayersTrace([this]);
+  };
+  BaseLayerTraceEntry.prototype.toString = function () {
+    return prettyTimestamp(this.timestamp) + ' (timestamp=' + this.timestamp.toString() + ')';
+  };
+  BaseLayerTraceEntry.prototype.equals = function (other) {
+    return Kotlin.isType(other, BaseLayerTraceEntry) && equals(other.timestamp, this.timestamp);
+  };
+  BaseLayerTraceEntry.prototype.hashCode = function () {
+    var result = hashCode(this.timestamp);
+    result = (31 * result | 0) + hashCode(this.hwcBlob) | 0;
+    result = (31 * result | 0) + hashCode(this.where) | 0;
+    result = (31 * result | 0) + contentHashCode(this.displays) | 0;
+    result = (31 * result | 0) + hashCode(this.isVisible) | 0;
+    result = (31 * result | 0) + contentHashCode(this.flattenedLayers) | 0;
+    return result;
+  };
+  BaseLayerTraceEntry.$metadata$ = {kind: Kind_CLASS, simpleName: 'BaseLayerTraceEntry', interfaces: [ITraceEntry]};
   function Display(id, name, layerStackId, size, layerStackSpace, transform, isVirtual) {
     Display$Companion_getInstance();
     this.id = id;
@@ -171721,45 +172719,38 @@
     return it.id.toString();
   }
   Object.defineProperty(Layer.prototype, 'visibilityReason', {configurable: true, get: function () {
-    var tmp$, tmp$_0;
-    if (this.isVisible)
-      tmp$_0 = '';
-    else if (this.isContainerLayer)
-      tmp$_0 = 'ContainerLayer';
-    else if (this.isHiddenByPolicy)
-      tmp$_0 = 'Flag is hidden';
-    else if (this.isHiddenByParent)
-      tmp$_0 = 'Hidden by parent ' + toString((tmp$ = this.parent) != null ? tmp$.name : null);
-    else if (this.isBufferLayer && this.isActiveBufferEmpty)
-      tmp$_0 = 'Buffer is empty';
-    else if (this.color.isEmpty)
-      tmp$_0 = 'Alpha is 0';
-    else {
-      var tmp$_1, tmp$_2;
-      if ((tmp$_2 = (tmp$_1 = this.crop) != null ? tmp$_1.isEmpty : null) != null ? tmp$_2 : false)
-        tmp$_0 = 'Crop is 0x0';
-      else if (this.bounds.isEmpty)
-        tmp$_0 = 'Bounds is 0x0';
-      else if (!this.transform.isValid)
-        tmp$_0 = 'Transform is invalid';
-      else if (this.isRelativeOf && this.zOrderRelativeOf == null)
-        tmp$_0 = 'RelativeOf layer has been removed';
-      else if (this.isEffectLayer && !this.fillsColor && !this.drawsShadows && !this.hasBlur)
-        tmp$_0 = 'Effect layer does not have color fill, shadow or blur';
-      else {
-        if (!this._occludedBy_0.isEmpty()) {
-          var occludedByIds = joinToString(this._occludedBy_0, ', ', void 0, void 0, void 0, void 0, Layer$get_Layer$visibilityReason$lambda);
-          tmp$_0 = 'Layer is occluded by: ' + occludedByIds;
-        } else {
-          var tmp$_3, tmp$_4;
-          if ((tmp$_4 = (tmp$_3 = this.visibleRegion) != null ? tmp$_3.isEmpty : null) != null ? tmp$_4 : false)
-            tmp$_0 = 'Visible region calculated by Composition Engine is empty';
-          else
-            tmp$_0 = 'Unknown';
-        }
-      }
-    }
-    return tmp$_0;
+    var tmp$, tmp$_0, tmp$_1;
+    if (this.isVisible) {
+      return [];
+    }var reasons = ArrayList_init();
+    if (this.isContainerLayer)
+      reasons.add_11rb$('ContainerLayer');
+    if (this.isHiddenByPolicy)
+      reasons.add_11rb$('Flag is hidden');
+    if (this.isHiddenByParent) {
+      reasons.add_11rb$('Hidden by parent ' + toString((tmp$ = this.parent) != null ? tmp$.name : null));
+    }if (this.isBufferLayer && this.isActiveBufferEmpty)
+      reasons.add_11rb$('Buffer is empty');
+    if (this.color.isEmpty)
+      reasons.add_11rb$('Alpha is 0');
+    if (((tmp$_0 = this.crop) != null ? tmp$_0.isEmpty : null) === true)
+      reasons.add_11rb$('Crop is 0x0');
+    if (this.bounds.isEmpty)
+      reasons.add_11rb$('Bounds is 0x0');
+    if (!this.transform.isValid)
+      reasons.add_11rb$('Transform is invalid');
+    if (this.isRelativeOf && this.zOrderRelativeOf == null) {
+      reasons.add_11rb$('RelativeOf layer has been removed');
+    }if (this.isEffectLayer && !this.fillsColor && !this.drawsShadows && !this.hasBlur) {
+      reasons.add_11rb$('Effect layer does not have color fill, shadow or blur');
+    }if (!this._occludedBy_0.isEmpty()) {
+      var occludedByIds = joinToString(this._occludedBy_0, ', ', void 0, void 0, void 0, void 0, Layer$get_Layer$visibilityReason$lambda);
+      reasons.add_11rb$('Layer is occluded by: ' + occludedByIds);
+    }if (((tmp$_1 = this.visibleRegion) != null ? tmp$_1.isEmpty : null) === true) {
+      reasons.add_11rb$('Visible region calculated by Composition Engine is empty');
+    }if (reasons.isEmpty())
+      reasons.add_11rb$('Unknown');
+    return copyToArray(reasons);
   }});
   Object.defineProperty(Layer.prototype, 'absoluteZ', {configurable: true, get: function () {
     var zOrderRelativeOf = this.zOrderRelativeOf;
@@ -172028,39 +173019,27 @@
     };
   });
   function LayerTraceEntry(timestamp, hwcBlob, where, displays, _rootLayers) {
+    BaseLayerTraceEntry.call(this);
     this.timestamp_16yg2k$_0 = timestamp;
-    this.hwcBlob = hwcBlob;
-    this.where = where;
-    this.displays = displays;
-    this.isVisible = true;
-    this.flattenedLayers = this.fillFlattenedLayers_gvbe2j$_0(_rootLayers);
+    this.hwcBlob_juz13r$_0 = hwcBlob;
+    this.where_xe0777$_0 = where;
+    this.displays_3q99sn$_0 = displays;
+    this.flattenedLayers_lk7anf$_0 = this.fillFlattenedLayers_gvbe2j$_0(_rootLayers);
   }
   Object.defineProperty(LayerTraceEntry.prototype, 'timestamp', {get: function () {
     return this.timestamp_16yg2k$_0;
   }});
-  Object.defineProperty(LayerTraceEntry.prototype, 'stableId', {configurable: true, get: function () {
-    var tmp$;
-    var tmp$_0;
-    if ((tmp$ = Kotlin.getKClassFromExpression(this).simpleName) != null)
-      tmp$_0 = tmp$;
-    else {
-      throw IllegalStateException_init('Unable to determine class'.toString());
-    }
-    return tmp$_0;
+  Object.defineProperty(LayerTraceEntry.prototype, 'hwcBlob', {get: function () {
+    return this.hwcBlob_juz13r$_0;
   }});
-  Object.defineProperty(LayerTraceEntry.prototype, 'name', {configurable: true, get: function () {
-    return prettyTimestamp(this.timestamp);
+  Object.defineProperty(LayerTraceEntry.prototype, 'where', {get: function () {
+    return this.where_xe0777$_0;
   }});
-  Object.defineProperty(LayerTraceEntry.prototype, 'children', {configurable: true, get: function () {
-    var $receiver = this.flattenedLayers;
-    var destination = ArrayList_init();
-    var tmp$;
-    for (tmp$ = 0; tmp$ !== $receiver.length; ++tmp$) {
-      var element = $receiver[tmp$];
-      if (element.isRootLayer)
-        destination.add_11rb$(element);
-    }
-    return copyToArray(destination);
+  Object.defineProperty(LayerTraceEntry.prototype, 'displays', {get: function () {
+    return this.displays_3q99sn$_0;
+  }});
+  Object.defineProperty(LayerTraceEntry.prototype, 'flattenedLayers', {configurable: true, get: function () {
+    return this.flattenedLayers_lk7anf$_0;
   }});
   LayerTraceEntry.prototype.fillFlattenedLayers_gvbe2j$_0 = function (rootLayers) {
     var tmp$, tmp$_0;
@@ -172104,17 +173083,6 @@
     }
     return destination;
   };
-  Object.defineProperty(LayerTraceEntry.prototype, 'visibleLayers', {configurable: true, get: function () {
-    var $receiver = this.flattenedLayers;
-    var destination = ArrayList_init();
-    var tmp$;
-    for (tmp$ = 0; tmp$ !== $receiver.length; ++tmp$) {
-      var element = $receiver[tmp$];
-      if (element.isVisible)
-        destination.add_11rb$(element);
-    }
-    return copyToArray(destination);
-  }});
   function LayerTraceEntry$topDownTraversal$lambda_0(it) {
     return it.z;
   }
@@ -172174,105 +173142,7 @@
       }}
     return $receiver;
   };
-  LayerTraceEntry.prototype.getLayerWithBuffer_61zpoe$ = function (name) {
-    var $receiver = this.flattenedLayers;
-    var firstOrNull$result;
-    firstOrNull$break: do {
-      var tmp$;
-      for (tmp$ = 0; tmp$ !== $receiver.length; ++tmp$) {
-        var element = $receiver[tmp$];
-        if (contains(element.name, name) && element.activeBuffer.isNotEmpty) {
-          firstOrNull$result = element;
-          break firstOrNull$break;
-        }}
-      firstOrNull$result = null;
-    }
-     while (false);
-    return firstOrNull$result;
-  };
-  LayerTraceEntry.prototype.getLayerById_za3lpa$ = function (layerId) {
-    var $receiver = this.flattenedLayers;
-    var firstOrNull$result;
-    firstOrNull$break: do {
-      var tmp$;
-      for (tmp$ = 0; tmp$ !== $receiver.length; ++tmp$) {
-        var element = $receiver[tmp$];
-        if (element.id === layerId) {
-          firstOrNull$result = element;
-          break firstOrNull$break;
-        }}
-      firstOrNull$result = null;
-    }
-     while (false);
-    return firstOrNull$result;
-  };
-  LayerTraceEntry.prototype.isAnimating_61zpoe$ = function (windowName) {
-    if (windowName === void 0)
-      windowName = '';
-    var $receiver = this.visibleLayers;
-    var destination = ArrayList_init();
-    var tmp$;
-    for (tmp$ = 0; tmp$ !== $receiver.length; ++tmp$) {
-      var element = $receiver[tmp$];
-      if (contains(element.name, windowName))
-        destination.add_11rb$(element);
-    }
-    var layers = destination;
-    var any$result;
-    any$break: do {
-      var tmp$_0;
-      if (Kotlin.isType(layers, Collection) && layers.isEmpty()) {
-        any$result = false;
-        break any$break;
-      }tmp$_0 = layers.iterator();
-      while (tmp$_0.hasNext()) {
-        var element_0 = tmp$_0.next();
-        if (!element_0.transform.isSimpleRotation) {
-          any$result = true;
-          break any$break;
-        }}
-      any$result = false;
-    }
-     while (false);
-    var layersAnimating = any$result;
-    var pipAnimating = this.isVisible_61zpoe$(FlickerComponentName$Companion_getInstance().PIP_CONTENT_OVERLAY.toWindowName());
-    return layersAnimating || pipAnimating;
-  };
-  LayerTraceEntry.prototype.isVisible_61zpoe$ = function (windowName) {
-    var $receiver = this.visibleLayers;
-    var any$result;
-    any$break: do {
-      var tmp$;
-      for (tmp$ = 0; tmp$ !== $receiver.length; ++tmp$) {
-        var element = $receiver[tmp$];
-        if (contains(element.name, windowName)) {
-          any$result = true;
-          break any$break;
-        }}
-      any$result = false;
-    }
-     while (false);
-    return any$result;
-  };
-  LayerTraceEntry.prototype.asTrace = function () {
-    return new LayersTrace([this]);
-  };
-  LayerTraceEntry.prototype.toString = function () {
-    return prettyTimestamp(this.timestamp) + ' (timestamp=' + this.timestamp.toString() + ')';
-  };
-  LayerTraceEntry.prototype.equals = function (other) {
-    return Kotlin.isType(other, LayerTraceEntry) && equals(other.timestamp, this.timestamp);
-  };
-  LayerTraceEntry.prototype.hashCode = function () {
-    var result = hashCode(this.timestamp);
-    result = (31 * result | 0) + hashCode(this.hwcBlob) | 0;
-    result = (31 * result | 0) + hashCode(this.where) | 0;
-    result = (31 * result | 0) + contentHashCode(this.displays) | 0;
-    result = (31 * result | 0) + hashCode(this.isVisible) | 0;
-    result = (31 * result | 0) + contentHashCode(this.flattenedLayers) | 0;
-    return result;
-  };
-  LayerTraceEntry.$metadata$ = {kind: Kind_CLASS, simpleName: 'LayerTraceEntry', interfaces: [ITraceEntry]};
+  LayerTraceEntry.$metadata$ = {kind: Kind_CLASS, simpleName: 'LayerTraceEntry', interfaces: [BaseLayerTraceEntry]};
   function LayerTraceEntryBuilder(timestamp, layers, displays, hwcBlob, where) {
     if (hwcBlob === void 0)
       hwcBlob = '';
@@ -172555,7 +173425,7 @@
   LayersTrace.prototype.component1 = function () {
     return this.entries;
   };
-  LayersTrace.prototype.copy_1llug0$ = function (entries) {
+  LayersTrace.prototype.copy_gj44gh$ = function (entries) {
     return new LayersTrace(entries === void 0 ? this.entries : entries);
   };
   function Transform(type, matrix) {
@@ -173499,7 +174369,7 @@
     bRunsIndex = bRunsIndex + 1 | 0;
     aRunsIndex = aRunsIndex + 1 | 0;
     bRunsIndex = bRunsIndex + 1 | 0;
-    var gEmptyScanline = listOf_0([0, 0, 2147483647, 0]);
+    var gEmptyScanline = listOf([0, 0, 2147483647, 0]);
     var gSentinel = 2;
     Region$Companion_getInstance().assert_sentinel_0(aTop, false);
     Region$Companion_getInstance().assert_sentinel_0(aBot, false);
@@ -173789,7 +174659,7 @@
     this.wmTrace_0 = wmTrace;
     this.layersTrace_0 = layersTrace;
     this.logger_0 = logger;
-    this.transitions_0 = listOf_0([new RotationProcessor(this.logger_0), new AppLaunchProcessor(this.logger_0), new AppCloseProcessor(this.logger_0), new ImeAppearProcessor(this.logger_0), new ImeDisappearProcessor(this.logger_0), new PipEnterProcessor(this.logger_0), new PipResizeProcessor(this.logger_0), new PipExpandProcessor(this.logger_0), new PipExitProcessor(this.logger_0)]);
+    this.transitions_0 = listOf([new RotationProcessor(this.logger_0), new AppLaunchProcessor(this.logger_0), new AppCloseProcessor(this.logger_0), new ImeAppearProcessor(this.logger_0), new ImeDisappearProcessor(this.logger_0), new PipEnterProcessor(this.logger_0), new PipResizeProcessor(this.logger_0), new PipExpandProcessor(this.logger_0), new PipExitProcessor(this.logger_0)]);
   }
   TaggingEngine.prototype.run = function () {
     var $receiver = this.transitions_0;
@@ -173855,7 +174725,7 @@
     this.$outer = $outer;
     TransitionProcessor$BaseState.call(this, this.$outer, tags);
   }
-  AppCloseProcessor$RetrieveClosingAppLayerId.prototype.doProcessState_bop1cf$ = function (previous, current, next) {
+  AppCloseProcessor$RetrieveClosingAppLayerId.prototype.doProcessState_tzuef4$ = function (previous, current, next) {
     var isStableState = this.$outer.wmStateIdle_0.isSatisfied_11rb$(current) || this.$outer.wmStateComplete_0.isSatisfied_11rb$(current) || this.$outer.areLayersAnimating_0.negate().isSatisfied_11rb$(current);
     var $receiver = current.wmState.rootTasks;
     var destination = ArrayList_init();
@@ -173940,7 +174810,7 @@
     this.layerId_0 = this.appWindow_0.layerId;
     this.isTranslating_0 = WindowManagerConditionsFactory_getInstance().isLayerTransformFlagSet_vux9f0$(this.layerId_0, 1);
   }
-  AppCloseProcessor$WaitLayerAnimationComplete.prototype.doProcessState_bop1cf$ = function (previous, current, next) {
+  AppCloseProcessor$WaitLayerAnimationComplete.prototype.doProcessState_tzuef4$ = function (previous, current, next) {
     var tmp$, tmp$_0;
     if (previous == null)
       return this;
@@ -173954,8 +174824,8 @@
     } else if (finishedClosing && isStableState) {
       var deviceStateDump = this.$outer.translatingWindows_0.get_11rb$(this.appWindow_0.token);
       if (deviceStateDump != null) {
-        this.addStartTransitionTag_cgxjfp$(deviceStateDump, this.transition_8be2vx$, this.layerId_0, this.appWindow_0.token);
-        this.addEndTransitionTag_cgxjfp$(current, this.transition_8be2vx$, this.layerId_0, this.appWindow_0.token);
+        this.addStartTransitionTag_153xe4$(deviceStateDump, this.transition_8be2vx$, this.layerId_0, this.appWindow_0.token);
+        this.addEndTransitionTag_153xe4$(current, this.transition_8be2vx$, this.layerId_0, this.appWindow_0.token);
         return new AppCloseProcessor$RetrieveClosingAppLayerId(this.$outer, this.tags);
       }}return this;
   };
@@ -173976,7 +174846,7 @@
     this.$outer = $outer;
     TransitionProcessor$BaseState.call(this, this.$outer, tags);
   }
-  AppLaunchProcessor$WaitUntilWindowIsInVisibleActivity.prototype.doProcessState_bop1cf$ = function (previous, current, next) {
+  AppLaunchProcessor$WaitUntilWindowIsInVisibleActivity.prototype.doProcessState_tzuef4$ = function (previous, current, next) {
     if (previous == null)
       return this;
     var prevVisibleWindows = previous.wmState.visibleWindows;
@@ -174022,8 +174892,8 @@
       if (!appLaunchedLayers.isEmpty()) {
         var firstDump = first_0(appLaunchedLayers.entries);
         var layerId_0 = firstDump.key;
-        this.addStartTransitionTag_cgxjfp$(firstDump.value, this.transition_8be2vx$, layerId_0, void 0, void 0, firstDump.value.layerState.timestamp);
-        this.addEndTransitionTag_cgxjfp$(current, this.transition_8be2vx$, layerId_0, void 0, void 0, current.layerState.timestamp);
+        this.addStartTransitionTag_153xe4$(firstDump.value, this.transition_8be2vx$, layerId_0, void 0, void 0, firstDump.value.layerState.timestamp);
+        this.addEndTransitionTag_153xe4$(current, this.transition_8be2vx$, layerId_0, void 0, void 0, current.layerState.timestamp);
         this.$outer.windowsBecomeVisible_0.clear();
       }}
     return this;
@@ -174035,17 +174905,17 @@
     this.logger_8be2vx$ = logger;
     this.transition_8be2vx$ = transition;
   }
-  BaseFsmState.prototype.process_73zvrm$ = function (previous, current, next) {
+  BaseFsmState.prototype.process_6gppa9$ = function (previous, current, next) {
     var tmp$;
     if (next == null) {
       var timestamp = current.layerState.timestamp;
       this.logger_8be2vx$('(' + timestamp.toString() + ') Trace has reached the end');
       if (this.hasOpenTag()) {
         this.logger_8be2vx$('(' + timestamp.toString() + ') Has an open tag, closing it on the last SF state');
-        this.addEndTransitionTag_cgxjfp$(current, this.transition_8be2vx$);
+        this.addEndTransitionTag_153xe4$(current, this.transition_8be2vx$);
       }tmp$ = null;
     } else {
-      tmp$ = this.doProcessState_bop1cf$(previous, current, next);
+      tmp$ = this.doProcessState_tzuef4$(previous, current, next);
     }
     return tmp$;
   };
@@ -174054,7 +174924,7 @@
     FSMState$Companion_getInstance();
     this.tags = tags;
   }
-  FSMState.prototype.addStartTransitionTag_cgxjfp$ = function (state, transition, layerId, windowToken, taskId, timestamp) {
+  FSMState.prototype.addStartTransitionTag_153xe4$ = function (state, transition, layerId, windowToken, taskId, timestamp) {
     if (layerId === void 0)
       layerId = 0;
     if (windowToken === void 0)
@@ -174073,7 +174943,7 @@
       tmp$.put_xwzc9p$(timestamp, value);
     }getValue(this.tags, timestamp).add_11rb$(startTag);
   };
-  FSMState.prototype.addEndTransitionTag_cgxjfp$ = function (state, transition, layerId, windowToken, taskId, timestamp) {
+  FSMState.prototype.addEndTransitionTag_153xe4$ = function (state, transition, layerId, windowToken, taskId, timestamp) {
     if (layerId === void 0)
       layerId = 0;
     if (windowToken === void 0)
@@ -174122,7 +174992,7 @@
     this.newImeVisible_0 = WindowManagerConditionsFactory_getInstance().isImeShown_za3lpa$(0);
     this.prevImeInvisible_0 = this.newImeVisible_0.negate();
   }
-  ImeAppearProcessor$WaitInputMethodVisible.prototype.doProcessState_bop1cf$ = function (previous, current, next) {
+  ImeAppearProcessor$WaitInputMethodVisible.prototype.doProcessState_tzuef4$ = function (previous, current, next) {
     var tmp$;
     if (previous == null)
       return this;
@@ -174149,7 +175019,7 @@
     }
      while (false);
     var inputMethodLayer = first$result;
-    this.addStartTransitionTag_cgxjfp$(current, this.transition_8be2vx$, inputMethodLayer.id);
+    this.addStartTransitionTag_153xe4$(current, this.transition_8be2vx$, inputMethodLayer.id);
     return new ImeAppearProcessor$WaitImeAppearFinished(this.$outer, this.tags, inputMethodLayer.id);
   };
   ImeAppearProcessor$WaitInputMethodVisible.$metadata$ = {kind: Kind_CLASS, simpleName: 'WaitInputMethodVisible', interfaces: [TransitionProcessor$BaseState]};
@@ -174157,14 +175027,14 @@
     this.$outer = $outer;
     TransitionProcessor$BaseState.call(this, this.$outer, tags);
     this.layerId_0 = layerId;
-    this.isImeAppearFinished_0 = new ConditionList(listOf_0([WindowManagerConditionsFactory_getInstance().isLayerVisible_n5t22c$(FlickerComponentName$Companion_getInstance().IME), WindowManagerConditionsFactory_getInstance().isLayerColorAlphaOne_n5t22c$(FlickerComponentName$Companion_getInstance().IME), WindowManagerConditionsFactory_getInstance().isLayerTransformFlagSet_em69mm$(FlickerComponentName$Companion_getInstance().IME, 1), WindowManagerConditionsFactory_getInstance().isLayerTransformFlagSet_em69mm$(FlickerComponentName$Companion_getInstance().IME, 4).negate()]));
+    this.isImeAppearFinished_0 = new ConditionList(listOf([WindowManagerConditionsFactory_getInstance().isLayerVisible_n5t22c$(FlickerComponentName$Companion_getInstance().IME), WindowManagerConditionsFactory_getInstance().isLayerColorAlphaOne_n5t22c$(FlickerComponentName$Companion_getInstance().IME), WindowManagerConditionsFactory_getInstance().isLayerTransformFlagSet_em69mm$(FlickerComponentName$Companion_getInstance().IME, 1), WindowManagerConditionsFactory_getInstance().isLayerTransformFlagSet_em69mm$(FlickerComponentName$Companion_getInstance().IME, 4).negate()]));
   }
-  ImeAppearProcessor$WaitImeAppearFinished.prototype.doProcessState_bop1cf$ = function (previous, current, next) {
+  ImeAppearProcessor$WaitImeAppearFinished.prototype.doProcessState_tzuef4$ = function (previous, current, next) {
     var tmp$;
     var isImeAppearFinished = this.isImeAppearFinished_0.isSatisfied_11rb$(current);
     if (isImeAppearFinished) {
       this.logger_8be2vx$('(' + current.layerState.timestamp.toString() + ') Ime appear end detected.');
-      this.addEndTransitionTag_cgxjfp$(current, this.transition_8be2vx$, this.layerId_0);
+      this.addEndTransitionTag_153xe4$(current, this.transition_8be2vx$, this.layerId_0);
       tmp$ = new ImeAppearProcessor$WaitInputMethodVisible(this.$outer, this.tags);
     } else {
       this.logger_8be2vx$('(' + current.layerState.timestamp.toString() + ") Ime appear hasn't finished.");
@@ -174188,11 +175058,11 @@
     this.$outer = $outer;
     TransitionProcessor$BaseState.call(this, this.$outer, tags);
     this.isImeShown_0 = WindowManagerConditionsFactory_getInstance().isImeShown_za3lpa$(0);
-    this.isImeAppeared_0 = new ConditionList(listOf_0([this.isImeShown_0, WindowManagerConditionsFactory_getInstance().isLayerColorAlphaOne_n5t22c$(FlickerComponentName$Companion_getInstance().IME), WindowManagerConditionsFactory_getInstance().isLayerTransformFlagSet_em69mm$(FlickerComponentName$Companion_getInstance().IME, 1), WindowManagerConditionsFactory_getInstance().isLayerTransformFlagSet_em69mm$(FlickerComponentName$Companion_getInstance().IME, 4).negate()]));
-    this.isImeDisappearByGesture_0 = new ConditionList(listOf_0([this.isImeShown_0, WindowManagerConditionsFactory_getInstance().isLayerColorAlphaOne_n5t22c$(FlickerComponentName$Companion_getInstance().IME).negate()]));
-    this.isImeDisappearByAppClose_0 = new ConditionList(listOf_0([this.isImeShown_0, WindowManagerConditionsFactory_getInstance().isLayerTransformFlagSet_em69mm$(FlickerComponentName$Companion_getInstance().IME, 4)]));
+    this.isImeAppeared_0 = new ConditionList(listOf([this.isImeShown_0, WindowManagerConditionsFactory_getInstance().isLayerColorAlphaOne_n5t22c$(FlickerComponentName$Companion_getInstance().IME), WindowManagerConditionsFactory_getInstance().isLayerTransformFlagSet_em69mm$(FlickerComponentName$Companion_getInstance().IME, 1), WindowManagerConditionsFactory_getInstance().isLayerTransformFlagSet_em69mm$(FlickerComponentName$Companion_getInstance().IME, 4).negate()]));
+    this.isImeDisappearByGesture_0 = new ConditionList(listOf([this.isImeShown_0, WindowManagerConditionsFactory_getInstance().isLayerColorAlphaOne_n5t22c$(FlickerComponentName$Companion_getInstance().IME).negate()]));
+    this.isImeDisappearByAppClose_0 = new ConditionList(listOf([this.isImeShown_0, WindowManagerConditionsFactory_getInstance().isLayerTransformFlagSet_em69mm$(FlickerComponentName$Companion_getInstance().IME, 4)]));
   }
-  ImeDisappearProcessor$WaitImeDisappearStart.prototype.doProcessState_bop1cf$ = function (previous, current, next) {
+  ImeDisappearProcessor$WaitImeDisappearStart.prototype.doProcessState_tzuef4$ = function (previous, current, next) {
     var tmp$;
     if (previous == null)
       return this;
@@ -174220,7 +175090,7 @@
     }
      while (false);
     var inputMethodLayer = first$result;
-    this.addStartTransitionTag_cgxjfp$(current, this.transition_8be2vx$, inputMethodLayer.id);
+    this.addStartTransitionTag_153xe4$(current, this.transition_8be2vx$, inputMethodLayer.id);
     return new ImeDisappearProcessor$WaitImeDisappearFinished(this.$outer, this.tags, inputMethodLayer.id);
   };
   ImeDisappearProcessor$WaitImeDisappearStart.$metadata$ = {kind: Kind_CLASS, simpleName: 'WaitImeDisappearStart', interfaces: [TransitionProcessor$BaseState]};
@@ -174230,11 +175100,11 @@
     this.layerId_0 = layerId;
     this.imeNotShown_0 = WindowManagerConditionsFactory_getInstance().isImeShown_za3lpa$(0).negate();
   }
-  ImeDisappearProcessor$WaitImeDisappearFinished.prototype.doProcessState_bop1cf$ = function (previous, current, next) {
+  ImeDisappearProcessor$WaitImeDisappearFinished.prototype.doProcessState_tzuef4$ = function (previous, current, next) {
     var tmp$;
     if (this.imeNotShown_0.isSatisfied_11rb$(current)) {
       this.logger_8be2vx$('(' + current.layerState.timestamp.toString() + ') IME disappear end detected.');
-      this.addEndTransitionTag_cgxjfp$(current, this.transition_8be2vx$, this.layerId_0);
+      this.addEndTransitionTag_153xe4$(current, this.transition_8be2vx$, this.layerId_0);
       tmp$ = new ImeDisappearProcessor$WaitImeDisappearStart(this.$outer, this.tags);
     } else {
       this.logger_8be2vx$('(' + current.layerState.timestamp.toString() + ') IME disappear not finished.');
@@ -174270,7 +175140,7 @@
     }
     return destination;
   };
-  PipEnterProcessor$WaitPipEnterStart.prototype.doProcessState_bop1cf$ = function (previous, current, next) {
+  PipEnterProcessor$WaitPipEnterStart.prototype.doProcessState_tzuef4$ = function (previous, current, next) {
     var tmp$;
     if (previous == null)
       return this;
@@ -174328,9 +175198,9 @@
     var pipWindow = first_1(current.wmState.pinnedWindows);
     var startTimestamp = this.$outer.allScalingLayers_0.get_11rb$(pipWindow.layerId);
     if (startTimestamp != null) {
-      this.addStartTransitionTag_cgxjfp$(current, this.transition_8be2vx$, pipWindow.layerId, void 0, void 0, startTimestamp);
+      this.addStartTransitionTag_153xe4$(current, this.transition_8be2vx$, pipWindow.layerId, void 0, void 0, startTimestamp);
     } else {
-      this.addStartTransitionTag_cgxjfp$(current, this.transition_8be2vx$, pipWindow.layerId);
+      this.addStartTransitionTag_153xe4$(current, this.transition_8be2vx$, pipWindow.layerId);
     }
     this.$outer.allScalingLayers_0.clear();
     this.logger_8be2vx$('(' + toString(startTimestamp) + ') PIP enter started.');
@@ -174341,13 +175211,13 @@
     this.$outer = $outer;
     TransitionProcessor$BaseState.call(this, this.$outer, tags);
     this.layerId_0 = layerId;
-    this.isPipEnterFinished_0 = new ConditionList(listOf_0([WindowManagerConditionsFactory_getInstance().isAppTransitionIdle_za3lpa$(0), WindowManagerConditionsFactory_getInstance().hasPipWindow(), WindowManagerConditionsFactory_getInstance().isPipWindowLayerSizeMatch_za3lpa$(this.layerId_0)]));
+    this.isPipEnterFinished_0 = new ConditionList(listOf([WindowManagerConditionsFactory_getInstance().isAppTransitionIdle_za3lpa$(0), WindowManagerConditionsFactory_getInstance().hasPipWindow(), WindowManagerConditionsFactory_getInstance().isPipWindowLayerSizeMatch_za3lpa$(this.layerId_0)]));
   }
-  PipEnterProcessor$WaitPipEnterFinished.prototype.doProcessState_bop1cf$ = function (previous, current, next) {
+  PipEnterProcessor$WaitPipEnterFinished.prototype.doProcessState_tzuef4$ = function (previous, current, next) {
     var tmp$;
     if (this.isPipEnterFinished_0.isSatisfied_11rb$(current)) {
       this.logger_8be2vx$('(' + current.wmState.timestamp.toString() + ') PIP enter finished.');
-      this.addEndTransitionTag_cgxjfp$(current, this.transition_8be2vx$, this.layerId_0);
+      this.addEndTransitionTag_153xe4$(current, this.transition_8be2vx$, this.layerId_0);
       tmp$ = new PipEnterProcessor$WaitPipEnterStart(this.$outer, this.tags);
     } else {
       this.logger_8be2vx$('(' + current.wmState.timestamp.toString() + ') PIP enter not finished.');
@@ -174375,7 +175245,7 @@
     this.$outer = $outer;
     TransitionProcessor$BaseState.call(this, this.$outer, tags);
   }
-  PipExitProcessor$WaitPinnedWindowSwipedOrFading.prototype.doProcessState_bop1cf$ = function (previous, current, next) {
+  PipExitProcessor$WaitPinnedWindowSwipedOrFading.prototype.doProcessState_tzuef4$ = function (previous, current, next) {
     var tmp$, tmp$_0;
     if (previous == null)
       return this;
@@ -174387,8 +175257,8 @@
     if (nextPinnedWindow == null) {
       var dump = this.$outer.scalingWindows_0.get_11rb$(currPinnedWindow.token);
       if (dump != null) {
-        this.addStartTransitionTag_cgxjfp$(dump, this.transition_8be2vx$, currPinnedWindow.layerId, currPinnedWindow.token);
-        this.addEndTransitionTag_cgxjfp$(previous, this.transition_8be2vx$, currPinnedWindow.layerId, currPinnedWindow.token);
+        this.addStartTransitionTag_153xe4$(dump, this.transition_8be2vx$, currPinnedWindow.layerId, currPinnedWindow.token);
+        this.addEndTransitionTag_153xe4$(previous, this.transition_8be2vx$, currPinnedWindow.layerId, currPinnedWindow.token);
       }return this;
     }var isScaling = WindowManagerConditionsFactory_getInstance().isLayerTransformFlagSet_vux9f0$(currPinnedWindow.layerId, 4);
     var movingPinnedWindow = isScaling.isSatisfied_11rb$(current) && isScaling.negate().isSatisfied_11rb$(previous);
@@ -174400,7 +175270,7 @@
       $receiver.put_xwzc9p$(key, current);
       tmp$_0 = this;
     } else if (pinnedWindowFading) {
-      this.addStartTransitionTag_cgxjfp$(previous, this.transition_8be2vx$, currPinnedWindow.layerId, currPinnedWindow.token);
+      this.addStartTransitionTag_153xe4$(previous, this.transition_8be2vx$, currPinnedWindow.layerId, currPinnedWindow.token);
       tmp$_0 = new PipExitProcessor$WaitUntilPipColorAlphaIsOneAndInvisible(this.$outer, this.tags, currPinnedWindow.layerId);
     } else {
       tmp$_0 = this;
@@ -174413,13 +175283,13 @@
     TransitionProcessor$BaseState.call(this, this.$outer, tags);
     this.layerId_0 = layerId;
   }
-  PipExitProcessor$WaitUntilPipColorAlphaIsOneAndInvisible.prototype.doProcessState_bop1cf$ = function (previous, current, next) {
+  PipExitProcessor$WaitUntilPipColorAlphaIsOneAndInvisible.prototype.doProcessState_tzuef4$ = function (previous, current, next) {
     var tmp$;
     var layerInvisible = WindowManagerConditionsFactory_getInstance().isLayerVisible_za3lpa$(this.layerId_0).negate().isSatisfied_11rb$(current);
     var layerColorAlphaOne = WindowManagerConditionsFactory_getInstance().isLayerColorAlphaOne_za3lpa$(this.layerId_0).isSatisfied_11rb$(current);
     var isStableState = this.$outer.wmStateIdle_0.isSatisfied_11rb$(current) || this.$outer.wmStateComplete_0.isSatisfied_11rb$(current) || this.$outer.areLayersAnimating_0.negate().isSatisfied_11rb$(current);
     if (layerInvisible && layerColorAlphaOne && isStableState) {
-      this.addEndTransitionTag_cgxjfp$(current, this.transition_8be2vx$, this.layerId_0);
+      this.addEndTransitionTag_153xe4$(current, this.transition_8be2vx$, this.layerId_0);
       tmp$ = new PipExitProcessor$WaitPinnedWindowSwipedOrFading(this.$outer, this.tags);
     } else {
       tmp$ = this;
@@ -174443,7 +175313,7 @@
     this.$outer = $outer;
     TransitionProcessor$BaseState.call(this, this.$outer, tags);
   }
-  PipExpandProcessor$WaitUntilAppIsNoLongerPinned.prototype.doProcessState_bop1cf$ = function (previous, current, next) {
+  PipExpandProcessor$WaitUntilAppIsNoLongerPinned.prototype.doProcessState_tzuef4$ = function (previous, current, next) {
     var tmp$, tmp$_0, tmp$_1;
     var prevPinnedWindows = (tmp$_1 = (tmp$_0 = (tmp$ = previous != null ? previous.wmState : null) != null ? tmp$.pinnedWindows : null) != null ? toList(tmp$_0) : null) != null ? tmp$_1 : emptyList();
     var currPinnedWindows = toList(current.wmState.pinnedWindows);
@@ -174459,7 +175329,7 @@
     this.isScaling_0 = WindowManagerConditionsFactory_getInstance().isLayerTransformFlagSet_vux9f0$(this.layerId_0, 4);
     this.isIdentity_0 = WindowManagerConditionsFactory_getInstance().isLayerTransformIdentity_za3lpa$(this.layerId_0);
   }
-  PipExpandProcessor$WaitUntilAppCompletesExpanding.prototype.doProcessState_bop1cf$ = function (previous, current, next) {
+  PipExpandProcessor$WaitUntilAppCompletesExpanding.prototype.doProcessState_tzuef4$ = function (previous, current, next) {
     var tmp$, tmp$_0, tmp$_1, tmp$_2;
     if (previous == null)
       return this;
@@ -174482,8 +175352,8 @@
     } else if (finishedExpanding) {
       var dump = this.$outer.scalingLayers_0.get_11rb$(this.layerId_0);
       if (dump != null) {
-        this.addStartTransitionTag_cgxjfp$(current, this.transition_8be2vx$, this.layerId_0, void 0, void 0, dump.layerState.timestamp);
-        this.addEndTransitionTag_cgxjfp$(current, this.transition_8be2vx$, this.layerId_0, void 0, void 0, current.layerState.timestamp);
+        this.addStartTransitionTag_153xe4$(current, this.transition_8be2vx$, this.layerId_0, void 0, void 0, dump.layerState.timestamp);
+        this.addEndTransitionTag_153xe4$(current, this.transition_8be2vx$, this.layerId_0, void 0, void 0, current.layerState.timestamp);
         this.$outer.scalingLayers_0.clear();
         return new PipExpandProcessor$WaitUntilAppIsNoLongerPinned(this.$outer, this.tags);
       }}return this;
@@ -174505,7 +175375,7 @@
     this.$outer = $outer;
     TransitionProcessor$BaseState.call(this, this.$outer, tags);
   }
-  PipResizeProcessor$WaitUntilAppStopsAnimatingYetStillPinned.prototype.doProcessState_bop1cf$ = function (previous, current, next) {
+  PipResizeProcessor$WaitUntilAppStopsAnimatingYetStillPinned.prototype.doProcessState_tzuef4$ = function (previous, current, next) {
     var tmp$, tmp$_0, tmp$_1, tmp$_2, tmp$_3;
     tmp$ = firstOrNull(current.wmState.pinnedWindows);
     if (tmp$ == null) {
@@ -174525,8 +175395,8 @@
     if (finishedResizing) {
       var lastScaledDump = this.$outer.scalingWindows_0.get_11rb$(currPinnedWindow.token);
       if (lastScaledDump != null) {
-        this.addStartTransitionTag_cgxjfp$(lastScaledDump, this.transition_8be2vx$, currPinnedWindow.layerId, currPinnedWindow.token, void 0, lastScaledDump.layerState.timestamp);
-        this.addEndTransitionTag_cgxjfp$(lastScaledDump, this.transition_8be2vx$, currPinnedWindow.layerId, currPinnedWindow.token, void 0, current.layerState.timestamp);
+        this.addStartTransitionTag_153xe4$(lastScaledDump, this.transition_8be2vx$, currPinnedWindow.layerId, currPinnedWindow.token, void 0, lastScaledDump.layerState.timestamp);
+        this.addEndTransitionTag_153xe4$(lastScaledDump, this.transition_8be2vx$, currPinnedWindow.layerId, currPinnedWindow.token, void 0, current.layerState.timestamp);
         this.$outer.scalingWindows_0.remove_11rb$(currPinnedWindow.token);
       }}return this;
   };
@@ -174556,7 +175426,7 @@
     this.$outer = $outer;
     TransitionProcessor$BaseState.call(this, this.$outer, tags);
   }
-  RotationProcessor$InitialState.prototype.doProcessState_bop1cf$ = function (previous, current, next) {
+  RotationProcessor$InitialState.prototype.doProcessState_tzuef4$ = function (previous, current, next) {
     var currDisplayRect = RotationProcessor$Companion_getInstance().displaySize_0(current.wmState);
     this.logger_8be2vx$('(' + current.wmState.timestamp.toString() + ') Initial state. ' + ('Display size ' + currDisplayRect));
     return new RotationProcessor$WaitDisplayRectChange(this.$outer, this.tags, currDisplayRect);
@@ -174567,7 +175437,7 @@
     TransitionProcessor$BaseState.call(this, this.$outer, tags);
     this.currDisplayRect_0 = currDisplayRect;
   }
-  RotationProcessor$WaitDisplayRectChange.prototype.doProcessState_bop1cf$ = function (previous, current, next) {
+  RotationProcessor$WaitDisplayRectChange.prototype.doProcessState_tzuef4$ = function (previous, current, next) {
     var tmp$, tmp$_0;
     var newWmDisplayRect = RotationProcessor$Companion_getInstance().displaySize_0(current.wmState);
     var newLayersDisplayRect = RotationProcessor$Companion_getInstance().screenBounds_0(current.layerState);
@@ -174591,7 +175461,7 @@
   RotationProcessor$WaitDisplayRectChange.prototype.processDisplaySizeChange_0 = function (previous, newDisplayRect) {
     this.logger_8be2vx$('(' + previous.wmState.timestamp.toString() + ') Display size changed ' + ('to ' + newDisplayRect));
     this.logger_8be2vx$('(' + previous.wmState.timestamp.toString() + ') Tagging transition start');
-    this.addStartTransitionTag_cgxjfp$(previous, this.transition_8be2vx$);
+    this.addStartTransitionTag_153xe4$(previous, this.transition_8be2vx$);
     return new RotationProcessor$WaitRotationFinished(this.$outer, this.tags);
   };
   RotationProcessor$WaitDisplayRectChange.$metadata$ = {kind: Kind_CLASS, simpleName: 'WaitDisplayRectChange', interfaces: [TransitionProcessor$BaseState]};
@@ -174604,7 +175474,7 @@
     this.wmStateIdle_0 = WindowManagerConditionsFactory_getInstance().isAppTransitionIdle_za3lpa$(0);
     this.wmStateComplete_0 = WindowManagerConditionsFactory_getInstance().isWMStateComplete();
   }
-  RotationProcessor$WaitRotationFinished.prototype.doProcessState_bop1cf$ = function (previous, current, next) {
+  RotationProcessor$WaitRotationFinished.prototype.doProcessState_tzuef4$ = function (previous, current, next) {
     var tmp$;
     var anyLayerAnimating = this.areLayersAnimating_0.isSatisfied_11rb$(current);
     var rotationLayerExists = this.rotationLayerExists_0.isSatisfied_11rb$(current);
@@ -174620,7 +175490,7 @@
       tmp$ = this;
     } else {
       this.logger_8be2vx$('(' + current.layerState.timestamp.toString() + ') Tagging transition end');
-      this.addEndTransitionTag_cgxjfp$(current, this.transition_8be2vx$);
+      this.addEndTransitionTag_153xe4$(current, this.transition_8be2vx$);
       var lastDisplayRect = RotationProcessor$Companion_getInstance().displaySize_0(current.wmState);
       tmp$ = new RotationProcessor$WaitDisplayRectChange(this.$outer, this.tags, lastDisplayRect);
     }
@@ -174721,7 +175591,7 @@
       if (current == null) {
         var message = "Current state shouldn't be null";
         throw IllegalArgumentException_init(message.toString());
-      }var newPosition = currPosition.process_73zvrm$(previous, current, next);
+      }var newPosition = currPosition.process_6gppa9$(previous, current, next);
       currPosition = newPosition;
     }
     return this.buildTagTrace_yi9zhu$_0(tags);
@@ -175273,24 +176143,27 @@
     }
     return copyToArray(destination_0);
   }});
-  Object.defineProperty(WindowManagerState.prototype, 'topVisibleAppWindow', {configurable: true, get: function () {
-    var tmp$;
+  Object.defineProperty(WindowManagerState.prototype, 'visibleAppWindows', {configurable: true, get: function () {
     var $receiver = this.visibleWindows;
     var destination = ArrayList_init();
-    var tmp$_0;
-    for (tmp$_0 = 0; tmp$_0 !== $receiver.length; ++tmp$_0) {
-      var element = $receiver[tmp$_0];
+    var tmp$;
+    for (tmp$ = 0; tmp$ !== $receiver.length; ++tmp$) {
+      var element = $receiver[tmp$];
       if (element.isAppWindow)
         destination.add_11rb$(element);
     }
-    var destination_0 = ArrayList_init_0(collectionSizeOrDefault(destination, 10));
-    var tmp$_1;
-    tmp$_1 = destination.iterator();
-    while (tmp$_1.hasNext()) {
-      var item = tmp$_1.next();
-      destination_0.add_11rb$(item.title);
+    return copyToArray(destination);
+  }});
+  Object.defineProperty(WindowManagerState.prototype, 'topVisibleAppWindow', {configurable: true, get: function () {
+    var tmp$;
+    var $receiver = this.visibleAppWindows;
+    var destination = ArrayList_init_0($receiver.length);
+    var tmp$_0;
+    for (tmp$_0 = 0; tmp$_0 !== $receiver.length; ++tmp$_0) {
+      var item = $receiver[tmp$_0];
+      destination.add_11rb$(item.title);
     }
-    return (tmp$ = firstOrNull_0(destination_0)) != null ? tmp$ : '';
+    return (tmp$ = firstOrNull_0(destination)) != null ? tmp$ : '';
   }});
   Object.defineProperty(WindowManagerState.prototype, 'pinnedWindows', {configurable: true, get: function () {
     var $receiver = this.visibleWindows;
@@ -175711,11 +176584,11 @@
       tmp$ = this.windowStates.length === 0;
     }var tmp$_0 = tmp$;
     if (!tmp$_0) {
-      tmp$_0 = (this.focusedApp.length === 0 && this.homeActivity == null);
-    }var tmp$_1 = tmp$_0;
-    if (!tmp$_1) {
-      tmp$_1 = this.focusedWindow.length === 0;
-    }var tmp$_2 = tmp$_1;
+      var tmp$_1 = this.focusedApp.length === 0;
+      if (!tmp$_1) {
+        tmp$_1 = this.focusedWindow.length === 0;
+      }tmp$_0 = (tmp$_1 && this.homeActivity == null);
+    }var tmp$_2 = tmp$_0;
     if (!tmp$_2) {
       var tmp$_3 = this.focusedActivity.length === 0;
       if (!tmp$_3) {
@@ -176829,7 +177702,7 @@
   WindowContainer.prototype.toString = function () {
     var tmp$ = this.title.length === 0;
     if (!tmp$) {
-      var $receiver = listOf_0(['WindowContainer', 'Task']);
+      var $receiver = listOf(['WindowContainer', 'Task']);
       var any$result;
       any$break: do {
         var tmp$_0;
@@ -177481,6 +178354,7 @@
   Object.defineProperty(Color3, 'Companion', {get: Color3$Companion_getInstance});
   package$common.Color3 = Color3;
   package$common.Condition = Condition;
+  package$common.ConditionList_init_v59lim$ = ConditionList_init;
   package$common.ConditionList = ConditionList;
   package$common.DeviceStateDump = DeviceStateDump;
   package$common.DeviceTraceDump = DeviceTraceDump;
@@ -177510,13 +178384,14 @@
   package$errors.Error = Error_0;
   package$errors.ErrorState = ErrorState;
   package$errors.ErrorTrace = ErrorTrace;
-  Object.defineProperty(Display, 'Companion', {get: Display$Companion_getInstance});
   var package$layers = package$common.layers || (package$common.layers = {});
+  package$layers.BaseLayerTraceEntry = BaseLayerTraceEntry;
+  Object.defineProperty(Display, 'Companion', {get: Display$Companion_getInstance});
   package$layers.Display = Display;
   package$layers.Layer = Layer;
   package$layers.LayerTraceEntry = LayerTraceEntry;
   package$layers.LayerTraceEntryBuilder = LayerTraceEntryBuilder;
-  package$layers.LayersTrace_init_zbopxu$ = LayersTrace_init;
+  package$layers.LayersTrace_init_3ma5jx$ = LayersTrace_init;
   package$layers.LayersTrace = LayersTrace;
   Object.defineProperty(Transform, 'Companion', {get: Transform$Companion_getInstance});
   package$layers.Transform = Transform;
@@ -177636,6 +178511,17 @@
 
 /***/ }),
 
+/***/ "u4Gs":
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+/* harmony import */ var _node_modules_vue_style_loader_index_js_node_modules_css_loader_dist_cjs_js_ref_3_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_vue_loader_lib_index_js_vue_loader_options_DataAdb_vue_vue_type_style_index_0_id_62a1321f_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("aaYB");
+/* harmony import */ var _node_modules_vue_style_loader_index_js_node_modules_css_loader_dist_cjs_js_ref_3_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_vue_loader_lib_index_js_vue_loader_options_DataAdb_vue_vue_type_style_index_0_id_62a1321f_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_vue_style_loader_index_js_node_modules_css_loader_dist_cjs_js_ref_3_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_vue_loader_lib_index_js_vue_loader_options_DataAdb_vue_vue_type_style_index_0_id_62a1321f_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__);
+/* unused harmony reexport * */
+
+
+/***/ }),
+
 /***/ "ua+W":
 /***/ (function(module, __webpack_exports__, __webpack_require__) {
 
