diff --git a/DEPS b/DEPS
index 6fd39a7..9f863d0 100644
--- a/DEPS
+++ b/DEPS
@@ -149,7 +149,7 @@
   "source_span_rev": "49ff31eabebed0da0ae6634124f8ba5c6fbf57f1",
   "sse_tag": "9a486d058a17e880afa9cc1c3c0dd8bad726bcbc",
   "stack_trace_tag": "6788afc61875079b71b3d1c3e65aeaa6a25cbc2f",
-  "stagehand_tag": "v3.3.11",
+  "stagehand_rev": "e64ac90cac508981011299c4ceb819149e71f1bd",
   "stream_channel_tag": "d7251e61253ec389ee6e045ee1042311bced8f1d",
   "string_scanner_rev": "1b63e6e5db5933d7be0a45da6e1129fe00262734",
   "sync_http_rev": "a85d7ec764ea485cbbc49f3f3e7f1b43f87a1c74",
@@ -421,7 +421,7 @@
   Var("dart_root") + "/third_party/pkg/stack_trace":
       Var("dart_git") + "stack_trace.git" + "@" + Var("stack_trace_tag"),
   Var("dart_root") + "/third_party/pkg/stagehand":
-      Var("dart_git") + "stagehand.git" + "@" + Var("stagehand_tag"),
+      Var("dart_git") + "stagehand.git" + "@" + Var("stagehand_rev"),
   Var("dart_root") + "/third_party/pkg/stream_channel":
       Var("dart_git") + "stream_channel.git" +
       "@" + Var("stream_channel_tag"),
diff --git a/pkg/analysis_server/lib/src/lsp/semantic_tokens/encoder.dart b/pkg/analysis_server/lib/src/lsp/semantic_tokens/encoder.dart
index b3e34c0..735aa27 100644
--- a/pkg/analysis_server/lib/src/lsp/semantic_tokens/encoder.dart
+++ b/pkg/analysis_server/lib/src/lsp/semantic_tokens/encoder.dart
@@ -95,6 +95,39 @@
     return SemanticTokens(data: encodedTokens);
   }
 
+  /// Sorted for highlight regions that ensures tokens are sorted in offset order
+  /// then longest first, then by priority, and finally by name. This ensures
+  /// the order is always stable.
+  int _regionOffsetLengthPrioritySorter(
+      HighlightRegion r1, HighlightRegion r2) {
+    const priorities = {
+      // Ensure boolean comes above keyword.
+      HighlightRegionType.LITERAL_BOOLEAN: 1,
+    };
+
+    // First sort by offset.
+    if (r1.offset != r2.offset) {
+      return r1.offset.compareTo(r2.offset);
+    }
+
+    // Then length (so longest are first).
+    if (r1.length != r2.length) {
+      return -r1.length.compareTo(r2.length);
+    }
+
+    // Next sort by priority (if different).
+    final priority1 = priorities[r1.type] ?? 0;
+    final priority2 = priorities[r2.type] ?? 0;
+    if (priority1 != priority2) {
+      return priority1.compareTo(priority2);
+    }
+
+    // If the tokens had the same offset and length, sort by name. This
+    // is completely arbitrary but it's only important that it is consistent
+    // between regions and the sort is stable.
+    return r1.type.name.compareTo(r2.type.name);
+  }
+
   /// Splits multiline regions into multiple regions for clients that do not support
   /// multiline tokens.
   Iterable<HighlightRegion> _splitMultilineRegions(
@@ -143,12 +176,10 @@
       return;
     }
 
-    // When tokens have the same offset, the longest should come first so
-    // the nested token "overwrites" it during the flattening.
+    // Sort tokens so by offset, shortest length, priority then name to ensure
+    // tne sort is always stable.
     final sortedRegions = regions.toList()
-      ..sort((r1, r2) => r1.offset != r2.offset
-          ? r1.offset.compareTo(r2.offset)
-          : -r1.length.compareTo(r2.length));
+      ..sort(_regionOffsetLengthPrioritySorter);
 
     final firstRegion = sortedRegions.first;
     final stack = ListQueue<HighlightRegion>()..add(firstRegion);
@@ -194,7 +225,8 @@
   SemanticTokenInfo(
       this.line, this.column, this.length, this.type, this.modifiers);
 
-  static int offsetSort(t1, t2) => t1.line == t2.line
-      ? t1.column.compareTo(t2.column)
-      : t1.line.compareTo(t2.line);
+  static int offsetSort(SemanticTokenInfo t1, SemanticTokenInfo t2) =>
+      t1.line == t2.line
+          ? t1.column.compareTo(t2.column)
+          : t1.line.compareTo(t2.line);
 }
diff --git a/pkg/analysis_server/test/lsp/semantic_tokens_test.dart b/pkg/analysis_server/test/lsp/semantic_tokens_test.dart
index 04c0427..a8a7a157 100644
--- a/pkg/analysis_server/test/lsp/semantic_tokens_test.dart
+++ b/pkg/analysis_server/test/lsp/semantic_tokens_test.dart
@@ -429,6 +429,61 @@
     expect(decoded, equals(expected));
   }
 
+  Future<void> test_manyBools_bug() async {
+    // Similar to test_manyImports_sortBug, this code triggered inconsistent tokens
+    // for "false" because tokens were sorted incorrectly (because both boolean and
+    // keyword had the same offset and length, which is all that were sorted by).
+    final content = '''
+class MyTestClass {
+  /// test
+  /// test
+  bool test1 = false;
+
+  /// test
+  /// test
+  bool test2 = false;
+
+  /// test
+  /// test
+  bool test3 = false;
+
+  /// test
+  /// test
+  bool test4 = false;
+
+  /// test
+  /// test
+  bool test5 = false;
+
+  /// test
+  /// test
+  bool test6 = false;
+}
+    ''';
+
+    final expected = [
+      _Token('class', SemanticTokenTypes.keyword),
+      _Token('MyTestClass', SemanticTokenTypes.class_),
+      for (var i = 1; i <= 6; i++) ...[
+        _Token('/// test', SemanticTokenTypes.comment,
+            [SemanticTokenModifiers.documentation]),
+        _Token('/// test', SemanticTokenTypes.comment,
+            [SemanticTokenModifiers.documentation]),
+        _Token('bool', SemanticTokenTypes.class_),
+        _Token('test$i', SemanticTokenTypes.variable,
+            [SemanticTokenModifiers.declaration]),
+        _Token('false', CustomSemanticTokenTypes.boolean),
+      ],
+    ];
+
+    await initialize();
+    await openFile(mainFileUri, withoutMarkers(content));
+
+    final tokens = await getSemanticTokens(mainFileUri);
+    final decoded = decodeSemanticTokens(content, tokens);
+    expect(decoded, equals(expected));
+  }
+
   Future<void> test_manyImports_sortBug() async {
     // This test is for a bug where some "import" tokens would not be highlighted
     // correctly. Imports are made up of a DIRECTIVE token that spans a
diff --git a/pkg/compiler/lib/src/common/codegen.dart b/pkg/compiler/lib/src/common/codegen.dart
index 33de3f1..d5a70ba 100644
--- a/pkg/compiler/lib/src/common/codegen.dart
+++ b/pkg/compiler/lib/src/common/codegen.dart
@@ -489,8 +489,13 @@
   final Iterable<ModularName> modularNames;
   final Iterable<ModularExpression> modularExpressions;
 
-  CodegenResult(
-      this.code, this.impact, this.modularNames, this.modularExpressions);
+  CodegenResult(this.code, this.impact, List<ModularName> modularNames,
+      List<ModularExpression> modularExpressions)
+      : this.modularNames =
+            modularNames.isEmpty ? const [] : List.unmodifiable(modularNames),
+        this.modularExpressions = modularExpressions.isEmpty
+            ? const []
+            : List.unmodifiable(modularExpressions);
 
   /// Reads a [CodegenResult] object from [source].
   ///
@@ -505,7 +510,7 @@
     js.Fun code = source.readJsNodeOrNull();
     CodegenImpact impact = CodegenImpact.readFromDataSource(source);
     source.end(tag);
-    return new CodegenResult(code, impact, modularNames, modularExpressions);
+    return CodegenResult(code, impact, modularNames, modularExpressions);
   }
 
   /// Writes the [CodegenResult] object to [sink].
diff --git a/pkg/dds/test/web/sse_smoke_driver.dart.js b/pkg/dds/test/web/sse_smoke_driver.dart.js
index bab6993..ce5b212 100644
--- a/pkg/dds/test/web/sse_smoke_driver.dart.js
+++ b/pkg/dds/test/web/sse_smoke_driver.dart.js
@@ -1,4 +1,4 @@
-// Generated by dart2js (fast startup emitter, strong), the Dart to JavaScript compiler version: 2.9.0-edge.9d8087a399ebe62f6a93f21ec20f56d39dbcf1a2.
+// Generated by dart2js (fast startup emitter, strong), the Dart to JavaScript compiler version: 2.12.0-edge.6acb187d4a433b1a3c117ecbf85d281defdf8a82.
 // The code supports the following hooks:
 // dartPrint(message):
 //    if this function is defined it is called instead of the Dart [print]
@@ -84,7 +84,7 @@
     copyProperties(mixin.prototype, cls.prototype);
     cls.prototype.constructor = cls;
   }
-  function lazy(holder, name, getterName, initializer) {
+  function lazyOld(holder, name, getterName, initializer) {
     var uninitializedSentinel = holder;
     holder[name] = uninitializedSentinel;
     holder[getterName] = function() {
@@ -109,6 +109,34 @@
       return result;
     };
   }
+  function lazy(holder, name, getterName, initializer) {
+    var uninitializedSentinel = holder;
+    holder[name] = uninitializedSentinel;
+    holder[getterName] = function() {
+      if (holder[name] === uninitializedSentinel)
+        holder[name] = initializer();
+      holder[getterName] = function() {
+        return this[name];
+      };
+      return holder[name];
+    };
+  }
+  function lazyFinal(holder, name, getterName, initializer) {
+    var uninitializedSentinel = holder;
+    holder[name] = uninitializedSentinel;
+    holder[getterName] = function() {
+      if (holder[name] === uninitializedSentinel) {
+        var value = initializer();
+        if (holder[name] !== uninitializedSentinel)
+          H.throwLateInitializationError(name);
+        holder[name] = value;
+      }
+      holder[getterName] = function() {
+        return this[name];
+      };
+      return holder[name];
+    };
+  }
   function makeConstList(list) {
     list.immutable$list = Array;
     list.fixed$length = Array;
@@ -203,7 +231,7 @@
           return installStaticTearOff(container, getterName, requiredParameterCount, optionalParameterDefaultValues, callNames, [name], funType, applyIndex);
         };
       };
-    return {inherit: inherit, inheritMany: inheritMany, mixin: mixin, installStaticTearOff: installStaticTearOff, installInstanceTearOff: installInstanceTearOff, _instance_0u: mkInstance(0, 0, null, ["call$0"], 0), _instance_1u: mkInstance(0, 1, null, ["call$1"], 0), _instance_2u: mkInstance(0, 2, null, ["call$2"], 0), _instance_0i: mkInstance(1, 0, null, ["call$0"], 0), _instance_1i: mkInstance(1, 1, null, ["call$1"], 0), _instance_2i: mkInstance(1, 2, null, ["call$2"], 0), _static_0: mkStatic(0, null, ["call$0"], 0), _static_1: mkStatic(1, null, ["call$1"], 0), _static_2: mkStatic(2, null, ["call$2"], 0), makeConstList: makeConstList, lazy: lazy, updateHolder: updateHolder, convertToFastObject: convertToFastObject, setFunctionNamesIfNecessary: setFunctionNamesIfNecessary, updateTypes: updateTypes, setOrUpdateInterceptorsByTag: setOrUpdateInterceptorsByTag, setOrUpdateLeafTags: setOrUpdateLeafTags};
+    return {inherit: inherit, inheritMany: inheritMany, mixin: mixin, installStaticTearOff: installStaticTearOff, installInstanceTearOff: installInstanceTearOff, _instance_0u: mkInstance(0, 0, null, ["call$0"], 0), _instance_1u: mkInstance(0, 1, null, ["call$1"], 0), _instance_2u: mkInstance(0, 2, null, ["call$2"], 0), _instance_0i: mkInstance(1, 0, null, ["call$0"], 0), _instance_1i: mkInstance(1, 1, null, ["call$1"], 0), _instance_2i: mkInstance(1, 2, null, ["call$2"], 0), _static_0: mkStatic(0, null, ["call$0"], 0), _static_1: mkStatic(1, null, ["call$1"], 0), _static_2: mkStatic(2, null, ["call$2"], 0), makeConstList: makeConstList, lazy: lazy, lazyFinal: lazyFinal, lazyOld: lazyOld, updateHolder: updateHolder, convertToFastObject: convertToFastObject, setFunctionNamesIfNecessary: setFunctionNamesIfNecessary, updateTypes: updateTypes, setOrUpdateInterceptorsByTag: setOrUpdateInterceptorsByTag, setOrUpdateLeafTags: setOrUpdateLeafTags};
   }();
   function initializeDeferredHunk(hunk) {
     typesOffset = init.types.length;
@@ -220,6 +248,14 @@
   var C = {},
   H = {JS_CONST: function JS_CONST() {
     },
+    ReachabilityError$: function(_message) {
+      return new H.ReachabilityError(_message);
+    },
+    checkNotNullable: function(value, $name, $T) {
+      if (value == null)
+        throw H.wrapException(new H.NotNullableError($name, $T._eval$1("NotNullableError<0>")));
+      return value;
+    },
     MappedIterable_MappedIterable: function(iterable, $function, $S, $T) {
       if (type$.EfficientLengthIterable_dynamic._is(iterable))
         return new H.EfficientLengthMappedIterable(iterable, $function, $S._eval$1("@<0>")._bind$1($T)._eval$1("EfficientLengthMappedIterable<1,2>"));
@@ -231,6 +267,18 @@
     IterableElementError_tooFew: function() {
       return new P.StateError("Too few elements");
     },
+    LateError: function LateError(t0) {
+      this._message = t0;
+    },
+    ReachabilityError: function ReachabilityError(t0) {
+      this._message = t0;
+    },
+    nullFuture_closure: function nullFuture_closure() {
+    },
+    NotNullableError: function NotNullableError(t0, t1) {
+      this.__internal$_name = t0;
+      this.$ti = t1;
+    },
     EfficientLengthIterable: function EfficientLengthIterable() {
     },
     ListIterable: function ListIterable() {
@@ -331,8 +379,7 @@
       return null;
     },
     Primitives_objectTypeName: function(object) {
-      var t1 = H.Primitives__objectTypeNameNewRti(object);
-      return t1;
+      return H.Primitives__objectTypeNameNewRti(object);
     },
     Primitives__objectTypeNameNewRti: function(object) {
       var dispatchName, $constructor, constructorName;
@@ -355,48 +402,6 @@
       var t1 = $name !== "Object" && $name !== "";
       return t1;
     },
-    Primitives__fromCharCodeApply: function(array) {
-      var result, i, i0, chunkEnd,
-        end = array.length;
-      if (end <= 500)
-        return String.fromCharCode.apply(null, array);
-      for (result = "", i = 0; i < end; i = i0) {
-        i0 = i + 500;
-        chunkEnd = i0 < end ? i0 : end;
-        result += String.fromCharCode.apply(null, array.slice(i, chunkEnd));
-      }
-      return result;
-    },
-    Primitives_stringFromCodePoints: function(codePoints) {
-      var t1, _i, i,
-        a = H.setRuntimeTypeInfo([], type$.JSArray_int);
-      for (t1 = codePoints.length, _i = 0; _i < codePoints.length; codePoints.length === t1 || (0, H.throwConcurrentModificationError)(codePoints), ++_i) {
-        i = codePoints[_i];
-        if (!H._isInt(i))
-          throw H.wrapException(H.argumentErrorValue(i));
-        if (i <= 65535)
-          C.JSArray_methods.add$1(a, i);
-        else if (i <= 1114111) {
-          C.JSArray_methods.add$1(a, 55296 + (C.JSInt_methods._shrOtherPositive$1(i - 65536, 10) & 1023));
-          C.JSArray_methods.add$1(a, 56320 + (i & 1023));
-        } else
-          throw H.wrapException(H.argumentErrorValue(i));
-      }
-      return H.Primitives__fromCharCodeApply(a);
-    },
-    Primitives_stringFromCharCodes: function(charCodes) {
-      var t1, _i, i;
-      for (t1 = charCodes.length, _i = 0; _i < t1; ++_i) {
-        i = charCodes[_i];
-        if (!H._isInt(i))
-          throw H.wrapException(H.argumentErrorValue(i));
-        if (i < 0)
-          throw H.wrapException(H.argumentErrorValue(i));
-        if (i > 65535)
-          return H.Primitives_stringFromCodePoints(charCodes);
-      }
-      return H.Primitives__fromCharCodeApply(charCodes);
-    },
     Primitives_stringFromNativeUint8List: function(charCodes, start, end) {
       var i, result, i0, chunkEnd;
       if (end <= 500 && start === 0 && end === charCodes.length)
@@ -414,7 +419,7 @@
         return String.fromCharCode(charCode);
       if (charCode <= 1114111) {
         bits = charCode - 65536;
-        return String.fromCharCode((55296 | C.JSInt_methods._shrOtherPositive$1(bits, 10)) >>> 0, 56320 | bits & 1023);
+        return String.fromCharCode((C.JSInt_methods._shrOtherPositive$1(bits, 10) | 55296) >>> 0, bits & 1023 | 56320);
       }
       throw H.wrapException(P.RangeError$range(charCode, 0, 1114111, null, null));
     },
@@ -493,7 +498,7 @@
     Primitives__genericApplyFunction2: function($function, positionalArguments, namedArguments) {
       var $arguments, argumentCount, requiredParameterCount, defaultValuesClosure, t1, defaultValues, interceptor, jsFunction, keys, _i, defaultValue, used, key;
       if (positionalArguments != null)
-        $arguments = positionalArguments instanceof Array ? positionalArguments : P.List_List$from(positionalArguments, true, type$.dynamic);
+        $arguments = positionalArguments instanceof Array ? positionalArguments : P.List_List$from(positionalArguments, type$.dynamic);
       else
         $arguments = [];
       argumentCount = $arguments.length;
@@ -803,7 +808,7 @@
       return $function;
     },
     Closure_fromTearOff: function(receiver, functions, applyTrampolineIndex, reflectionInfo, isStatic, isIntercepted, propertyName) {
-      var $constructor, t1, trampoline, signatureFunction, applyTrampoline, i, stub, stubCallName,
+      var $constructor, t1, trampoline, applyTrampoline, i, stub, stubCallName,
         $function = functions[0],
         callName = $function.$callName,
         $prototype = isStatic ? Object.create(new H.StaticClosure().constructor.prototype) : Object.create(new H.BoundClosure(null, null, null, "").constructor.prototype);
@@ -829,8 +834,7 @@
         $prototype.$static_name = propertyName;
         trampoline = $function;
       }
-      signatureFunction = H.Closure__computeSignatureFunctionNewRti(reflectionInfo, isStatic, isIntercepted);
-      $prototype.$signature = signatureFunction;
+      $prototype.$signature = H.Closure__computeSignatureFunctionNewRti(reflectionInfo, isStatic, isIntercepted);
       $prototype[callName] = trampoline;
       for (applyTrampoline = trampoline, i = 1; i < functions.length; ++i) {
         stub = functions[i];
@@ -948,7 +952,7 @@
         getReceiver = H.BoundClosure_receiverOf;
       switch (isSuperCall ? -1 : arity) {
         case 0:
-          throw H.wrapException(H.RuntimeError$("Intercepted function with no arguments."));
+          throw H.wrapException(new H.RuntimeError("Intercepted function with no arguments."));
         case 1:
           return function(n, s, r) {
             return function() {
@@ -1046,7 +1050,7 @@
     BoundClosure_computeFieldNamed: function(fieldName) {
       var t1, i, $name,
         template = new H.BoundClosure("self", "target", "receiver", "name"),
-        names = J.JSArray_markFixedList(Object.getOwnPropertyNames(template), type$.dynamic);
+        names = J.JSArray_markFixedList(Object.getOwnPropertyNames(template), type$.nullable_Object);
       for (t1 = names.length, i = 0; i < t1; ++i) {
         $name = names[i];
         if (template[$name] === fieldName)
@@ -1065,42 +1069,11 @@
     throwCyclicInit: function(staticName) {
       throw H.wrapException(new P.CyclicInitializationError(staticName));
     },
-    RuntimeError$: function(message) {
-      return new H.RuntimeError(message);
-    },
     getIsolateAffinityTag: function($name) {
       return init.getIsolateTag($name);
     },
-    setRuntimeTypeInfo: function(target, rti) {
-      target[init.arrayRti] = rti;
-      return target;
-    },
-    getRuntimeTypeInfo: function(target) {
-      if (target == null)
-        return null;
-      return target.$ti;
-    },
-    getRuntimeTypeArguments: function(interceptor, object, substitutionName) {
-      return H.substitute(interceptor["$as" + H.S(substitutionName)], H.getRuntimeTypeInfo(object));
-    },
-    getRuntimeType: function(object) {
-      var rti = object instanceof H.Closure ? H.closureFunctionType(object) : null;
-      return H.createRuntimeType(rti == null ? H.instanceType(object) : rti);
-    },
-    substitute: function(substitution, $arguments) {
-      if (substitution == null)
-        return $arguments;
-      substitution = substitution.apply(null, $arguments);
-      if (substitution == null)
-        return null;
-      if (Array.isArray(substitution))
-        return substitution;
-      if (typeof substitution == "function")
-        return substitution.apply(null, $arguments);
-      return $arguments;
-    },
-    computeSignature: function(signature, context, contextName) {
-      return signature.apply(context, H.getRuntimeTypeArguments(J.getInterceptor$(context), context, contextName));
+    throwLateInitializationError: function($name) {
+      return H.throwExpression(new H.LateError($name));
     },
     defineProperty: function(obj, property, value) {
       Object.defineProperty(obj, property, {value: value, enumerable: false, writable: true, configurable: true});
@@ -1293,16 +1266,16 @@
       _._receiver = t5;
     },
     NullError: function NullError(t0, t1) {
-      this._message = t0;
+      this.__js_helper$_message = t0;
       this._method = t1;
     },
     JsNoSuchMethodError: function JsNoSuchMethodError(t0, t1, t2) {
-      this._message = t0;
+      this.__js_helper$_message = t0;
       this._method = t1;
       this._receiver = t2;
     },
     UnknownJsTypeError: function UnknownJsTypeError(t0) {
-      this._message = t0;
+      this.__js_helper$_message = t0;
     },
     NullThrownFromJavaScriptException: function NullThrownFromJavaScriptException(t0) {
       this._irritant = t0;
@@ -1567,6 +1540,10 @@
       result._named = substitutedNamed;
       return result;
     },
+    setRuntimeTypeInfo: function(target, rti) {
+      target[init.arrayRti] = rti;
+      return target;
+    },
     closureFunctionType: function(closure) {
       var signature = closure.$signature;
       if (signature != null) {
@@ -1634,6 +1611,10 @@
       }
       return type;
     },
+    getRuntimeType: function(object) {
+      var rti = object instanceof H.Closure ? H.closureFunctionType(object) : null;
+      return H.createRuntimeType(rti == null ? H.instanceType(object) : rti);
+    },
     createRuntimeType: function(rti) {
       var recipe, starErasedRecipe, starErasedRti,
         type = rti._cachedRuntimeType;
@@ -1709,16 +1690,22 @@
       return testRti._as(object);
     },
     _nullIs: function(testRti) {
-      var t2,
-        t1 = testRti._kind;
+      var t1,
+        kind = testRti._kind;
       if (!H.isStrongTopType(testRti))
         if (!(testRti === type$.legacy_Object))
-          t2 = testRti === type$.Object;
+          if (!(testRti === type$.legacy_Never))
+            if (kind !== 7)
+              t1 = kind === 8 && H._nullIs(testRti._primary) || testRti === type$.Null || testRti === type$.JSNull;
+            else
+              t1 = true;
+          else
+            t1 = true;
         else
-          t2 = true;
+          t1 = true;
       else
-        t2 = true;
-      return t2 || testRti === type$.legacy_Never || t1 === 7 || testRti === type$.Null || testRti === type$.JSNull;
+        t1 = true;
+      return t1;
     },
     _generalIsTestImplementation: function(object) {
       var testRti = this;
@@ -1732,8 +1719,10 @@
       return this._primary._is(object);
     },
     _isTestViaProperty: function(object) {
-      var t1 = this,
-        tag = t1._specializedTestResource;
+      var tag, testRti = this;
+      if (object == null)
+        return H._nullIs(testRti);
+      tag = testRti._specializedTestResource;
       if (object instanceof P.Object)
         return !!object[tag];
       return !!J.getInterceptor$(object)[tag];
@@ -1784,20 +1773,26 @@
       return true === object || false === object;
     },
     _asBool: function(object) {
-      if (true === object || false === object)
-        return object;
+      if (true === object)
+        return true;
+      if (false === object)
+        return false;
       throw H.wrapException(H._TypeError__TypeError$forType(object, "bool"));
     },
     _asBoolS: function(object) {
-      if (true === object || false === object)
-        return object;
+      if (true === object)
+        return true;
+      if (false === object)
+        return false;
       if (object == null)
         return object;
       throw H.wrapException(H._TypeError__TypeError$forType(object, "bool"));
     },
     _asBoolQ: function(object) {
-      if (true === object || false === object)
-        return object;
+      if (true === object)
+        return true;
+      if (false === object)
+        return false;
       if (object == null)
         return object;
       throw H.wrapException(H._TypeError__TypeError$forType(object, "bool?"));
@@ -2672,7 +2667,7 @@
       return false;
     },
     _isFunctionSubtype: function(universe, s, sEnv, t, tEnv) {
-      var sParameters, tParameters, sRequiredPositional, tRequiredPositional, sRequiredPositionalLength, tRequiredPositionalLength, requiredPositionalDelta, sOptionalPositional, tOptionalPositional, sOptionalPositionalLength, tOptionalPositionalLength, i, t1, sNamed, tNamed, sNamedLength, tNamedLength, sIndex, tIndex, tName, sName, sIsRequired;
+      var sParameters, tParameters, sRequiredPositional, tRequiredPositional, sRequiredPositionalLength, tRequiredPositionalLength, requiredPositionalDelta, sOptionalPositional, tOptionalPositional, sOptionalPositionalLength, tOptionalPositionalLength, i, t1, sNamed, tNamed, sNamedLength, tNamedLength, sIndex, tIndex, tName, sName;
       if (!H._isSubtype(universe, s._primary, sEnv, t._primary, tEnv))
         return false;
       sParameters = s._rest;
@@ -2718,26 +2713,14 @@
           sIndex += 3;
           if (tName < sName)
             return false;
-          sIsRequired = sNamed[sIndex - 2];
-          if (sName < tName) {
-            if (sIsRequired)
-              return false;
+          if (sName < tName)
             continue;
-          }
-          t1 = tNamed[tIndex + 1];
-          if (sIsRequired && !t1)
-            return false;
           t1 = sNamed[sIndex - 1];
           if (!H._isSubtype(universe, tNamed[tIndex + 2], tEnv, t1, sEnv))
             return false;
           break;
         }
       }
-      for (; sIndex < sNamedLength;) {
-        if (sNamed[sIndex + 1])
-          return false;
-        sIndex += 3;
-      }
       return true;
     },
     _isInterfaceSubtype: function(universe, s, sEnv, t, tEnv) {
@@ -3072,6 +3055,9 @@
     $shl$n: function(receiver, a0) {
       return J.getInterceptor$n(receiver).$shl(receiver, a0);
     },
+    $shr$n: function(receiver, a0) {
+      return J.getInterceptor$n(receiver).$shr(receiver, a0);
+    },
     $sub$n: function(receiver, a0) {
       if (typeof receiver == "number" && typeof a0 == "number")
         return receiver - a0;
@@ -3086,6 +3072,9 @@
     elementAt$1$ax: function(receiver, a0) {
       return J.getInterceptor$ax(receiver).elementAt$1(receiver, a0);
     },
+    forEach$1$ax: function(receiver, a0) {
+      return J.getInterceptor$ax(receiver).forEach$1(receiver, a0);
+    },
     map$1$ax: function(receiver, a0) {
       return J.getInterceptor$ax(receiver).map$1(receiver, a0);
     },
@@ -3107,8 +3096,6 @@
     },
     JSNull: function JSNull() {
     },
-    JSObject: function JSObject() {
-    },
     JavaScriptObject: function JavaScriptObject() {
     },
     PlainJavaScriptObject: function PlainJavaScriptObject() {
@@ -3221,25 +3208,7 @@
             }
         };
       }($function, 1);
-      return $.Zone__current.registerBinaryCallback$3$1(new P._wrapJsFunctionForAsync_closure($protected), type$.Null, type$.int, type$.dynamic);
-    },
-    _Future$zoneValue: function(value, _zone, $T) {
-      var t1 = new P._Future(_zone, $T._eval$1("_Future<0>"));
-      $T._as(value);
-      t1._state = 4;
-      t1._resultOrListeners = value;
-      return t1;
-    },
-    _Future__chainForeignFuture: function(source, target) {
-      var e, s, exception;
-      target._state = 1;
-      try {
-        source.then$1$2$onError(new P._Future__chainForeignFuture_closure(target), new P._Future__chainForeignFuture_closure0(target), type$.Null);
-      } catch (exception) {
-        e = H.unwrapException(exception);
-        s = H.getTraceFromException(exception);
-        P.scheduleMicrotask(new P._Future__chainForeignFuture_closure1(target, e, s));
-      }
+      return $.Zone__current.registerBinaryCallback$3$1(new P._wrapJsFunctionForAsync_closure($protected), type$.void, type$.int, type$.dynamic);
     },
     _Future__chainCoreFuture: function(source, target) {
       var t1, t2, listeners;
@@ -3317,17 +3286,26 @@
             $.Zone__current = oldZone;
           t1 = _box_0.listenerValueOrError;
           if (t4._is(t1)) {
+            t5 = _box_0.listener.$ti;
+            t5 = t5._eval$1("Future<2>")._is(t1) || !t5._rest[1]._is(t1);
+          } else
+            t5 = false;
+          if (t5) {
+            t4._as(t1);
             result = _box_0.listener.result;
-            if (t1._state >= 4) {
-              current = t3._as(result._resultOrListeners);
-              result._resultOrListeners = null;
-              listeners = result._reverseListeners$1(current);
-              result._state = t1._state;
-              result._resultOrListeners = t1._resultOrListeners;
-              _box_1.source = t1;
-              continue;
-            } else
-              P._Future__chainCoreFuture(t1, result);
+            if (t1 instanceof P._Future)
+              if (t1._state >= 4) {
+                current = t3._as(result._resultOrListeners);
+                result._resultOrListeners = null;
+                listeners = result._reverseListeners$1(current);
+                result._state = t1._state;
+                result._resultOrListeners = t1._resultOrListeners;
+                _box_1.source = t1;
+                continue;
+              } else
+                P._Future__chainCoreFuture(t1, result);
+            else
+              result._chainForeignFuture$1(t1);
             return;
           }
         }
@@ -3357,7 +3335,7 @@
       t1 = type$.dynamic_Function_Object;
       if (t1._is(errorHandler))
         return t1._as(errorHandler);
-      throw H.wrapException(P.ArgumentError$value(errorHandler, "onError", "Error handler must accept one Object or one Object and a StackTrace as arguments, and return a a valid result"));
+      throw H.wrapException(P.ArgumentError$value(errorHandler, "onError", "Error handler must accept one Object or one Object and a StackTrace as arguments, and return a valid result"));
     },
     _microtaskLoop: function() {
       var entry, next;
@@ -3422,8 +3400,7 @@
       P._rootScheduleMicrotask(_null, _null, currentZone, type$.void_Function._as(currentZone.bindCallbackGuarded$1(callback)));
     },
     StreamIterator_StreamIterator: function(stream, $T) {
-      P.ArgumentError_checkNotNull(stream, "stream", $T._eval$1("Stream<0>"));
-      return new P._StreamIterator(stream, $T._eval$1("_StreamIterator<0>"));
+      return new P._StreamIterator(H.checkNotNullable(stream, "stream", type$.Object), $T._eval$1("_StreamIterator<0>"));
     },
     StreamController_StreamController: function($T) {
       var _null = null;
@@ -3436,6 +3413,13 @@
     _runGuarded: function(notificationHandler) {
       return;
     },
+    _ControllerSubscription$: function(_controller, onData, onError, onDone, cancelOnError, $T) {
+      var t1 = $.Zone__current,
+        t2 = cancelOnError ? 1 : 0,
+        t3 = P._BufferingStreamSubscription__registerDataHandler(t1, onData, $T),
+        t4 = P._BufferingStreamSubscription__registerErrorHandler(t1, onError);
+      return new P._ControllerSubscription(_controller, t3, t4, type$.void_Function._as(onDone), t1, t2, $T._eval$1("_ControllerSubscription<0>"));
+    },
     _BufferingStreamSubscription__registerDataHandler: function(zone, handleData, $T) {
       var t1 = handleData == null ? P.async___nullDataHandler$closure() : handleData;
       return type$.$env_1_1_void._bind$1($T)._eval$1("1(2)")._as(t1);
@@ -3449,9 +3433,6 @@
         return type$.dynamic_Function_Object._as(handleError);
       throw H.wrapException(P.ArgumentError$("handleError callback must take either an Object (the error), or both an Object (the error) and a StackTrace."));
     },
-    _BufferingStreamSubscription__registerDoneHandler: function(zone, handleDone) {
-      return type$.void_Function._as(handleDone);
-    },
     _nullDataHandler: function(value) {
     },
     _nullErrorHandler: function(error, stackTrace) {
@@ -3471,9 +3452,8 @@
       return P.Timer__createTimer(duration, type$.void_Function._as(t1.bindCallbackGuarded$1(callback)));
     },
     AsyncError$: function(error, stackTrace) {
-      var t1 = stackTrace == null ? P.AsyncError_defaultStackTrace(error) : stackTrace;
-      P.ArgumentError_checkNotNull(error, "error", type$.Object);
-      return new P.AsyncError(error, t1);
+      var t1 = H.checkNotNullable(error, "error", type$.Object);
+      return new P.AsyncError(t1, stackTrace == null ? P.AsyncError_defaultStackTrace(error) : stackTrace);
     },
     AsyncError_defaultStackTrace: function(error) {
       var stackTrace;
@@ -3607,10 +3587,6 @@
       _._doneFuture = _._addStreamState = _._lastSubscription = _._firstSubscription = null;
       _.$ti = t2;
     },
-    Future: function Future() {
-    },
-    Completer: function Completer() {
-    },
     _Completer: function _Completer() {
     },
     _AsyncCompleter: function _AsyncCompleter(t0, t1) {
@@ -3642,13 +3618,13 @@
       this.$this = t1;
     },
     _Future__chainForeignFuture_closure: function _Future__chainForeignFuture_closure(t0) {
-      this.target = t0;
+      this.$this = t0;
     },
     _Future__chainForeignFuture_closure0: function _Future__chainForeignFuture_closure0(t0) {
-      this.target = t0;
+      this.$this = t0;
     },
     _Future__chainForeignFuture_closure1: function _Future__chainForeignFuture_closure1(t0, t1, t2) {
-      this.target = t0;
+      this.$this = t0;
       this.e = t1;
       this.s = t2;
     },
@@ -3707,8 +3683,6 @@
     },
     StreamTransformerBase: function StreamTransformerBase() {
     },
-    StreamController: function StreamController() {
-    },
     _StreamController: function _StreamController() {
     },
     _StreamController__subscribe_closure: function _StreamController__subscribe_closure(t0) {
@@ -3798,7 +3772,7 @@
       var _ = this;
       _._async$_subscription = null;
       _._stateData = t0;
-      _._isPaused = false;
+      _._async$_hasValue = false;
       _.$ti = t1;
     },
     _cancelAndValue_closure: function _cancelAndValue_closure(t0, t1) {
@@ -4069,10 +4043,14 @@
       _._collection$_current = null;
       _.$ti = t4;
     },
+    SetMixin: function SetMixin() {
+    },
     _SetBase: function _SetBase() {
     },
     _UnmodifiableMapView_MapView__UnmodifiableMapMixin: function _UnmodifiableMapView_MapView__UnmodifiableMapMixin() {
     },
+    __SetBase_Object_SetMixin: function __SetBase_Object_SetMixin() {
+    },
     _parseJson: function(source, reviver) {
       var parsed, e, exception, t1;
       if (typeof source != "string")
@@ -4139,10 +4117,13 @@
     _defaultToEncodable: function(object) {
       return object.toJson$0();
     },
+    _JsonStringStringifier$: function(_sink, _toEncodable) {
+      return new P._JsonStringStringifier(_sink, [], P.convert___defaultToEncodable$closure());
+    },
     _JsonStringStringifier_stringify: function(object, toEncodable, indent) {
       var t1,
         output = new P.StringBuffer(""),
-        stringifier = new P._JsonStringStringifier(output, [], P.convert___defaultToEncodable$closure());
+        stringifier = P._JsonStringStringifier$(output, toEncodable);
       stringifier.writeObject$1(object);
       t1 = output._contents;
       return t1.charCodeAt(0) == 0 ? t1 : t1;
@@ -4175,9 +4156,9 @@
     _JsonMapKeyIterable: function _JsonMapKeyIterable(t0) {
       this._parent = t0;
     },
-    Utf8Decoder_closure: function Utf8Decoder_closure() {
+    Utf8Decoder__decoder_closure: function Utf8Decoder__decoder_closure() {
     },
-    Utf8Decoder_closure0: function Utf8Decoder_closure0() {
+    Utf8Decoder__decoderNonfatal_closure: function Utf8Decoder__decoderNonfatal_closure() {
     },
     Codec: function Codec() {
     },
@@ -4245,22 +4226,28 @@
           result[i] = fill;
       return result;
     },
-    List_List$from: function(elements, growable, $E) {
+    List_List$from: function(elements, $E) {
       var t1,
         list = H.setRuntimeTypeInfo([], $E._eval$1("JSArray<0>"));
       for (t1 = J.get$iterator$ax(elements); t1.moveNext$0();)
         C.JSArray_methods.add$1(list, $E._as(t1.get$current()));
       return list;
     },
+    List_List$of: function(elements, growable, $E) {
+      var t1 = P.List_List$_of(elements, $E);
+      return t1;
+    },
+    List_List$_of: function(elements, $E) {
+      var list, t1;
+      if (Array.isArray(elements))
+        return H.setRuntimeTypeInfo(elements.slice(0), $E._eval$1("JSArray<0>"));
+      list = H.setRuntimeTypeInfo([], $E._eval$1("JSArray<0>"));
+      for (t1 = J.get$iterator$ax(elements); t1.moveNext$0();)
+        C.JSArray_methods.add$1(list, t1.get$current());
+      return list;
+    },
     String_String$fromCharCodes: function(charCodes, start, end) {
-      var array, len, t1;
-      if (Array.isArray(charCodes)) {
-        array = charCodes;
-        len = array.length;
-        end = P.RangeError_checkValidRange(start, end, len);
-        return H.Primitives_stringFromCharCodes(start > 0 || end < len ? array.slice(start, end) : array);
-      }
-      t1 = H.Primitives_stringFromNativeUint8List(charCodes, start, P.RangeError_checkValidRange(start, end, charCodes.length));
+      var t1 = H.Primitives_stringFromNativeUint8List(charCodes, start, P.RangeError_checkValidRange(start, end, charCodes.length));
       return t1;
     },
     StringBuffer__writeAll: function(string, objects, separator) {
@@ -4332,11 +4319,6 @@
     ArgumentError$value: function(value, $name, message) {
       return new P.ArgumentError(true, value, $name, message);
     },
-    ArgumentError_checkNotNull: function(argument, $name, $T) {
-      if (argument == null)
-        throw H.wrapException(new P.ArgumentError(false, null, $name, "Must not be null"));
-      return argument;
-    },
     RangeError$: function(message) {
       var _null = null;
       return new P.RangeError(_null, _null, false, _null, _null, message);
@@ -4391,14 +4373,10 @@
       this._box_0 = t0;
       this.sb = t1;
     },
-    bool: function bool() {
-    },
     DateTime: function DateTime(t0, t1) {
       this._value = t0;
       this.isUtc = t1;
     },
-    double: function double() {
-    },
     Duration: function Duration(t0) {
       this._duration = t0;
     },
@@ -4411,6 +4389,8 @@
     AssertionError: function AssertionError(t0) {
       this.message = t0;
     },
+    TypeError: function TypeError() {
+    },
     NullThrownError: function NullThrownError() {
     },
     ArgumentError: function ArgumentError(t0, t1, t2, t3) {
@@ -4471,36 +4451,33 @@
       this.source = t1;
       this.offset = t2;
     },
-    Function: function Function() {
-    },
-    int: function int() {
-    },
     Iterable: function Iterable() {
     },
     Iterator: function Iterator() {
     },
-    List: function [] {
-    },
-    Map: function Map() {
-    },
-    MapEntry: function MapEntry() {
-    },
     Null: function Null() {
     },
-    num: function num() {
-    },
     Object: function Object() {
     },
-    StackTrace: function StackTrace() {
-    },
     _StringStackTrace: function _StringStackTrace() {
     },
-    String: function String() {
-    },
     StringBuffer: function StringBuffer(t0) {
       this._contents = t0;
     },
-    Symbol0: function Symbol0() {
+    _convertDartToNative_Value: function(value) {
+      var array;
+      if (value == null)
+        return value;
+      if (typeof value == "string" || typeof value == "number" || H._isBool(value))
+        return value;
+      if (type$.Map_dynamic_dynamic._is(value))
+        return P.convertDartToNative_Dictionary(value);
+      if (type$.List_dynamic._is(value)) {
+        array = [];
+        J.forEach$1$ax(value, new P._convertDartToNative_Value_closure(array));
+        value = array;
+      }
+      return value;
     },
     convertDartToNative_Dictionary: function(dict) {
       var object = {};
@@ -4513,6 +4490,9 @@
       this._box_0 = t0;
       this.$this = t1;
     },
+    _convertDartToNative_Value_closure: function _convertDartToNative_Value_closure(t0) {
+      this.array = t0;
+    },
     convertDartToNative_Dictionary_closure: function convertDartToNative_Dictionary_closure(t0) {
       this.object = t0;
     },
@@ -4535,28 +4515,6 @@
       this.completer = t0;
     },
     _JSRandom: function _JSRandom() {
-    },
-    ByteBuffer: function ByteBuffer() {
-    },
-    ByteData: function ByteData() {
-    },
-    Int8List: function Int8List() {
-    },
-    Uint8List: function Uint8List() {
-    },
-    Uint8ClampedList: function Uint8ClampedList() {
-    },
-    Int16List: function Int16List() {
-    },
-    Uint16List: function Uint16List() {
-    },
-    Int32List: function Int32List() {
-    },
-    Uint32List: function Uint32List() {
-    },
-    Float32List: function Float32List() {
-    },
-    Float64List: function Float64List() {
     }
   },
   W = {
@@ -4570,7 +4528,7 @@
         completer = new P._AsyncCompleter(t1, type$._AsyncCompleter_HttpRequest),
         xhr = new XMLHttpRequest();
       C.HttpRequest_methods.open$3$async(xhr, method, url, true);
-      xhr.withCredentials = true;
+      C.HttpRequest_methods.set$withCredentials(xhr, true);
       t2 = type$.nullable_void_Function_legacy_ProgressEvent;
       t3 = t2._as(new W.HttpRequest_request_closure(xhr, completer));
       type$.nullable_void_Function._as(null);
@@ -4643,66 +4601,6 @@
       this.error = t0;
       this.stackTrace = t1;
     }},
-  E = {Result: function Result() {
-    },
-    main: function() {
-      var $async$goto = 0,
-        $async$completer = P._makeAsyncAwaitCompleter(type$.void),
-        ddsChannel, vmService, id, message, channel, t1, t2, t3, $async$temp1, $async$temp2, $async$temp3;
-      var $async$main = P._wrapJsFunctionForAsync(function($async$errorCode, $async$result) {
-        if ($async$errorCode === 1)
-          return P._asyncRethrow($async$result, $async$completer);
-        while (true)
-          switch ($async$goto) {
-            case 0:
-              // Function start
-              channel = M.SseClient$("/test");
-              t1 = channel._incomingController;
-              t2 = new Q.QueueList(type$.QueueList_legacy_Result_legacy_String);
-              t3 = new Array(8);
-              t3.fixed$length = Array;
-              t2.set$_table(H.setRuntimeTypeInfo(t3, type$.JSArray_legacy_Result_legacy_String));
-              $async$temp1 = M;
-              $async$goto = 2;
-              return P._asyncAwait(new G.StreamQueue(new P._ControllerStream(t1, H._instanceType(t1)._eval$1("_ControllerStream<1>")), t2, new P.ListQueue(P.List_List$filled(P.ListQueue__calculateCapacity(null), null, false, type$.nullable__EventRequest_dynamic), type$.ListQueue_legacy__EventRequest_dynamic), type$.StreamQueue_legacy_String).get$next(), $async$main);
-            case 2:
-              // returning from await.
-              ddsChannel = $async$temp1.SseClient$($async$result);
-              t2 = new W._EventStream(ddsChannel._eventSource, "open", false, type$._EventStream_legacy_Event);
-              $async$goto = 3;
-              return P._asyncAwait(t2.get$first(t2), $async$main);
-            case 3:
-              // returning from await.
-              t2 = ddsChannel._incomingController;
-              vmService = Q.VmService$(new P._ControllerStream(t2, H._instanceType(t2)._eval$1("_ControllerStream<1>")), new E.main_closure(ddsChannel));
-              id = "" + ++vmService._id;
-              t2 = new P._Future($.Zone__current, type$._Future_legacy_Version);
-              vmService._completers.$indexSet(0, id, new P._AsyncCompleter(t2, type$._AsyncCompleter_legacy_Version));
-              vmService._methodCalls.$indexSet(0, id, "getVersion");
-              t1 = type$.dynamic;
-              message = C.C_JsonCodec.encode$2$toEncodable(P.LinkedHashMap_LinkedHashMap$_literal(["jsonrpc", "2.0", "id", id, "method", "getVersion", "params", C.Map_empty], t1, t1), null);
-              vmService._onSend.add$1(0, message);
-              vmService._writeMessage.call$1(message);
-              t1 = channel._outgoingController;
-              $async$temp1 = t1;
-              $async$temp2 = H._instanceType(t1)._precomputed1;
-              $async$temp3 = C.C_JsonCodec;
-              $async$goto = 4;
-              return P._asyncAwait(t2, $async$main);
-            case 4:
-              // returning from await.
-              $async$temp1.add$1(0, $async$temp2._as($async$temp3.encode$1($async$result.json)));
-              ddsChannel.close$0(0);
-              // implicit return
-              return P._asyncReturn(null, $async$completer);
-          }
-      });
-      return P._asyncStartSync($async$main, $async$completer);
-    },
-    main_closure: function main_closure(t0) {
-      this.ddsChannel = t0;
-    }
-  },
   F = {ValueResult: function ValueResult(t0, t1) {
       this.value = t0;
       this.$ti = t1;
@@ -4736,7 +4634,6 @@
       this.$this = t0;
     }, StreamQueue__ensureListening_closure0: function StreamQueue__ensureListening_closure0(t0) {
       this.$this = t0;
-    }, _EventRequest: function _EventRequest() {
     }, _NextRequest: function _NextRequest(t0, t1) {
       this._completer = t0;
       this.$ti = t1;
@@ -4754,7 +4651,7 @@
         return _null;
       if (type$.legacy_List_dynamic._is(json)) {
         t1 = J.map$1$1$ax(json, new Q.createServiceObject_closure(expectedTypes), type$.legacy_Object);
-        return P.List_List$from(t1, true, t1.$ti._eval$1("ListIterable.E"));
+        return P.List_List$of(t1, true, t1.$ti._eval$1("ListIterable.E"));
       } else if (type$.legacy_Map_dynamic_dynamic._is(json)) {
         type = H._asStringS(json.$index(0, "type"));
         if (type == null)
@@ -4777,7 +4674,7 @@
         return null;
       if (type$.legacy_List_dynamic._is(json)) {
         t1 = J.map$1$1$ax(json, new Q._createSpecificObject_closure(creator), type$.dynamic);
-        return P.List_List$from(t1, true, t1.$ti._eval$1("ListIterable.E"));
+        return P.List_List$of(t1, true, t1.$ti._eval$1("ListIterable.E"));
       } else if (type$.legacy_Map_dynamic_dynamic._is(json)) {
         t1 = P.LinkedHashMap_LinkedHashMap$_empty(type$.legacy_String, type$.dynamic);
         for (t2 = json.get$keys(), t2 = t2.get$iterator(t2); t2.moveNext$0();) {
@@ -4812,7 +4709,7 @@
       t2 = Q.createServiceObject(json.$index(0, "members"), C.List_ClassHeapStats);
       if (t2 == null)
         t2 = [];
-      t1.set$members(P.List_List$from(type$.Iterable_dynamic._as(t2), true, type$.legacy_ClassHeapStats));
+      t1.set$members(P.List_List$from(type$.Iterable_dynamic._as(t2), type$.legacy_ClassHeapStats));
       t1.memoryUsage = type$.legacy_MemoryUsage._as(Q.createServiceObject(json.$index(0, "memoryUsage"), C.List_MemoryUsage));
       t1.dateLastAccumulatorReset = H._asIntS(typeof json.$index(0, _s24_) == "string" ? P.int_parse(H._asStringS(json.$index(0, _s24_))) : json.$index(0, _s24_));
       t1.dateLastServiceGC = H._asIntS(typeof json.$index(0, _s17_) == "string" ? P.int_parse(H._asStringS(json.$index(0, _s17_))) : json.$index(0, _s17_));
@@ -4879,14 +4776,14 @@
       if (t4 == null)
         t4 = [];
       t5 = type$.Iterable_dynamic;
-      t1.set$interfaces(P.List_List$from(t5._as(t4), true, t3));
+      t1.set$interfaces(P.List_List$from(t5._as(t4), t3));
       t1.mixin = t3._as(Q.createServiceObject(json.$index(0, "mixin"), C.List_InstanceRef));
       t3 = Q.createServiceObject(json.$index(0, "fields"), C.List_FieldRef);
-      t1.set$fields(P.List_List$from(t5._as(t3 == null ? [] : t3), true, type$.legacy_FieldRef));
+      t1.set$fields(P.List_List$from(t5._as(t3 == null ? [] : t3), type$.legacy_FieldRef));
       t3 = Q.createServiceObject(json.$index(0, "functions"), C.List_FuncRef);
-      t1.set$functions(P.List_List$from(t5._as(t3 == null ? [] : t3), true, type$.legacy_FuncRef));
+      t1.set$functions(P.List_List$from(t5._as(t3 == null ? [] : t3), type$.legacy_FuncRef));
       t3 = Q.createServiceObject(json.$index(0, "subclasses"), C.List_ClassRef);
-      t1.set$subclasses(P.List_List$from(t5._as(t3 == null ? [] : t3), true, t2));
+      t1.set$subclasses(P.List_List$from(t5._as(t3 == null ? [] : t3), t2));
       return t1;
     },
     ClassHeapStats_parse: function(json) {
@@ -4909,7 +4806,7 @@
       t2 = Q.createServiceObject(json.$index(0, "classes"), C.List_ClassRef);
       if (t2 == null)
         t2 = [];
-      t1.set$classes(P.List_List$from(type$.Iterable_dynamic._as(t2), true, type$.legacy_ClassRef));
+      t1.set$classes(P.List_List$from(type$.Iterable_dynamic._as(t2), type$.legacy_ClassRef));
       return t1;
     },
     ClientName_parse: function(json) {
@@ -4960,7 +4857,7 @@
       t2 = Q.createServiceObject(json.$index(0, "variables"), C.List_ContextElement);
       if (t2 == null)
         t2 = [];
-      t1.set$variables(P.List_List$from(type$.Iterable_dynamic._as(t2), true, type$.legacy_ContextElement));
+      t1.set$variables(P.List_List$from(type$.Iterable_dynamic._as(t2), type$.legacy_ContextElement));
       return t1;
     },
     ContextElement_parse: function(json) {
@@ -4984,9 +4881,9 @@
       if (t2 == null)
         t2 = [];
       t3 = type$.Iterable_dynamic;
-      t1.set$functions(P.List_List$from(t3._as(t2), true, type$.legacy_ProfileFunction));
+      t1.set$functions(P.List_List$from(t3._as(t2), type$.legacy_ProfileFunction));
       t2 = Q.createServiceObject(json.$index(0, "samples"), C.List_CpuSample);
-      t1.set$samples(P.List_List$from(t3._as(t2 == null ? [] : t2), true, type$.legacy_CpuSample));
+      t1.set$samples(P.List_List$from(t3._as(t2 == null ? [] : t2), type$.legacy_CpuSample));
       return t1;
     },
     CpuSample_parse: function(json) {
@@ -4998,7 +4895,7 @@
       t1.vmTag = H._asStringS(json.$index(0, "vmTag"));
       t1.userTag = H._asStringS(json.$index(0, "userTag"));
       t1.truncated = H._asBoolS(json.$index(0, "truncated"));
-      t1.set$stack(P.List_List$from(type$.Iterable_dynamic._as(json.$index(0, "stack")), true, type$.legacy_int));
+      t1.set$stack(P.List_List$from(type$.Iterable_dynamic._as(json.$index(0, "stack")), type$.legacy_int));
       return t1;
     },
     ErrorRef_parse: function(json) {
@@ -5038,7 +4935,7 @@
       t1.timestamp = H._asIntS(json.$index(0, "timestamp"));
       t2 = type$.legacy_Breakpoint;
       t1.breakpoint = t2._as(Q.createServiceObject(json.$index(0, "breakpoint"), C.List_Breakpoint));
-      t1.set$pauseBreakpoints(json.$index(0, _s16_) == null ? _null : P.List_List$from(type$.Iterable_dynamic._as(Q.createServiceObject(json.$index(0, _s16_), C.List_Breakpoint)), true, t2));
+      t1.set$pauseBreakpoints(json.$index(0, _s16_) == null ? _null : P.List_List$from(type$.Iterable_dynamic._as(Q.createServiceObject(json.$index(0, _s16_), C.List_Breakpoint)), t2));
       t1.topFrame = type$.legacy_Frame._as(Q.createServiceObject(json.$index(0, "topFrame"), C.List_Frame));
       t2 = type$.legacy_InstanceRef;
       t1.exception = t2._as(Q.createServiceObject(json.$index(0, "exception"), C.List_InstanceRef));
@@ -5048,8 +4945,8 @@
       t1.extensionKind = H._asStringS(json.$index(0, "extensionKind"));
       t2 = type$.legacy_Map_dynamic_dynamic._as(json.$index(0, "extensionData"));
       t1.extensionData = t2 == null ? _null : new Q.ExtensionData(t2);
-      t1.set$timelineEvents(json.$index(0, _s14_) == null ? _null : P.List_List$from(type$.Iterable_dynamic._as(Q.createServiceObject(json.$index(0, _s14_), C.List_TimelineEvent)), true, type$.legacy_TimelineEvent));
-      t1.set$updatedStreams(json.$index(0, _s14_0) == null ? _null : P.List_List$from(type$.Iterable_dynamic._as(json.$index(0, _s14_0)), true, type$.legacy_String));
+      t1.set$timelineEvents(json.$index(0, _s14_) == null ? _null : P.List_List$from(type$.Iterable_dynamic._as(Q.createServiceObject(json.$index(0, _s14_), C.List_TimelineEvent)), type$.legacy_TimelineEvent));
+      t1.set$updatedStreams(json.$index(0, _s14_0) == null ? _null : P.List_List$from(type$.Iterable_dynamic._as(json.$index(0, _s14_0)), type$.legacy_String));
       t1.atAsyncSuspension = H._asBoolS(json.$index(0, "atAsyncSuspension"));
       t1.status = H._asStringS(json.$index(0, "status"));
       t1.logRecord = type$.legacy_LogRecord._as(Q.createServiceObject(json.$index(0, "logRecord"), C.List_LogRecord));
@@ -5111,7 +5008,7 @@
       t2 = Q.createServiceObject(json.$index(0, "flags"), C.List_Flag);
       if (t2 == null)
         t2 = [];
-      t1.set$flags(P.List_List$from(type$.Iterable_dynamic._as(t2), true, type$.legacy_Flag));
+      t1.set$flags(P.List_List$from(type$.Iterable_dynamic._as(t2), type$.legacy_Flag));
       return t1;
     },
     Frame_parse: function(json) {
@@ -5123,7 +5020,7 @@
       t1.$function = type$.legacy_FuncRef._as(Q.createServiceObject(json.$index(0, "function"), C.List_FuncRef));
       t1.code = type$.legacy_CodeRef._as(Q.createServiceObject(json.$index(0, "code"), C.List_CodeRef));
       t1.location = type$.legacy_SourceLocation._as(Q.createServiceObject(json.$index(0, "location"), C.List_SourceLocation));
-      t1.set$vars(json.$index(0, "vars") == null ? null : P.List_List$from(type$.Iterable_dynamic._as(Q.createServiceObject(json.$index(0, "vars"), C.List_BoundVariable)), true, type$.legacy_BoundVariable));
+      t1.set$vars(json.$index(0, "vars") == null ? null : P.List_List$from(type$.Iterable_dynamic._as(Q.createServiceObject(json.$index(0, "vars"), C.List_BoundVariable)), type$.legacy_BoundVariable));
       t1.kind = H._asStringS(json.$index(0, "kind"));
       return t1;
     },
@@ -5205,12 +5102,12 @@
       if (t3 == null)
         t3 = [];
       t4 = type$.Iterable_dynamic;
-      t1.set$libraries(P.List_List$from(t4._as(t3), true, t2));
+      t1.set$libraries(P.List_List$from(t4._as(t3), t2));
       t2 = Q.createServiceObject(json.$index(0, "breakpoints"), C.List_Breakpoint);
-      t1.set$breakpoints(P.List_List$from(t4._as(t2 == null ? [] : t2), true, type$.legacy_Breakpoint));
+      t1.set$breakpoints(P.List_List$from(t4._as(t2 == null ? [] : t2), type$.legacy_Breakpoint));
       t1.error = type$.legacy_Error._as(Q.createServiceObject(json.$index(0, "error"), C.List_Error));
       t1.exceptionPauseMode = H._asStringS(json.$index(0, "exceptionPauseMode"));
-      t1.set$extensionRPCs(json.$index(0, _s13_) == null ? null : P.List_List$from(t4._as(json.$index(0, _s13_)), true, type$.legacy_String));
+      t1.set$extensionRPCs(json.$index(0, _s13_) == null ? null : P.List_List$from(t4._as(json.$index(0, _s13_)), type$.legacy_String));
       return t1;
     },
     IsolateGroupRef_parse: function(json) {
@@ -5234,7 +5131,7 @@
       t2 = Q.createServiceObject(json.$index(0, "isolates"), C.List_IsolateRef);
       if (t2 == null)
         t2 = [];
-      t1.set$isolates(P.List_List$from(type$.Iterable_dynamic._as(t2), true, type$.legacy_IsolateRef));
+      t1.set$isolates(P.List_List$from(type$.Iterable_dynamic._as(t2), type$.legacy_IsolateRef));
       return t1;
     },
     InboundReferences_parse: function(json) {
@@ -5245,7 +5142,7 @@
       t2 = Q.createServiceObject(json.$index(0, "references"), C.List_InboundReference);
       if (t2 == null)
         t2 = [];
-      t1.set$references(P.List_List$from(type$.Iterable_dynamic._as(t2), true, type$.legacy_InboundReference));
+      t1.set$references(P.List_List$from(type$.Iterable_dynamic._as(t2), type$.legacy_InboundReference));
       return t1;
     },
     InboundReference_parse: function(json) {
@@ -5264,7 +5161,7 @@
       t1.type = H._asStringS(json.$index(0, "type"));
       t1.totalCount = H._asIntS(json.$index(0, "totalCount"));
       t2 = json.$index(0, "instances");
-      t1.set$instances(P.List_List$from(type$.Iterable_dynamic._as(Q.createServiceObject(t2 == null ? json.$index(0, "samples") : t2, C.List_ObjRef)), true, type$.legacy_ObjRef));
+      t1.set$instances(P.List_List$from(type$.Iterable_dynamic._as(Q.createServiceObject(t2 == null ? json.$index(0, "samples") : t2, C.List_ObjRef)), type$.legacy_ObjRef));
       return t1;
     },
     LibraryRef_parse: function(json) {
@@ -5287,15 +5184,15 @@
       t1.uri = H._asStringS(json.$index(0, "uri"));
       t1.debuggable = H._asBoolS(json.$index(0, "debuggable"));
       t2 = type$.Iterable_dynamic;
-      t1.set$dependencies(P.List_List$from(t2._as(Q._createSpecificObject(json.$index(0, "dependencies"), Q.vm_service_LibraryDependency_parse$closure())), true, type$.legacy_LibraryDependency));
+      t1.set$dependencies(P.List_List$from(t2._as(Q._createSpecificObject(json.$index(0, "dependencies"), Q.vm_service_LibraryDependency_parse$closure())), type$.legacy_LibraryDependency));
       t3 = Q.createServiceObject(json.$index(0, "scripts"), C.List_ScriptRef);
-      t1.set$scripts(P.List_List$from(t2._as(t3 == null ? [] : t3), true, type$.legacy_ScriptRef));
+      t1.set$scripts(P.List_List$from(t2._as(t3 == null ? [] : t3), type$.legacy_ScriptRef));
       t3 = Q.createServiceObject(json.$index(0, "variables"), C.List_FieldRef);
-      t1.set$variables(P.List_List$from(t2._as(t3 == null ? [] : t3), true, type$.legacy_FieldRef));
+      t1.set$variables(P.List_List$from(t2._as(t3 == null ? [] : t3), type$.legacy_FieldRef));
       t3 = Q.createServiceObject(json.$index(0, "functions"), C.List_FuncRef);
-      t1.set$functions(P.List_List$from(t2._as(t3 == null ? [] : t3), true, type$.legacy_FuncRef));
+      t1.set$functions(P.List_List$from(t2._as(t3 == null ? [] : t3), type$.legacy_FuncRef));
       t3 = Q.createServiceObject(json.$index(0, "classes"), C.List_ClassRef);
-      t1.set$classes(P.List_List$from(t2._as(t3 == null ? [] : t3), true, type$.legacy_ClassRef));
+      t1.set$classes(P.List_List$from(t2._as(t3 == null ? [] : t3), type$.legacy_ClassRef));
       return t1;
     },
     LibraryDependency_parse: function(json) {
@@ -5419,6 +5316,26 @@
       t1.$function = Q.createServiceObject(json.$index(0, "function"), C.List_dynamic);
       return t1;
     },
+    ProtocolList_parse: function(json) {
+      var t1, t2;
+      type$.legacy_Map_of_legacy_String_and_dynamic._as(json);
+      t1 = new Q.ProtocolList(json);
+      t1.type = H._asStringS(json.$index(0, "type"));
+      t2 = Q.createServiceObject(json.$index(0, "protocols"), C.List_Protocol);
+      if (t2 == null)
+        t2 = [];
+      t1.set$protocols(P.List_List$from(type$.Iterable_dynamic._as(t2), type$.legacy_Protocol));
+      return t1;
+    },
+    Protocol_parse: function(json) {
+      var t1;
+      type$.legacy_Map_of_legacy_String_and_dynamic._as(json);
+      t1 = new Q.Protocol();
+      t1.protocolName = H._asStringS(json.$index(0, "protocolName"));
+      t1.major = H._asIntS(json.$index(0, "major"));
+      t1.minor = H._asIntS(json.$index(0, "minor"));
+      return t1;
+    },
     ReloadReport_parse: function(json) {
       var t1;
       type$.legacy_Map_of_legacy_String_and_dynamic._as(json);
@@ -5448,7 +5365,7 @@
       t2 = Q.createServiceObject(json.$index(0, "elements"), C.List_RetainingObject);
       if (t2 == null)
         t2 = [];
-      t1.set$elements(P.List_List$from(type$.Iterable_dynamic._as(t2), true, type$.legacy_RetainingObject));
+      t1.set$elements(P.List_List$from(type$.Iterable_dynamic._as(t2), type$.legacy_RetainingObject));
       return t1;
     },
     Response_parse: function(json) {
@@ -5505,7 +5422,7 @@
       t2 = Q.createServiceObject(json.$index(0, "scripts"), C.List_ScriptRef);
       if (t2 == null)
         t2 = [];
-      t1.set$scripts(P.List_List$from(type$.Iterable_dynamic._as(t2), true, type$.legacy_ScriptRef));
+      t1.set$scripts(P.List_List$from(type$.Iterable_dynamic._as(t2), type$.legacy_ScriptRef));
       return t1;
     },
     SourceLocation_parse: function(json) {
@@ -5524,9 +5441,9 @@
       t1 = new Q.SourceReport(json);
       t1.type = H._asStringS(json.$index(0, "type"));
       t2 = type$.Iterable_dynamic;
-      t1.set$ranges(P.List_List$from(t2._as(Q._createSpecificObject(json.$index(0, "ranges"), Q.vm_service_SourceReportRange_parse$closure())), true, type$.legacy_SourceReportRange));
+      t1.set$ranges(P.List_List$from(t2._as(Q._createSpecificObject(json.$index(0, "ranges"), Q.vm_service_SourceReportRange_parse$closure())), type$.legacy_SourceReportRange));
       t3 = Q.createServiceObject(json.$index(0, "scripts"), C.List_ScriptRef);
-      t1.set$scripts(P.List_List$from(t2._as(t3 == null ? [] : t3), true, type$.legacy_ScriptRef));
+      t1.set$scripts(P.List_List$from(t2._as(t3 == null ? [] : t3), type$.legacy_ScriptRef));
       return t1;
     },
     SourceReportCoverage_parse: function(json) {
@@ -5538,8 +5455,8 @@
         t1 = new Q.SourceReportCoverage();
         t2 = type$.Iterable_dynamic;
         t3 = type$.legacy_int;
-        t1.set$hits(P.List_List$from(t2._as(json.$index(0, "hits")), true, t3));
-        t1.set$misses(P.List_List$from(t2._as(json.$index(0, "misses")), true, t3));
+        t1.set$hits(P.List_List$from(t2._as(json.$index(0, "hits")), t3));
+        t1.set$misses(P.List_List$from(t2._as(json.$index(0, "misses")), t3));
       }
       return t1;
     },
@@ -5557,7 +5474,7 @@
         t1.compiled = H._asBoolS(json.$index(0, "compiled"));
         t1.error = type$.legacy_ErrorRef._as(Q.createServiceObject(json.$index(0, "error"), C.List_ErrorRef));
         t1.coverage = type$.legacy_SourceReportCoverage._as(Q._createSpecificObject(json.$index(0, "coverage"), Q.vm_service_SourceReportCoverage_parse$closure()));
-        t1.set$possibleBreakpoints(json.$index(0, _s19_) == null ? null : P.List_List$from(type$.Iterable_dynamic._as(json.$index(0, _s19_)), true, type$.legacy_int));
+        t1.set$possibleBreakpoints(json.$index(0, _s19_) == null ? null : P.List_List$from(type$.Iterable_dynamic._as(json.$index(0, _s19_)), type$.legacy_int));
       }
       return t1;
     },
@@ -5573,11 +5490,11 @@
         t2 = [];
       t3 = type$.Iterable_dynamic;
       t4 = type$.legacy_Frame;
-      t1.set$frames(P.List_List$from(t3._as(t2), true, t4));
-      t1.set$asyncCausalFrames(json.$index(0, _s17_) == null ? null : P.List_List$from(t3._as(Q.createServiceObject(json.$index(0, _s17_), C.List_Frame)), true, t4));
-      t1.set$awaiterFrames(json.$index(0, _s13_) == null ? null : P.List_List$from(t3._as(Q.createServiceObject(json.$index(0, _s13_), C.List_Frame)), true, t4));
+      t1.set$frames(P.List_List$from(t3._as(t2), t4));
+      t1.set$asyncCausalFrames(json.$index(0, _s17_) == null ? null : P.List_List$from(t3._as(Q.createServiceObject(json.$index(0, _s17_), C.List_Frame)), t4));
+      t1.set$awaiterFrames(json.$index(0, _s13_) == null ? null : P.List_List$from(t3._as(Q.createServiceObject(json.$index(0, _s13_), C.List_Frame)), t4));
       t2 = Q.createServiceObject(json.$index(0, "messages"), C.List_Message);
-      t1.set$messages(P.List_List$from(t3._as(t2 == null ? [] : t2), true, type$.legacy_Message));
+      t1.set$messages(P.List_List$from(t3._as(t2 == null ? [] : t2), type$.legacy_Message));
       return t1;
     },
     Success_parse: function(json) {
@@ -5595,7 +5512,7 @@
       t2 = Q.createServiceObject(json.$index(0, "traceEvents"), C.List_TimelineEvent);
       if (t2 == null)
         t2 = [];
-      t1.set$traceEvents(P.List_List$from(type$.Iterable_dynamic._as(t2), true, type$.legacy_TimelineEvent));
+      t1.set$traceEvents(P.List_List$from(type$.Iterable_dynamic._as(t2), type$.legacy_TimelineEvent));
       t1.timeOriginMicros = H._asIntS(json.$index(0, "timeOriginMicros"));
       t1.timeExtentMicros = H._asIntS(json.$index(0, "timeExtentMicros"));
       return t1;
@@ -5612,8 +5529,8 @@
       t1.recorderName = H._asStringS(json.$index(0, "recorderName"));
       t2 = type$.Iterable_dynamic;
       t3 = type$.legacy_String;
-      t1.set$availableStreams(P.List_List$from(t2._as(json.$index(0, "availableStreams")), true, t3));
-      t1.set$recordedStreams(P.List_List$from(t2._as(json.$index(0, "recordedStreams")), true, t3));
+      t1.set$availableStreams(P.List_List$from(t2._as(json.$index(0, "availableStreams")), t3));
+      t1.set$recordedStreams(P.List_List$from(t2._as(json.$index(0, "recordedStreams")), t3));
       return t1;
     },
     Timestamp_parse: function(json) {
@@ -5643,7 +5560,7 @@
       t2 = Q.createServiceObject(json.$index(0, "types"), C.List_InstanceRef);
       if (t2 == null)
         t2 = [];
-      t1.set$types(P.List_List$from(type$.Iterable_dynamic._as(t2), true, type$.legacy_InstanceRef));
+      t1.set$types(P.List_List$from(type$.Iterable_dynamic._as(t2), type$.legacy_InstanceRef));
       return t1;
     },
     UnresolvedSourceLocation_parse: function(json) {
@@ -5692,9 +5609,9 @@
       if (t2 == null)
         t2 = [];
       t3 = type$.Iterable_dynamic;
-      t1.set$isolates(P.List_List$from(t3._as(t2), true, type$.legacy_IsolateRef));
+      t1.set$isolates(P.List_List$from(t3._as(t2), type$.legacy_IsolateRef));
       t2 = Q.createServiceObject(json.$index(0, "isolateGroups"), C.List_IsolateGroupRef);
-      t1.set$isolateGroups(P.List_List$from(t3._as(t2 == null ? [] : t2), true, type$.legacy_IsolateGroupRef));
+      t1.set$isolateGroups(P.List_List$from(t3._as(t2 == null ? [] : t2), type$.legacy_IsolateGroupRef));
       return t1;
     },
     createServiceObject_closure: function createServiceObject_closure(t0) {
@@ -6055,6 +5972,16 @@
       var _ = this;
       _.$function = _.resolvedUrl = _.exclusiveTicks = _.inclusiveTicks = _.kind = null;
     },
+    ProtocolList: function ProtocolList(t0) {
+      this.protocols = null;
+      this.json = t0;
+      this.type = null;
+    },
+    ProtocolList_toJson_closure: function ProtocolList_toJson_closure() {
+    },
+    Protocol: function Protocol() {
+      this.minor = this.major = this.protocolName = null;
+    },
     ReloadReport: function ReloadReport(t0) {
       this.success = null;
       this.json = t0;
@@ -6226,9 +6153,10 @@
     }},
   R = {
     _convert: function(bytes, start, end) {
-      var t1, t2, i, bufferIndex, byteOr, byte, bufferIndex0, t3,
-        buffer = new Uint8Array((end - start) * 2);
-      for (t1 = buffer.length, t2 = bytes.length, i = start, bufferIndex = 0, byteOr = 0; i < end; ++i) {
+      var t2, i, bufferIndex, byteOr, byte, bufferIndex0, t3,
+        t1 = (end - start) * 2,
+        buffer = new Uint8Array(t1);
+      for (t2 = bytes.length, i = start, bufferIndex = 0, byteOr = 0; i < end; ++i) {
         if (i >= t2)
           return H.ioore(bytes, i);
         byte = bytes[i];
@@ -6236,7 +6164,7 @@
           return H.iae(byte);
         byteOr = (byteOr | byte) >>> 0;
         bufferIndex0 = bufferIndex + 1;
-        t3 = (byte & 240) >>> 4;
+        t3 = byte >>> 4 & 15;
         t3 = t3 < 10 ? t3 + 48 : t3 + 97 - 10;
         if (bufferIndex >= t1)
           return H.ioore(buffer, bufferIndex);
@@ -6318,24 +6246,79 @@
       _._hexToByte = _._byteToHex = null;
     }
   },
+  E = {
+    main: function() {
+      var $async$goto = 0,
+        $async$completer = P._makeAsyncAwaitCompleter(type$.void),
+        ddsChannel, vmService, id, message, channel, t1, t2, t3, $async$temp1, $async$temp2, $async$temp3;
+      var $async$main = P._wrapJsFunctionForAsync(function($async$errorCode, $async$result) {
+        if ($async$errorCode === 1)
+          return P._asyncRethrow($async$result, $async$completer);
+        while (true)
+          switch ($async$goto) {
+            case 0:
+              // Function start
+              channel = M.SseClient$("/test");
+              t1 = channel._incomingController;
+              t2 = new Q.QueueList(type$.QueueList_legacy_Result_legacy_String);
+              t3 = new Array(8);
+              t3.fixed$length = Array;
+              t2.set$_table(H.setRuntimeTypeInfo(t3, type$.JSArray_legacy_Result_legacy_String));
+              t3 = P.List_List$filled(P.ListQueue__calculateCapacity(null), null, false, type$.nullable__EventRequest_dynamic);
+              $async$temp1 = M;
+              $async$goto = 2;
+              return P._asyncAwait(new G.StreamQueue(new P._ControllerStream(t1, H._instanceType(t1)._eval$1("_ControllerStream<1>")), t2, new P.ListQueue(t3, type$.ListQueue_legacy__EventRequest_dynamic), type$.StreamQueue_legacy_String).get$next(), $async$main);
+            case 2:
+              // returning from await.
+              ddsChannel = $async$temp1.SseClient$($async$result);
+              t1 = new W._EventStream(ddsChannel._eventSource, "open", false, type$._EventStream_legacy_Event);
+              $async$goto = 3;
+              return P._asyncAwait(t1.get$first(t1), $async$main);
+            case 3:
+              // returning from await.
+              t1 = ddsChannel._incomingController;
+              vmService = Q.VmService$(new P._ControllerStream(t1, H._instanceType(t1)._eval$1("_ControllerStream<1>")), new E.main_closure(ddsChannel));
+              id = "" + ++vmService._id;
+              t1 = new P._Future($.Zone__current, type$._Future_legacy_Version);
+              vmService._completers.$indexSet(0, id, new P._AsyncCompleter(t1, type$._AsyncCompleter_legacy_Version));
+              vmService._methodCalls.$indexSet(0, id, "getVersion");
+              t2 = type$.dynamic;
+              message = C.C_JsonCodec.encode$2$toEncodable(P.LinkedHashMap_LinkedHashMap$_literal(["jsonrpc", "2.0", "id", id, "method", "getVersion", "params", C.Map_empty], t2, t2), null);
+              vmService._onSend.add$1(0, message);
+              vmService._writeMessage.call$1(message);
+              t2 = channel._outgoingController;
+              $async$temp1 = t2;
+              $async$temp2 = H._instanceType(t2)._precomputed1;
+              $async$temp3 = C.C_JsonCodec;
+              $async$goto = 4;
+              return P._asyncAwait(t1, $async$main);
+            case 4:
+              // returning from await.
+              $async$temp1.add$1(0, $async$temp2._as($async$temp3.encode$1($async$result.json)));
+              ddsChannel.close$0(0);
+              // implicit return
+              return P._asyncReturn(null, $async$completer);
+          }
+      });
+      return P._asyncStartSync($async$main, $async$completer);
+    },
+    main_closure: function main_closure(t0) {
+      this.ddsChannel = t0;
+    }
+  },
   T = {
     UuidUtil_mathRNG: function() {
-      var b, rand, i,
+      var b, i,
         t1 = new Array(16);
       t1.fixed$length = Array;
       b = H.setRuntimeTypeInfo(t1, type$.JSArray_legacy_int);
-      for (rand = null, i = 0; i < 16; ++i) {
-        t1 = i & 3;
-        if (t1 === 0)
-          rand = C.JSInt_methods.toInt$0(C.JSNumber_methods.floor$0(C.C__JSRandom.nextDouble$0() * 4294967296));
-        if (typeof rand !== "number")
-          return rand.$shr();
-        C.JSArray_methods.$indexSet(b, i, C.JSInt_methods._shrOtherPositive$1(rand, t1 << 3) & 255);
-      }
+      for (i = 0; i < 16; ++i)
+        C.JSArray_methods.$indexSet(b, i, C.C__JSRandom.nextInt$1(256));
+      C.JSArray_methods.shuffle$0(b);
       return b;
     }
   };
-  var holders = [C, H, J, P, W, V, E, F, G, Q, N, R, Y, L, M, K, T];
+  var holders = [C, H, J, P, W, V, F, G, Q, N, R, Y, L, M, K, E, T];
   hunkHelpers.setFunctionNamesIfNecessary(holders);
   var $ = {};
   H.JS_CONST.prototype = {};
@@ -6393,7 +6376,6 @@
     },
     $isNull: 1
   };
-  J.JSObject.prototype = {};
   J.JavaScriptObject.prototype = {
     get$hashCode: function(receiver) {
       return 0;
@@ -6414,9 +6396,6 @@
         return this.super$JavaScriptObject$toString(receiver);
       return "JavaScript function for " + H.S(J.toString$0$(dartClosure));
     },
-    $signature: function() {
-      return {func: 1, opt: [,,,,,,,,,,,,,,,,]};
-    },
     $isFunction: 1
   };
   J.JSArray.prototype = {
@@ -6427,12 +6406,32 @@
       receiver.push(value);
     },
     addAll$1: function(receiver, collection) {
-      var t1, _i;
       H._arrayInstanceType(receiver)._eval$1("Iterable<1>")._as(collection);
       if (!!receiver.fixed$length)
         H.throwExpression(P.UnsupportedError$("addAll"));
-      for (t1 = collection.length, _i = 0; _i < collection.length; collection.length === t1 || (0, H.throwConcurrentModificationError)(collection), ++_i)
-        receiver.push(collection[_i]);
+      this._addAllFromArray$1(receiver, collection);
+      return;
+    },
+    _addAllFromArray$1: function(receiver, array) {
+      var len, i;
+      type$.JSArray_dynamic._as(array);
+      len = array.length;
+      if (len === 0)
+        return;
+      if (receiver === array)
+        throw H.wrapException(P.ConcurrentModificationError$(receiver));
+      for (i = 0; i < len; ++i)
+        receiver.push(array[i]);
+    },
+    forEach$1: function(receiver, f) {
+      var end, i;
+      H._arrayInstanceType(receiver)._eval$1("~(1)")._as(f);
+      end = receiver.length;
+      for (i = 0; i < end; ++i) {
+        f.call$1(receiver[i]);
+        if (receiver.length !== end)
+          throw H.wrapException(P.ConcurrentModificationError$(receiver));
+      }
     },
     map$1$1: function(receiver, f, $T) {
       var t1 = H._arrayInstanceType(receiver);
@@ -6472,6 +6471,29 @@
         for (i = 0; i < $length; ++i)
           receiver[start + i] = t1.$index(otherList, skipCount + i);
     },
+    shuffle$1: function(receiver, random) {
+      var $length, pos, t1, tmp;
+      if (!!receiver.immutable$list)
+        H.throwExpression(P.UnsupportedError$("shuffle"));
+      if (random == null)
+        random = C.C__JSRandom;
+      $length = receiver.length;
+      for (; $length > 1;) {
+        pos = random.nextInt$1($length);
+        --$length;
+        t1 = receiver.length;
+        if ($length >= t1)
+          return H.ioore(receiver, $length);
+        tmp = receiver[$length];
+        if (pos < 0 || pos >= t1)
+          return H.ioore(receiver, pos);
+        this.$indexSet(receiver, $length, receiver[pos]);
+        this.$indexSet(receiver, pos, tmp);
+      }
+    },
+    shuffle$0: function($receiver) {
+      return this.shuffle$1($receiver, null);
+    },
     contains$1: function(receiver, other) {
       var i;
       for (i = 0; i < receiver.length; ++i)
@@ -6526,14 +6548,10 @@
       receiver[index] = value;
     },
     $add: function(receiver, other) {
-      var t2, _i,
-        t1 = H._arrayInstanceType(receiver);
+      var t1 = H._arrayInstanceType(receiver);
       t1._eval$1("List<1>")._as(other);
-      t1 = H.setRuntimeTypeInfo([], t1);
-      for (t2 = receiver.length, _i = 0; _i < receiver.length; receiver.length === t2 || (0, H.throwConcurrentModificationError)(receiver), ++_i)
-        this.add$1(t1, receiver[_i]);
-      for (t2 = other.get$iterator(other); t2.moveNext$0();)
-        this.add$1(t1, t2.get$current());
+      t1 = P.List_List$of(receiver, true, t1._precomputed1);
+      this.addAll$1(t1, other);
       return t1;
     },
     $isJSIndexable: 1,
@@ -6567,16 +6585,6 @@
     $isIterator: 1
   };
   J.JSNumber.prototype = {
-    toInt$0: function(receiver) {
-      var t1;
-      if (receiver >= -2147483648 && receiver <= 2147483647)
-        return receiver | 0;
-      if (isFinite(receiver)) {
-        t1 = receiver < 0 ? Math.ceil(receiver) : Math.floor(receiver);
-        return t1 + 0;
-      }
-      throw H.wrapException(P.UnsupportedError$("" + receiver + ".toInt()"));
-    },
     floor$0: function(receiver) {
       var truncated, d;
       if (receiver >= 0) {
@@ -6625,12 +6633,12 @@
       var absolute, floorLog2, factor, scaled,
         intValue = receiver | 0;
       if (receiver === intValue)
-        return 536870911 & intValue;
+        return intValue & 536870911;
       absolute = Math.abs(receiver);
       floorLog2 = Math.log(absolute) / 0.6931471805599453 | 0;
       factor = Math.pow(2, floorLog2);
       scaled = absolute < 1 ? absolute / factor : factor / absolute;
-      return 536870911 & ((scaled * 9007199254740992 | 0) + (scaled * 3542243181176521 | 0)) * 599197 + floorLog2 * 1259;
+      return ((scaled * 9007199254740992 | 0) + (scaled * 3542243181176521 | 0)) * 599197 + floorLog2 * 1259 & 536870911;
     },
     $add: function(receiver, other) {
       H._asNumS(other);
@@ -6804,13 +6812,13 @@
     get$hashCode: function(receiver) {
       var t1, hash, i;
       for (t1 = receiver.length, hash = 0, i = 0; i < t1; ++i) {
-        hash = 536870911 & hash + receiver.charCodeAt(i);
-        hash = 536870911 & hash + ((524287 & hash) << 10);
+        hash = hash + receiver.charCodeAt(i) & 536870911;
+        hash = hash + ((hash & 524287) << 10) & 536870911;
         hash ^= hash >> 6;
       }
-      hash = 536870911 & hash + ((67108863 & hash) << 3);
+      hash = hash + ((hash & 67108863) << 3) & 536870911;
       hash ^= hash >> 11;
-      return 536870911 & hash + ((16383 & hash) << 15);
+      return hash + ((hash & 16383) << 15) & 536870911;
     },
     get$runtimeType: function(receiver) {
       return C.Type_String_k8F;
@@ -6828,6 +6836,31 @@
     $isPattern: 1,
     $isString: 1
   };
+  H.LateError.prototype = {
+    toString$0: function(_) {
+      var message = this._message;
+      return message != null ? "LateInitializationError: " + message : "LateInitializationError";
+    }
+  };
+  H.ReachabilityError.prototype = {
+    toString$0: function(_) {
+      var t1 = "ReachabilityError: " + this._message;
+      return t1;
+    }
+  };
+  H.nullFuture_closure.prototype = {
+    call$0: function() {
+      var t1 = new P._Future($.Zone__current, type$._Future_Null);
+      t1._asyncComplete$1(null);
+      return t1;
+    },
+    $signature: 45
+  };
+  H.NotNullableError.prototype = {
+    toString$0: function(_) {
+      return "Null is not a valid value for the parameter '" + this.__internal$_name + "' of type '" + H.createRuntimeType(this.$ti._precomputed1).toString$0(0) + "'";
+    }
+  };
   H.EfficientLengthIterable.prototype = {};
   H.ListIterable.prototype = {
     get$iterator: function(_) {
@@ -6844,8 +6877,7 @@
   };
   H.ListIterator.prototype = {
     get$current: function() {
-      var cur = this._current;
-      return cur;
+      return this._current;
     },
     moveNext$0: function() {
       var t3, _this = this,
@@ -6890,8 +6922,7 @@
       return false;
     },
     get$current: function() {
-      var cur = this._current;
-      return cur;
+      return this._current;
     },
     set$_current: function(_current) {
       this._current = this.$ti._eval$1("2?")._as(_current);
@@ -6911,7 +6942,7 @@
       var hash = this._hashCode;
       if (hash != null)
         return hash;
-      hash = 536870911 & 664597 * J.get$hashCode$(this.__internal$_name);
+      hash = 664597 * J.get$hashCode$(this.__internal$_name) & 536870911;
       this._hashCode = hash;
       return hash;
     },
@@ -6938,6 +6969,7 @@
       t1._precomputed1._as(key);
       t1._rest[1]._as(val);
       H.ConstantMap__throwUnmodifiable();
+      H.ReachabilityError$("`null` encountered as the result from expression with type `Never`.");
     },
     map$2$1: function(_, transform, K2, V2) {
       var result = P.LinkedHashMap_LinkedHashMap$_empty(K2, V2);
@@ -6953,10 +6985,10 @@
     call$2: function(key, value) {
       var t1 = H._instanceType(this.$this),
         entry = this.transform.call$2(t1._precomputed1._as(key), t1._rest[1]._as(value));
-      this.result.$indexSet(0, C.JSNull_methods.get$key(entry), entry.get$value());
+      this.result.$indexSet(0, entry.get$key(entry), entry.get$value());
     },
     $signature: function() {
-      return H._instanceType(this.$this)._eval$1("Null(1,2)");
+      return H._instanceType(this.$this)._eval$1("~(1,2)");
     }
   };
   H.ConstantStringMap.prototype = {
@@ -7058,7 +7090,7 @@
       C.JSArray_methods.add$1(this.$arguments, argument);
       ++t1.argumentCount;
     },
-    $signature: 44
+    $signature: 39
   };
   H.TypeErrorDecoder.prototype = {
     matchTypeError$1: function(message) {
@@ -7089,7 +7121,7 @@
     toString$0: function(_) {
       var t1 = this._method;
       if (t1 == null)
-        return "NoSuchMethodError: " + H.S(this._message);
+        return "NoSuchMethodError: " + H.S(this.__js_helper$_message);
       return "NoSuchMethodError: method not found: '" + t1 + "' on null";
     }
   };
@@ -7099,16 +7131,16 @@
         _s38_ = "NoSuchMethodError: method not found: '",
         t1 = _this._method;
       if (t1 == null)
-        return "NoSuchMethodError: " + H.S(_this._message);
+        return "NoSuchMethodError: " + H.S(_this.__js_helper$_message);
       t2 = _this._receiver;
       if (t2 == null)
-        return _s38_ + t1 + "' (" + H.S(_this._message) + ")";
-      return _s38_ + t1 + "' on '" + t2 + "' (" + H.S(_this._message) + ")";
+        return _s38_ + t1 + "' (" + H.S(_this.__js_helper$_message) + ")";
+      return _s38_ + t1 + "' on '" + t2 + "' (" + H.S(_this.__js_helper$_message) + ")";
     }
   };
   H.UnknownJsTypeError.prototype = {
     toString$0: function(_) {
-      var t1 = this._message;
+      var t1 = this.__js_helper$_message;
       return t1.length === 0 ? "Error" : "Error: " + t1;
     }
   };
@@ -7182,7 +7214,7 @@
   };
   H.RuntimeError.prototype = {
     toString$0: function(_) {
-      return "RuntimeError: " + H.S(this.message);
+      return "RuntimeError: " + this.message;
     }
   };
   H._AssertionError.prototype = {
@@ -7441,7 +7473,7 @@
       t1.$indexSet(0, t2._precomputed1._as(key), t2._rest[1]._as(value));
     },
     $signature: function() {
-      return H._instanceType(this.$this)._eval$1("Null(1,2)");
+      return H._instanceType(this.$this)._eval$1("~(1,2)");
     }
   };
   H.LinkedHashMapCell.prototype = {};
@@ -7490,19 +7522,19 @@
     call$1: function(o) {
       return this.getTag(o);
     },
-    $signature: 3
+    $signature: 2
   };
   H.initHooks_closure0.prototype = {
     call$2: function(o, tag) {
       return this.getUnknownTag(o, tag);
     },
-    $signature: 31
+    $signature: 33
   };
   H.initHooks_closure1.prototype = {
     call$1: function(tag) {
       return this.prototypeForTag(H._asStringS(tag));
     },
-    $signature: 41
+    $signature: 35
   };
   H.NativeByteBuffer.prototype = {
     get$runtimeType: function(receiver) {
@@ -7681,7 +7713,7 @@
       t2 = this.span;
       t1.firstChild ? t1.removeChild(t2) : t1.appendChild(t2);
     },
-    $signature: 33
+    $signature: 28
   };
   P._AsyncRun__scheduleImmediateJsOverride_internalCallback.prototype = {
     call$0: function() {
@@ -7689,7 +7721,7 @@
     },
     "call*": "call$0",
     $requiredArgCount: 0,
-    $signature: 1
+    $signature: 3
   };
   P._AsyncRun__scheduleImmediateWithSetImmediate_internalCallback.prototype = {
     call$0: function() {
@@ -7697,7 +7729,7 @@
     },
     "call*": "call$0",
     $requiredArgCount: 0,
-    $signature: 1
+    $signature: 3
   };
   P._TimerImpl.prototype = {
     _TimerImpl$2: function(milliseconds, callback) {
@@ -7761,7 +7793,7 @@
     call$1: function(result) {
       return this.bodyFunction.call$2(0, result);
     },
-    $signature: 2
+    $signature: 1
   };
   P._awaitOnObject_closure0.prototype = {
     call$2: function(error, stackTrace) {
@@ -7769,13 +7801,13 @@
     },
     "call*": "call$2",
     $requiredArgCount: 2,
-    $signature: 34
+    $signature: 40
   };
   P._wrapJsFunctionForAsync_closure.prototype = {
     call$2: function(errorCode, result) {
       this.$protected(H._asIntS(errorCode), result);
     },
-    $signature: 38
+    $signature: 41
   };
   P._BroadcastSubscription.prototype = {
     _onPause$0: function() {
@@ -7880,7 +7912,7 @@
       H._instanceType(_this)._eval$1("~(_BufferingStreamSubscription<1>)")._as(action);
       t1 = _this._state;
       if ((t1 & 2) !== 0)
-        throw H.wrapException(P.StateError$("Cannot fire new event. Controller is already firing an event"));
+        throw H.wrapException(P.StateError$(string$.Cannot));
       subscription = _this._firstSubscription;
       if (subscription == null)
         return;
@@ -7929,7 +7961,7 @@
     },
     _addEventError$0: function() {
       if ((this._state & 2) !== 0)
-        return new P.StateError("Cannot fire new event. Controller is already firing an event");
+        return new P.StateError(string$.Cannot);
       return this.super$_BroadcastStreamController$_addEventError();
     },
     _sendData$1: function(data) {
@@ -7955,7 +7987,7 @@
       this.$this.$ti._eval$1("_BufferingStreamSubscription<1>")._as(subscription)._add$1(this.data);
     },
     $signature: function() {
-      return this.$this.$ti._eval$1("Null(_BufferingStreamSubscription<1>)");
+      return this.$this.$ti._eval$1("~(_BufferingStreamSubscription<1>)");
     }
   };
   P._AsyncBroadcastStreamController.prototype = {
@@ -7967,12 +7999,10 @@
         subscription._addPending$1(new P._DelayedData(data, t1));
     }
   };
-  P.Future.prototype = {};
-  P.Completer.prototype = {};
   P._Completer.prototype = {
     completeError$2: function(error, stackTrace) {
       var t1;
-      P.ArgumentError_checkNotNull(error, "error", type$.Object);
+      H.checkNotNullable(error, "error", type$.Object);
       t1 = this.future;
       if (t1._state !== 0)
         throw H.wrapException(P.StateError$("Future already completed"));
@@ -8028,7 +8058,7 @@
         if (onError != null)
           onError = P._registerErrorHandler(onError, currentZone);
       }
-      result = new P._Future($.Zone__current, $R._eval$1("_Future<0>"));
+      result = new P._Future(currentZone, $R._eval$1("_Future<0>"));
       t2 = onError == null ? 1 : 3;
       this._addListener$1(new P._FutureListener(result, t2, f, onError, t1._eval$1("@<1>")._bind$1($R)._eval$1("_FutureListener<1,2>")));
       return result;
@@ -8052,6 +8082,11 @@
       this._addListener$1(new P._FutureListener(result, 8, action, null, t1._eval$1("@<1>")._bind$1(t1._precomputed1)._eval$1("_FutureListener<1,2>")));
       return result;
     },
+    _setValue$1: function(value) {
+      this.$ti._precomputed1._as(value);
+      this._state = 4;
+      this._resultOrListeners = value;
+    },
     _addListener$1: function(listener) {
       var source, _this = this,
         t1 = _this._state;
@@ -8115,6 +8150,17 @@
       }
       return prev;
     },
+    _chainForeignFuture$1: function(source) {
+      var e, s, exception, _this = this;
+      _this._state = 1;
+      try {
+        source.then$1$2$onError(new P._Future__chainForeignFuture_closure(_this), new P._Future__chainForeignFuture_closure0(_this), type$.Null);
+      } catch (exception) {
+        e = H.unwrapException(exception);
+        s = H.getTraceFromException(exception);
+        P.scheduleMicrotask(new P._Future__chainForeignFuture_closure1(_this, e, s));
+      }
+    },
     _complete$1: function(value) {
       var listeners, _this = this,
         t1 = _this.$ti;
@@ -8123,7 +8169,7 @@
         if (t1._is(value))
           P._Future__chainCoreFuture(value, _this);
         else
-          P._Future__chainForeignFuture(value, _this);
+          _this._chainForeignFuture$1(value);
       else {
         listeners = _this._removeListeners$0();
         t1._precomputed1._as(value);
@@ -8176,7 +8222,7 @@
           P._Future__chainCoreFuture(value, _this);
         return;
       }
-      P._Future__chainForeignFuture(value, _this);
+      _this._chainForeignFuture$1(value);
     },
     _asyncCompleteError$2: function(error, stackTrace) {
       type$.StackTrace._as(stackTrace);
@@ -8189,54 +8235,60 @@
     call$0: function() {
       P._Future__propagateToListeners(this.$this, this.listener);
     },
-    $signature: 1
+    $signature: 0
   };
   P._Future__prependListeners_closure.prototype = {
     call$0: function() {
       P._Future__propagateToListeners(this.$this, this._box_0.listeners);
     },
-    $signature: 1
+    $signature: 0
   };
   P._Future__chainForeignFuture_closure.prototype = {
     call$1: function(value) {
-      var t1 = this.target;
+      var error, stackTrace, exception,
+        t1 = this.$this;
       t1._state = 0;
-      t1._complete$1(value);
+      try {
+        t1._completeWithValue$1(t1.$ti._precomputed1._as(value));
+      } catch (exception) {
+        error = H.unwrapException(exception);
+        stackTrace = H.getTraceFromException(exception);
+        t1._completeError$2(error, stackTrace);
+      }
     },
     $signature: 11
   };
   P._Future__chainForeignFuture_closure0.prototype = {
     call$2: function(error, stackTrace) {
-      type$.StackTrace._as(stackTrace);
-      this.target._completeError$2(error, stackTrace);
+      this.$this._completeError$2(error, type$.StackTrace._as(stackTrace));
     },
     "call*": "call$2",
     $requiredArgCount: 2,
-    $signature: 27
+    $signature: 29
   };
   P._Future__chainForeignFuture_closure1.prototype = {
     call$0: function() {
-      this.target._completeError$2(this.e, this.s);
+      this.$this._completeError$2(this.e, this.s);
     },
-    $signature: 1
+    $signature: 0
   };
   P._Future__asyncCompleteWithValue_closure.prototype = {
     call$0: function() {
       this.$this._completeWithValue$1(this.value);
     },
-    $signature: 1
+    $signature: 0
   };
   P._Future__chainFuture_closure.prototype = {
     call$0: function() {
       P._Future__chainCoreFuture(this.value, this.$this);
     },
-    $signature: 1
+    $signature: 0
   };
   P._Future__asyncCompleteError_closure.prototype = {
     call$0: function() {
       this.$this._completeError$2(this.error, this.stackTrace);
     },
-    $signature: 1
+    $signature: 0
   };
   P._Future__propagateToListeners_handleWhenCompleteCallback.prototype = {
     call$0: function() {
@@ -8283,7 +8335,7 @@
     call$1: function(_) {
       return this.originalSource;
     },
-    $signature: 28
+    $signature: 32
   };
   P._Future__propagateToListeners_handleValueCallback.prototype = {
     call$0: function() {
@@ -8357,7 +8409,7 @@
       ++this._box_0.count;
     },
     $signature: function() {
-      return H._instanceType(this.$this)._eval$1("Null(Stream.T)");
+      return H._instanceType(this.$this)._eval$1("~(Stream.T)");
     }
   };
   P.Stream_length_closure0.prototype = {
@@ -8366,7 +8418,7 @@
     },
     "call*": "call$0",
     $requiredArgCount: 0,
-    $signature: 1
+    $signature: 0
   };
   P.Stream_first_closure.prototype = {
     call$0: function() {
@@ -8386,19 +8438,18 @@
     },
     "call*": "call$0",
     $requiredArgCount: 0,
-    $signature: 1
+    $signature: 0
   };
   P.Stream_first_closure0.prototype = {
     call$1: function(value) {
       P._cancelAndValue(this.subscription, this.future, H._instanceType(this.$this)._eval$1("Stream.T")._as(value));
     },
     $signature: function() {
-      return H._instanceType(this.$this)._eval$1("Null(Stream.T)");
+      return H._instanceType(this.$this)._eval$1("~(Stream.T)");
     }
   };
   P.StreamSubscription.prototype = {};
   P.StreamTransformerBase.prototype = {};
-  P.StreamController.prototype = {};
   P._StreamController.prototype = {
     get$_pendingEvents: function() {
       var t1, _this = this;
@@ -8463,18 +8514,16 @@
       return _this._ensureDoneFuture$0();
     },
     _subscribe$4: function(onData, onError, onDone, cancelOnError) {
-      var t2, t3, subscription, pendingEvents, addState, _this = this,
+      var subscription, pendingEvents, t2, addState, _this = this,
         t1 = H._instanceType(_this);
       t1._eval$1("~(1)?")._as(onData);
       type$.nullable_void_Function._as(onDone);
       if ((_this._state & 3) !== 0)
         throw H.wrapException(P.StateError$("Stream has already been listened to."));
-      t2 = $.Zone__current;
-      t3 = cancelOnError ? 1 : 0;
-      subscription = new P._ControllerSubscription(_this, P._BufferingStreamSubscription__registerDataHandler(t2, onData, t1._precomputed1), P._BufferingStreamSubscription__registerErrorHandler(t2, onError), P._BufferingStreamSubscription__registerDoneHandler(t2, onDone), t2, t3, t1._eval$1("_ControllerSubscription<1>"));
+      subscription = P._ControllerSubscription$(_this, onData, onError, onDone, cancelOnError, t1._precomputed1);
       pendingEvents = _this.get$_pendingEvents();
-      t3 = _this._state |= 1;
-      if ((t3 & 8) !== 0) {
+      t2 = _this._state |= 1;
+      if ((t2 & 8) !== 0) {
         addState = t1._eval$1("_StreamControllerAddStreamState<1>")._as(_this._varData);
         addState.set$varData(subscription);
         addState.resume$0();
@@ -8541,7 +8590,7 @@
     call$0: function() {
       P._runGuarded(this.$this.onListen);
     },
-    $signature: 1
+    $signature: 0
   };
   P._StreamController__recordCancel_complete.prototype = {
     call$0: function() {
@@ -8918,7 +8967,7 @@
         t1.lastPendingEvent = null;
       $event.perform$1(t2);
     },
-    $signature: 1
+    $signature: 0
   };
   P._StreamImplEvents.prototype = {
     add$1: function(_, $event) {
@@ -8970,7 +9019,7 @@
   P._StreamIterator.prototype = {
     get$current: function() {
       var _this = this;
-      if (_this._async$_subscription != null && _this._isPaused)
+      if (_this._async$_hasValue)
         return _this.$ti._precomputed1._as(_this._stateData);
       return _this.$ti._precomputed1._as(null);
     },
@@ -8978,10 +9027,10 @@
       var future, _this = this,
         subscription = _this._async$_subscription;
       if (subscription != null) {
-        if (_this._isPaused) {
+        if (_this._async$_hasValue) {
           future = new P._Future($.Zone__current, type$._Future_bool);
           _this._stateData = future;
-          _this._isPaused = false;
+          _this._async$_hasValue = false;
           subscription.resume$0();
           return future;
         }
@@ -8990,11 +9039,16 @@
       return _this._initializeOrDone$0();
     },
     _initializeOrDone$0: function() {
-      var _this = this,
+      var future, subscription, _this = this,
         stateData = _this._stateData;
       if (stateData != null) {
-        _this.set$_async$_subscription(_this.$ti._eval$1("Stream<1>")._as(stateData).listen$4$cancelOnError$onDone$onError(_this.get$_async$_onData(), true, _this.get$_onDone(), _this.get$_onError()));
-        return _this._stateData = new P._Future($.Zone__current, type$._Future_bool);
+        _this.$ti._eval$1("Stream<1>")._as(stateData);
+        future = new P._Future($.Zone__current, type$._Future_bool);
+        _this._stateData = future;
+        subscription = stateData.listen$4$cancelOnError$onDone$onError(_this.get$_async$_onData(), true, _this.get$_onDone(), _this.get$_onError());
+        if (_this._stateData != null)
+          _this.set$_async$_subscription(subscription);
+        return future;
       }
       return $.$get$Future__falseFuture();
     },
@@ -9005,8 +9059,10 @@
       _this._stateData = null;
       if (subscription != null) {
         _this.set$_async$_subscription(null);
-        if (!_this._isPaused)
+        if (!_this._async$_hasValue)
           type$._Future_bool._as(stateData)._asyncComplete$1(false);
+        else
+          _this._async$_hasValue = false;
         return subscription.cancel$0();
       }
       return $.$get$Future__nullFuture();
@@ -9014,29 +9070,40 @@
     _async$_onData$1: function(data) {
       var moveNextFuture, t1, _this = this;
       _this.$ti._precomputed1._as(data);
+      if (_this._async$_subscription == null)
+        return;
       moveNextFuture = type$._Future_bool._as(_this._stateData);
       _this._stateData = data;
-      _this._isPaused = true;
+      _this._async$_hasValue = true;
       moveNextFuture._complete$1(true);
-      if (_this._isPaused) {
+      if (_this._async$_hasValue) {
         t1 = _this._async$_subscription;
         if (t1 != null)
           t1.pause$0();
       }
     },
     _onError$2: function(error, stackTrace) {
-      var moveNextFuture;
+      var subscription, moveNextFuture, _this = this;
       type$.StackTrace._as(stackTrace);
-      moveNextFuture = type$._Future_bool._as(this._stateData);
-      this.set$_async$_subscription(null);
-      this._stateData = null;
-      moveNextFuture._completeError$2(error, stackTrace);
+      subscription = _this._async$_subscription;
+      moveNextFuture = type$._Future_bool._as(_this._stateData);
+      _this.set$_async$_subscription(null);
+      _this._stateData = null;
+      if (subscription != null)
+        moveNextFuture._completeError$2(error, stackTrace);
+      else
+        moveNextFuture._asyncCompleteError$2(error, stackTrace);
     },
     _onDone$0: function() {
-      var moveNextFuture = type$._Future_bool._as(this._stateData);
-      this.set$_async$_subscription(null);
-      this._stateData = null;
-      moveNextFuture._complete$1(false);
+      var _this = this,
+        subscription = _this._async$_subscription,
+        moveNextFuture = type$._Future_bool._as(_this._stateData);
+      _this.set$_async$_subscription(null);
+      _this._stateData = null;
+      if (subscription != null)
+        moveNextFuture._completeWithValue$1(false);
+      else
+        moveNextFuture._asyncCompleteWithValue$1(false);
     },
     set$_async$_subscription: function(_subscription) {
       this._async$_subscription = this.$ti._eval$1("StreamSubscription<1>?")._as(_subscription);
@@ -9145,7 +9212,7 @@
       error.stack = J.toString$0$(this.stackTrace);
       throw error;
     },
-    $signature: 1
+    $signature: 0
   };
   P._RootZone.prototype = {
     runGuarded$1: function(f) {
@@ -9310,7 +9377,7 @@
       else
         _this._collection$_last = _this._collection$_last._collection$_next = cell;
       ++_this._collection$_length;
-      _this._collection$_modifications = 1073741823 & _this._collection$_modifications + 1;
+      _this._collection$_modifications = _this._collection$_modifications + 1 & 1073741823;
       return cell;
     },
     _computeHashCode$1: function(element) {
@@ -9359,6 +9426,16 @@
     elementAt$1: function(receiver, index) {
       return this.$index(receiver, index);
     },
+    forEach$1: function(receiver, action) {
+      var $length, i;
+      H.instanceType(receiver)._eval$1("~(ListMixin.E)")._as(action);
+      $length = this.get$length(receiver);
+      for (i = 0; i < $length; ++i) {
+        action.call$1(this.$index(receiver, i));
+        if ($length !== this.get$length(receiver))
+          throw H.wrapException(P.ConcurrentModificationError$(receiver));
+      }
+    },
     get$isNotEmpty: function(receiver) {
       return this.get$length(receiver) !== 0;
     },
@@ -9385,17 +9462,11 @@
       return this.toList$1$growable($receiver, true);
     },
     $add: function(receiver, other) {
-      var t2, cur,
-        t1 = H.instanceType(receiver);
+      var t1 = H.instanceType(receiver);
       t1._eval$1("List<ListMixin.E>")._as(other);
-      t2 = H.setRuntimeTypeInfo([], t1._eval$1("JSArray<ListMixin.E>"));
-      for (t1 = new H.ListIterator(receiver, this.get$length(receiver), t1._eval$1("ListIterator<ListMixin.E>")); t1.moveNext$0();) {
-        cur = t1._current;
-        C.JSArray_methods.add$1(t2, cur);
-      }
-      for (t1 = other.get$iterator(other); t1.moveNext$0();)
-        C.JSArray_methods.add$1(t2, t1.get$current());
-      return t2;
+      t1 = P.List_List$of(receiver, true, t1._eval$1("ListMixin.E"));
+      C.JSArray_methods.addAll$1(t1, other);
+      return t1;
     },
     toString$0: function(receiver) {
       return P.IterableBase_iterableToFullString(receiver, "[", "]");
@@ -9432,7 +9503,7 @@
       for (t1 = this.get$keys(), t1 = t1.get$iterator(t1); t1.moveNext$0();) {
         key = t1.get$current();
         entry = transform.call$2(key, this.$index(0, key));
-        result.$indexSet(0, C.JSNull_methods.get$key(entry), entry.get$value());
+        result.$indexSet(0, entry.get$key(entry), entry.get$value());
       }
       return result;
     },
@@ -9533,8 +9604,7 @@
   };
   P._ListQueueIterator.prototype = {
     get$current: function() {
-      var cur = this._collection$_current;
-      return cur;
+      return this._collection$_current;
     },
     moveNext$0: function() {
       var t2, t3, _this = this,
@@ -9558,18 +9628,18 @@
     },
     $isIterator: 1
   };
-  P._SetBase.prototype = {
+  P.SetMixin.prototype = {
     map$1: function(_, f) {
       var t1 = H._instanceType(this);
       return new H.EfficientLengthMappedIterable(this, t1._eval$1("@(1)")._as(f), t1._eval$1("EfficientLengthMappedIterable<1,@>"));
     },
     toString$0: function(_) {
       return P.IterableBase_iterableToFullString(this, "{", "}");
-    },
-    $isEfficientLengthIterable: 1,
-    $isIterable: 1
+    }
   };
+  P._SetBase.prototype = {$isEfficientLengthIterable: 1, $isIterable: 1};
   P._UnmodifiableMapView_MapView__UnmodifiableMapMixin.prototype = {};
+  P.__SetBase_Object_SetMixin.prototype = {};
   P._JsonMap.prototype = {
     $index: function(_, key) {
       var result,
@@ -9699,7 +9769,7 @@
       return this._parent.containsKey$1(key);
     }
   };
-  P.Utf8Decoder_closure.prototype = {
+  P.Utf8Decoder__decoder_closure.prototype = {
     call$0: function() {
       var t1, exception;
       try {
@@ -9712,7 +9782,7 @@
     },
     $signature: 14
   };
-  P.Utf8Decoder_closure0.prototype = {
+  P.Utf8Decoder__decoderNonfatal_closure.prototype = {
     call$0: function() {
       var t1, exception;
       try {
@@ -9932,29 +10002,30 @@
       t1._contents += "]";
     },
     writeMap$1: function(map) {
-      var keyValueList, i, t1, separator, t2, _this = this, _box_0 = {};
+      var t1, keyValueList, i, t2, separator, t3, _this = this, _box_0 = {};
       if (map.get$isEmpty(map)) {
         _this._sink._contents += "{}";
         return true;
       }
-      keyValueList = P.List_List$filled(map.get$length(map) * 2, null, false, type$.nullable_Object);
+      t1 = map.get$length(map) * 2;
+      keyValueList = P.List_List$filled(t1, null, false, type$.nullable_Object);
       i = _box_0.i = 0;
       _box_0.allStringKeys = true;
       map.forEach$1(0, new P._JsonStringifier_writeMap_closure(_box_0, keyValueList));
       if (!_box_0.allStringKeys)
         return false;
-      t1 = _this._sink;
-      t1._contents += "{";
-      for (separator = '"'; i < keyValueList.length; i += 2, separator = ',"') {
-        t1._contents += separator;
+      t2 = _this._sink;
+      t2._contents += "{";
+      for (separator = '"'; i < t1; i += 2, separator = ',"') {
+        t2._contents += separator;
         _this.writeStringContent$1(H._asStringS(keyValueList[i]));
-        t1._contents += '":';
-        t2 = i + 1;
-        if (t2 >= keyValueList.length)
-          return H.ioore(keyValueList, t2);
-        _this.writeObject$1(keyValueList[t2]);
+        t2._contents += '":';
+        t3 = i + 1;
+        if (t3 >= t1)
+          return H.ioore(keyValueList, t3);
+        _this.writeObject$1(keyValueList[t3]);
       }
-      t1._contents += "}";
+      t2._contents += "}";
       return true;
     }
   };
@@ -10134,7 +10205,6 @@
     },
     $signature: 15
   };
-  P.bool.prototype = {};
   P.DateTime.prototype = {
     $eq: function(_, other) {
       if (other == null)
@@ -10160,7 +10230,6 @@
         return y + "-" + m + "-" + d + " " + h + ":" + min + ":" + sec + "." + ms;
     }
   };
-  P.double.prototype = {};
   P.Duration.prototype = {
     $add: function(_, other) {
       return new P.Duration(C.JSInt_methods.$add(this._duration, type$.Duration._as(other).get$_duration()));
@@ -10234,6 +10303,7 @@
       return "Assertion failed";
     }
   };
+  P.TypeError.prototype = {};
   P.NullThrownError.prototype = {
     toString$0: function(_) {
       return "Throw of null.";
@@ -10379,8 +10449,6 @@
       return offset != null ? report + (" (at offset " + H.S(offset) + ")") : report;
     }
   };
-  P.Function.prototype = {};
-  P.int.prototype = {};
   P.Iterable.prototype = {
     map$1: function(_, f) {
       var t1 = H._instanceType(this);
@@ -10409,9 +10477,6 @@
     }
   };
   P.Iterator.prototype = {};
-  P.List.prototype = {$isEfficientLengthIterable: 1, $isIterable: 1};
-  P.Map.prototype = {};
-  P.MapEntry.prototype = {};
   P.Null.prototype = {
     get$hashCode: function(_) {
       return P.Object.prototype.get$hashCode.call(C.JSNull_methods, this);
@@ -10420,7 +10485,6 @@
       return "null";
     }
   };
-  P.num.prototype = {};
   P.Object.prototype = {constructor: P.Object, $isObject: 1,
     $eq: function(_, other) {
       return this === other;
@@ -10442,14 +10506,12 @@
       return this.toString$0(this);
     }
   };
-  P.StackTrace.prototype = {};
   P._StringStackTrace.prototype = {
     toString$0: function(_) {
       return "";
     },
     $isStackTrace: 1
   };
-  P.String.prototype = {$isPattern: 1};
   P.StringBuffer.prototype = {
     get$length: function(_) {
       return this._contents.length;
@@ -10460,7 +10522,6 @@
     },
     $isStringSink: 1
   };
-  P.Symbol0.prototype = {};
   W.DomException.prototype = {
     toString$0: function(receiver) {
       return String(receiver);
@@ -10489,6 +10550,9 @@
     open$3$async: function(receiver, method, url, async) {
       return receiver.open(method, url, true);
     },
+    set$withCredentials: function(receiver, value) {
+      receiver.withCredentials = true;
+    },
     $isHttpRequest: 1
   };
   W.HttpRequest_request_closure.prototype = {
@@ -10497,8 +10561,7 @@
       type$.ProgressEvent._as(e);
       t1 = this.xhr;
       t2 = t1.status;
-      if (typeof t2 !== "number")
-        return t2.$ge();
+      t2.toString;
       accepted = t2 >= 200 && t2 < 300;
       unknownRedirect = t2 > 307 && t2 < 400;
       t2 = accepted || t2 === 0 || t2 === 304 || unknownRedirect;
@@ -10508,7 +10571,7 @@
       else
         t3.completeError$1(e);
     },
-    $signature: 40
+    $signature: 42
   };
   W.HttpRequestEventTarget.prototype = {};
   W.MessageEvent.prototype = {$isMessageEvent: 1};
@@ -10529,11 +10592,11 @@
     cancel$0: function() {
       var _this = this;
       if (_this._target == null)
-        return null;
+        return $.$get$nullFuture();
       _this._unlisten$0();
       _this._target = null;
       _this.set$_onData(null);
-      return null;
+      return $.$get$nullFuture();
     },
     onData$1: function(handleData) {
       var t1, _this = this;
@@ -10625,7 +10688,7 @@
           t1 = true;
         if (t1)
           H.throwExpression(P.ArgumentError$("DateTime is outside valid range: " + millisSinceEpoch));
-        P.ArgumentError_checkNotNull(true, "isUtc", type$.bool);
+        H.checkNotNullable(true, "isUtc", type$.bool);
         return new P.DateTime(millisSinceEpoch, true);
       }
       if (e instanceof RegExp)
@@ -10679,13 +10742,19 @@
       J.$indexSet$ax(t1, key, t2);
       return t2;
     },
-    $signature: 47
+    $signature: 52
+  };
+  P._convertDartToNative_Value_closure.prototype = {
+    call$1: function(element) {
+      this.array.push(P._convertDartToNative_Value(element));
+    },
+    $signature: 1
   };
   P.convertDartToNative_Dictionary_closure.prototype = {
     call$2: function(key, value) {
-      this.object[key] = value;
+      this.object[key] = P._convertDartToNative_Value(value);
     },
-    $signature: 51
+    $signature: 58
   };
   P._AcceptStructuredCloneDart2Js.prototype = {
     forEachJsField$2: function(object, action) {
@@ -10701,30 +10770,22 @@
     call$1: function(r) {
       return this.completer.complete$1(this.T._eval$1("0/?")._as(r));
     },
-    $signature: 2
+    $signature: 1
   };
   P.promiseToFuture_closure0.prototype = {
     call$1: function(e) {
       return this.completer.completeError$1(e);
     },
-    $signature: 2
+    $signature: 1
   };
   P._JSRandom.prototype = {
-    nextDouble$0: function() {
-      return Math.random();
-    }
+    nextInt$1: function(max) {
+      if (max <= 0 || max > 4294967296)
+        throw H.wrapException(P.RangeError$("max must be in range 0 < max \u2264 2^32, was " + max));
+      return Math.random() * max >>> 0;
+    },
+    $isRandom: 1
   };
-  P.ByteBuffer.prototype = {};
-  P.ByteData.prototype = {};
-  P.Int8List.prototype = {$isEfficientLengthIterable: 1, $isIterable: 1, $isList: 1};
-  P.Uint8List.prototype = {$isEfficientLengthIterable: 1, $isIterable: 1, $isList: 1};
-  P.Uint8ClampedList.prototype = {$isEfficientLengthIterable: 1, $isIterable: 1, $isList: 1};
-  P.Int16List.prototype = {$isEfficientLengthIterable: 1, $isIterable: 1, $isList: 1};
-  P.Uint16List.prototype = {$isEfficientLengthIterable: 1, $isIterable: 1, $isList: 1};
-  P.Int32List.prototype = {$isEfficientLengthIterable: 1, $isIterable: 1, $isList: 1};
-  P.Uint32List.prototype = {$isEfficientLengthIterable: 1, $isIterable: 1, $isList: 1};
-  P.Float32List.prototype = {$isEfficientLengthIterable: 1, $isIterable: 1, $isList: 1};
-  P.Float64List.prototype = {$isEfficientLengthIterable: 1, $isIterable: 1, $isList: 1};
   V.ErrorResult.prototype = {
     complete$1: function(completer) {
       completer.completeError$2(this.error, this.stackTrace);
@@ -10739,7 +10800,6 @@
     },
     $isResult: 1
   };
-  E.Result.prototype = {};
   F.ValueResult.prototype = {
     complete$1: function(completer) {
       this.$ti._eval$1("Completer<1*>*")._as(completer).complete$1(this.value);
@@ -10853,7 +10913,7 @@
     },
     "call*": "call$2",
     $requiredArgCount: 2,
-    $signature: 56
+    $signature: 62
   };
   G.StreamQueue__ensureListening_closure0.prototype = {
     call$0: function() {
@@ -10864,9 +10924,8 @@
     },
     "call*": "call$0",
     $requiredArgCount: 0,
-    $signature: 1
+    $signature: 3
   };
-  G._EventRequest.prototype = {};
   G._NextRequest.prototype = {
     update$2: function(events, isDone) {
       var t1, t2, result;
@@ -10986,7 +11045,7 @@
   };
   L.LogRecord0.prototype = {
     toString$0: function(_) {
-      return "[" + this.level.name + "] " + this.loggerName + ": " + H.S(this.message);
+      return "[" + this.level.name + "] " + this.loggerName + ": " + this.message;
     }
   };
   F.Logger.prototype = {
@@ -11047,7 +11106,7 @@
         $parent._children.$indexSet(0, thisName, t1);
       return t1;
     },
-    $signature: 60
+    $signature: 27
   };
   M.SseClient.prototype = {
     SseClient$1: function(serverUrl) {
@@ -11118,16 +11177,14 @@
             case 0:
               // Function start
               t1 = $async$self._messages;
-              t1 = new P._ControllerStream(t1, H._instanceType(t1)._eval$1("_ControllerStream<1>"));
-              t2 = new P._StreamIterator(t1, type$._StreamIterator_dynamic);
-              P.ArgumentError_checkNotNull(t1, "stream", type$.Stream_dynamic);
+              t1 = new P._StreamIterator(H.checkNotNullable(new P._ControllerStream(t1, H._instanceType(t1)._eval$1("_ControllerStream<1>")), "stream", type$.Object), type$._StreamIterator_dynamic);
               $async$handler = 2;
-              t1 = $async$self._logger;
+              t2 = $async$self._logger;
             case 5:
               // for condition
               $async$temp1 = H;
               $async$goto = 7;
-              return P._asyncAwait(t2.moveNext$0(), $async$_startPostingMessages$0);
+              return P._asyncAwait(t1.moveNext$0(), $async$_startPostingMessages$0);
             case 7:
               // returning from await.
               if (!$async$temp1.boolConversionCheck($async$result)) {
@@ -11135,7 +11192,7 @@
                 $async$goto = 6;
                 break;
               }
-              message = t2.get$current();
+              message = t1.get$current();
               $async$handler = 9;
               $async$goto = 12;
               return P._asyncAwait(W.HttpRequest_request($async$self._serverUrl, "POST", C.C_JsonCodec.encode$2$toEncodable(message, null), true), $async$_startPostingMessages$0);
@@ -11152,10 +11209,10 @@
               t3 = H.unwrapException($async$exception);
               if (t3 instanceof P.JsonUnsupportedObjectError) {
                 e = t3;
-                t1.log$4(C.Level_WARNING_900, "Unable to encode outgoing message: " + H.S(e), null, null);
+                t2.log$4(C.Level_WARNING_900, "Unable to encode outgoing message: " + H.S(e), null, null);
               } else if (t3 instanceof P.ArgumentError) {
                 e0 = t3;
-                t1.log$4(C.Level_WARNING_900, "Invalid argument: " + H.S(e0), null, null);
+                t2.log$4(C.Level_WARNING_900, "Invalid argument: " + H.S(e0), null, null);
               } else
                 throw $async$exception;
               // goto after finally
@@ -11184,7 +11241,7 @@
               // finally
               $async$handler = 1;
               $async$goto = 13;
-              return P._asyncAwait(t2.cancel$0(), $async$_startPostingMessages$0);
+              return P._asyncAwait(t1.cancel$0(), $async$_startPostingMessages$0);
             case 13:
               // returning from await.
               // goto the next finally handler
@@ -11226,7 +11283,7 @@
         t1 = this.$this,
         t2 = t1._incomingController,
         error = this.error;
-      P.ArgumentError_checkNotNull(error, "error", type$.Object);
+      H.checkNotNullable(error, "error", type$.Object);
       if (t2._state >= 4)
         H.throwExpression(t2._badEventState$0());
       stackTrace = P.AsyncError_defaultStackTrace(error);
@@ -11237,7 +11294,7 @@
         t2._ensurePendingEvents$0().add$1(0, new P._DelayedError(error, stackTrace));
       t1.close$0(0);
     },
-    $signature: 1
+    $signature: 3
   };
   R.StreamChannelMixin.prototype = {};
   K.Uuid.prototype = {
@@ -11278,11 +11335,10 @@
       _this._clockSeq = (t1 | t2) & 262143;
     },
     v1$0: function() {
-      var t1, buf, options, clockSeq, mSecs, nSecs, dt, t2, tl, tmh, node, n, _this = this,
+      var buf, options, clockSeq, mSecs, nSecs, dt, t2, tl, tmh, node, n, _this = this,
         _s8_ = "clockSeq",
-        _s5_ = "nSecs";
-      type$.legacy_Map_of_legacy_String_and_dynamic._as(null);
-      t1 = new Array(16);
+        _s5_ = "nSecs",
+        t1 = new Array(16);
       t1.fixed$length = Array;
       buf = H.setRuntimeTypeInfo(t1, type$.JSArray_legacy_int);
       options = new H.JsLinkedHashMap(type$.JsLinkedHashMap_of_legacy_String_and_dynamic);
@@ -11314,8 +11370,8 @@
       C.JSArray_methods.$indexSet(buf, 5, tmh & 255);
       C.JSArray_methods.$indexSet(buf, 6, tmh >>> 24 & 15 | 16);
       C.JSArray_methods.$indexSet(buf, 7, tmh >>> 16 & 255);
-      t1 = J.getInterceptor$n(clockSeq);
-      C.JSArray_methods.$indexSet(buf, 8, (t1.$shr(clockSeq, 8) | 128) >>> 0);
+      t1 = J.getInterceptor$bn(clockSeq);
+      C.JSArray_methods.$indexSet(buf, 8, (J.$shr$n(t1.$and(clockSeq, 16128), 8) | 128) >>> 0);
       C.JSArray_methods.$indexSet(buf, 9, H._asIntS(t1.$and(clockSeq, 255)));
       node = options.$index(0, "node") != null ? options.$index(0, "node") : _this._nodeId;
       for (t1 = J.getInterceptor$asx(node), n = 0; n < 6; ++n)
@@ -11365,13 +11421,13 @@
     call$1: function(e) {
       return Q.createServiceObject(e, this.expectedTypes);
     },
-    $signature: 29
+    $signature: 30
   };
   Q._createSpecificObject_closure.prototype = {
     call$1: function(e) {
       return this.creator.call$1(type$.legacy_Map_of_legacy_String_and_dynamic._as(e));
     },
-    $signature: 3
+    $signature: 2
   };
   Q.VmService.prototype = {
     _getEventController$1: function(eventName) {
@@ -11565,8 +11621,7 @@
       return P._asyncStartSync($async$_processNotification$1, $async$completer);
     },
     _routeRequest$2: function(method, params) {
-      type$.legacy_Map_of_legacy_String_and_dynamic._as(params);
-      return this._routeRequest$body$VmService(method, params);
+      return this._routeRequest$body$VmService(method, type$.legacy_Map_of_legacy_String_and_dynamic._as(params));
     },
     _routeRequest$body$VmService: function(method, params) {
       var $async$goto = 0,
@@ -11696,7 +11751,7 @@
       t3.toString;
       t4 = H._arrayInstanceType(t3);
       t5 = t4._eval$1("MappedListIterable<1,Map<String*,@>*>");
-      json.addAll$1(0, P.LinkedHashMap_LinkedHashMap$_literal(["members", P.List_List$from(new H.MappedListIterable(t3, t4._eval$1("Map<String*,@>*(1)")._as(new Q.AllocationProfile_toJson_closure()), t5), true, t5._eval$1("ListIterable.E")), "memoryUsage", _this.memoryUsage.toJson$0()], t1, t2));
+      json.addAll$1(0, P.LinkedHashMap_LinkedHashMap$_literal(["members", P.List_List$of(new H.MappedListIterable(t3, t4._eval$1("Map<String*,@>*(1)")._as(new Q.AllocationProfile_toJson_closure()), t5), true, t5._eval$1("ListIterable.E")), "memoryUsage", _this.memoryUsage.toJson$0()], t1, t2));
       Q._setIfNotNull(json, "dateLastAccumulatorReset", _this.dateLastAccumulatorReset);
       Q._setIfNotNull(json, "dateLastServiceGC", _this.dateLastServiceGC);
       return json;
@@ -11712,7 +11767,7 @@
     call$1: function(f) {
       return type$.legacy_ClassHeapStats._as(f).toJson$0();
     },
-    $signature: 30
+    $signature: 31
   };
   Q.BoundField.prototype = {
     toJson$0: function() {
@@ -11795,22 +11850,22 @@
       t5.toString;
       t6 = H._arrayInstanceType(t5);
       t7 = t6._eval$1("MappedListIterable<1,Map<String*,@>*>");
-      t7 = P.List_List$from(new H.MappedListIterable(t5, t6._eval$1("Map<String*,@>*(1)")._as(new Q.Class_toJson_closure()), t7), true, t7._eval$1("ListIterable.E"));
+      t7 = P.List_List$of(new H.MappedListIterable(t5, t6._eval$1("Map<String*,@>*(1)")._as(new Q.Class_toJson_closure()), t7), true, t7._eval$1("ListIterable.E"));
       t6 = _this.fields;
       t6.toString;
       t5 = H._arrayInstanceType(t6);
       t8 = t5._eval$1("MappedListIterable<1,Map<String*,@>*>");
-      t8 = P.List_List$from(new H.MappedListIterable(t6, t5._eval$1("Map<String*,@>*(1)")._as(new Q.Class_toJson_closure0()), t8), true, t8._eval$1("ListIterable.E"));
+      t8 = P.List_List$of(new H.MappedListIterable(t6, t5._eval$1("Map<String*,@>*(1)")._as(new Q.Class_toJson_closure0()), t8), true, t8._eval$1("ListIterable.E"));
       t5 = _this.functions;
       t5.toString;
       t6 = H._arrayInstanceType(t5);
       t9 = t6._eval$1("MappedListIterable<1,Map<String*,@>*>");
-      t9 = P.List_List$from(new H.MappedListIterable(t5, t6._eval$1("Map<String*,@>*(1)")._as(new Q.Class_toJson_closure1()), t9), true, t9._eval$1("ListIterable.E"));
+      t9 = P.List_List$of(new H.MappedListIterable(t5, t6._eval$1("Map<String*,@>*(1)")._as(new Q.Class_toJson_closure1()), t9), true, t9._eval$1("ListIterable.E"));
       t6 = _this.subclasses;
       t6.toString;
       t5 = H._arrayInstanceType(t6);
       t10 = t5._eval$1("MappedListIterable<1,Map<String*,@>*>");
-      json.addAll$1(0, P.LinkedHashMap_LinkedHashMap$_literal(["name", t1, "abstract", t2, "const", t3, "library", t4, "interfaces", t7, "fields", t8, "functions", t9, "subclasses", P.List_List$from(new H.MappedListIterable(t6, t5._eval$1("Map<String*,@>*(1)")._as(new Q.Class_toJson_closure2()), t10), true, t10._eval$1("ListIterable.E"))], type$.legacy_String, type$.dynamic));
+      json.addAll$1(0, P.LinkedHashMap_LinkedHashMap$_literal(["name", t1, "abstract", t2, "const", t3, "library", t4, "interfaces", t7, "fields", t8, "functions", t9, "subclasses", P.List_List$of(new H.MappedListIterable(t6, t5._eval$1("Map<String*,@>*(1)")._as(new Q.Class_toJson_closure2()), t10), true, t10._eval$1("ListIterable.E"))], type$.legacy_String, type$.dynamic));
       t10 = _this.error;
       Q._setIfNotNull(json, "error", t10 == null ? _null : t10.toJson$0());
       t1 = _this.location;
@@ -11898,7 +11953,7 @@
       t3.toString;
       t4 = H._arrayInstanceType(t3);
       t5 = t4._eval$1("MappedListIterable<1,Map<String*,@>*>");
-      json.addAll$1(0, P.LinkedHashMap_LinkedHashMap$_literal(["classes", P.List_List$from(new H.MappedListIterable(t3, t4._eval$1("Map<String*,@>*(1)")._as(new Q.ClassList_toJson_closure()), t5), true, t5._eval$1("ListIterable.E"))], t1, t2));
+      json.addAll$1(0, P.LinkedHashMap_LinkedHashMap$_literal(["classes", P.List_List$of(new H.MappedListIterable(t3, t4._eval$1("Map<String*,@>*(1)")._as(new Q.ClassList_toJson_closure()), t5), true, t5._eval$1("ListIterable.E"))], t1, t2));
       return json;
     },
     toString$0: function(_) {
@@ -12000,7 +12055,7 @@
       t2.toString;
       t3 = H._arrayInstanceType(t2);
       t4 = t3._eval$1("MappedListIterable<1,Map<String*,@>*>");
-      json.addAll$1(0, P.LinkedHashMap_LinkedHashMap$_literal(["length", t1, "variables", P.List_List$from(new H.MappedListIterable(t2, t3._eval$1("Map<String*,@>*(1)")._as(new Q.Context_toJson_closure()), t4), true, t4._eval$1("ListIterable.E"))], type$.legacy_String, type$.dynamic));
+      json.addAll$1(0, P.LinkedHashMap_LinkedHashMap$_literal(["length", t1, "variables", P.List_List$of(new H.MappedListIterable(t2, t3._eval$1("Map<String*,@>*(1)")._as(new Q.Context_toJson_closure()), t4), true, t4._eval$1("ListIterable.E"))], type$.legacy_String, type$.dynamic));
       t4 = _this.parent;
       Q._setIfNotNull(json, "parent", t4 == null ? null : t4.toJson$0());
       return json;
@@ -12029,7 +12084,7 @@
     call$1: function(f) {
       return type$.legacy_ContextElement._as(f).toJson$0();
     },
-    $signature: 35
+    $signature: 36
   };
   Q.ContextElement.prototype = {
     toJson$0: function() {
@@ -12061,12 +12116,12 @@
       t10.toString;
       t11 = H._arrayInstanceType(t10);
       t12 = t11._eval$1("MappedListIterable<1,Map<String*,@>*>");
-      t12 = P.List_List$from(new H.MappedListIterable(t10, t11._eval$1("Map<String*,@>*(1)")._as(new Q.CpuSamples_toJson_closure()), t12), true, t12._eval$1("ListIterable.E"));
+      t12 = P.List_List$of(new H.MappedListIterable(t10, t11._eval$1("Map<String*,@>*(1)")._as(new Q.CpuSamples_toJson_closure()), t12), true, t12._eval$1("ListIterable.E"));
       t11 = _this.samples;
       t11.toString;
       t10 = H._arrayInstanceType(t11);
       t13 = t10._eval$1("MappedListIterable<1,Map<String*,@>*>");
-      json.addAll$1(0, P.LinkedHashMap_LinkedHashMap$_literal(["samplePeriod", t3, "maxStackDepth", t4, "sampleCount", t5, "timeSpan", t6, "timeOriginMicros", t7, "timeExtentMicros", t8, "pid", t9, "functions", t12, "samples", P.List_List$from(new H.MappedListIterable(t11, t10._eval$1("Map<String*,@>*(1)")._as(new Q.CpuSamples_toJson_closure0()), t13), true, t13._eval$1("ListIterable.E"))], t1, t2));
+      json.addAll$1(0, P.LinkedHashMap_LinkedHashMap$_literal(["samplePeriod", t3, "maxStackDepth", t4, "sampleCount", t5, "timeSpan", t6, "timeOriginMicros", t7, "timeExtentMicros", t8, "pid", t9, "functions", t12, "samples", P.List_List$of(new H.MappedListIterable(t11, t10._eval$1("Map<String*,@>*(1)")._as(new Q.CpuSamples_toJson_closure0()), t13), true, t13._eval$1("ListIterable.E"))], t1, t2));
       return json;
     },
     toString$0: function(_) {
@@ -12083,13 +12138,13 @@
     call$1: function(f) {
       return type$.legacy_ProfileFunction._as(f).toJson$0();
     },
-    $signature: 36
+    $signature: 37
   };
   Q.CpuSamples_toJson_closure0.prototype = {
     call$1: function(f) {
       return type$.legacy_CpuSample._as(f).toJson$0();
     },
-    $signature: 37
+    $signature: 38
   };
   Q.CpuSample.prototype = {
     toJson$0: function() {
@@ -12103,7 +12158,7 @@
       t5.toString;
       t6 = H._arrayInstanceType(t5);
       t7 = t6._eval$1("MappedListIterable<1,int*>");
-      json.addAll$1(0, P.LinkedHashMap_LinkedHashMap$_literal(["tid", t3, "timestamp", t4, "stack", P.List_List$from(new H.MappedListIterable(t5, t6._eval$1("int*(1)")._as(new Q.CpuSample_toJson_closure()), t7), true, t7._eval$1("ListIterable.E"))], t1, t2));
+      json.addAll$1(0, P.LinkedHashMap_LinkedHashMap$_literal(["tid", t3, "timestamp", t4, "stack", P.List_List$of(new H.MappedListIterable(t5, t6._eval$1("int*(1)")._as(new Q.CpuSample_toJson_closure()), t7), true, t7._eval$1("ListIterable.E"))], t1, t2));
       Q._setIfNotNull(json, "vmTag", _this.vmTag);
       Q._setIfNotNull(json, "userTag", _this.userTag);
       Q._setIfNotNull(json, "truncated", _this.truncated);
@@ -12190,7 +12245,7 @@
         t2 = new H.MappedListIterable(t1, t2._eval$1("Map<String*,@>*(1)")._as(new Q.Event_toJson_closure()), t2._eval$1("MappedListIterable<1,Map<String*,@>*>"));
         t1 = t2;
       }
-      Q._setIfNotNull(json, "pauseBreakpoints", t1 == null ? _null : P.List_List$from(t1, true, t1.$ti._eval$1("ListIterable.E")));
+      Q._setIfNotNull(json, "pauseBreakpoints", t1 == null ? _null : P.List_List$of(t1, true, t1.$ti._eval$1("ListIterable.E")));
       t1 = _this.topFrame;
       Q._setIfNotNull(json, "topFrame", t1 == null ? _null : t1.toJson$0());
       t1 = _this.exception;
@@ -12210,7 +12265,7 @@
         t2 = new H.MappedListIterable(t1, t2._eval$1("Map<String*,@>*(1)")._as(new Q.Event_toJson_closure0()), t2._eval$1("MappedListIterable<1,Map<String*,@>*>"));
         t1 = t2;
       }
-      Q._setIfNotNull(json, "timelineEvents", t1 == null ? _null : P.List_List$from(t1, true, t1.$ti._eval$1("ListIterable.E")));
+      Q._setIfNotNull(json, "timelineEvents", t1 == null ? _null : P.List_List$of(t1, true, t1.$ti._eval$1("ListIterable.E")));
       t1 = _this.updatedStreams;
       if (t1 == null)
         t1 = _null;
@@ -12219,7 +12274,7 @@
         t2 = new H.MappedListIterable(t1, t2._eval$1("String*(1)")._as(new Q.Event_toJson_closure1()), t2._eval$1("MappedListIterable<1,String*>"));
         t1 = t2;
       }
-      Q._setIfNotNull(json, "updatedStreams", t1 == null ? _null : P.List_List$from(t1, true, t1.$ti._eval$1("ListIterable.E")));
+      Q._setIfNotNull(json, "updatedStreams", t1 == null ? _null : P.List_List$of(t1, true, t1.$ti._eval$1("ListIterable.E")));
       Q._setIfNotNull(json, "atAsyncSuspension", _this.atAsyncSuspension);
       Q._setIfNotNull(json, "status", _this.status);
       t1 = _this.logRecord;
@@ -12336,7 +12391,7 @@
       t3.toString;
       t4 = H._arrayInstanceType(t3);
       t5 = t4._eval$1("MappedListIterable<1,Map<String*,@>*>");
-      json.addAll$1(0, P.LinkedHashMap_LinkedHashMap$_literal(["flags", P.List_List$from(new H.MappedListIterable(t3, t4._eval$1("Map<String*,@>*(1)")._as(new Q.FlagList_toJson_closure()), t5), true, t5._eval$1("ListIterable.E"))], t1, t2));
+      json.addAll$1(0, P.LinkedHashMap_LinkedHashMap$_literal(["flags", P.List_List$of(new H.MappedListIterable(t3, t4._eval$1("Map<String*,@>*(1)")._as(new Q.FlagList_toJson_closure()), t5), true, t5._eval$1("ListIterable.E"))], t1, t2));
       return json;
     },
     toString$0: function(_) {
@@ -12350,7 +12405,7 @@
     call$1: function(f) {
       return type$.legacy_Flag._as(f).toJson$0();
     },
-    $signature: 42
+    $signature: 43
   };
   Q.Frame.prototype = {
     toJson$0: function() {
@@ -12374,7 +12429,7 @@
         t2 = new H.MappedListIterable(t1, t2._eval$1("Map<String*,@>*(1)")._as(new Q.Frame_toJson_closure()), t2._eval$1("MappedListIterable<1,Map<String*,@>*>"));
         t1 = t2;
       }
-      Q._setIfNotNull(json, "vars", t1 == null ? _null : P.List_List$from(t1, true, t1.$ti._eval$1("ListIterable.E")));
+      Q._setIfNotNull(json, "vars", t1 == null ? _null : P.List_List$of(t1, true, t1.$ti._eval$1("ListIterable.E")));
       Q._setIfNotNull(json, "kind", _this.kind);
       return json;
     },
@@ -12390,7 +12445,7 @@
       type$.legacy_BoundVariable._as(f);
       return f == null ? null : f.toJson$0();
     },
-    $signature: 43
+    $signature: 44
   };
   Q.FuncRef.prototype = {
     toJson$0: function() {
@@ -12441,13 +12496,12 @@
   };
   Q.InstanceRef.prototype = {
     InstanceRef$_fromJson$1: function(json) {
-      var t1, t2, _this = this;
+      var t1, _this = this;
       _this.kind = H._asStringS(json.$index(0, "kind"));
       t1 = type$.legacy_ClassRef;
       _this.classRef = t1._as(Q.createServiceObject(json.$index(0, "class"), C.List_ClassRef));
       _this.set$valueAsString(H._asStringS(json.$index(0, "valueAsString")));
-      t2 = json.$index(0, "valueAsStringIsTruncated");
-      _this.valueAsStringIsTruncated = H._asBoolS(t2 == null ? false : t2);
+      _this.valueAsStringIsTruncated = H._asBoolS(json.$index(0, "valueAsStringIsTruncated"));
       _this.length = H._asIntS(json.$index(0, "length"));
       _this.name = H._asStringS(json.$index(0, "name"));
       _this.typeClass = t1._as(Q.createServiceObject(json.$index(0, "typeClass"), C.List_ClassRef));
@@ -12462,8 +12516,7 @@
       json.$indexSet(0, "type", "@Instance");
       json.addAll$1(0, P.LinkedHashMap_LinkedHashMap$_literal(["kind", _this.kind, "class", _this.classRef.toJson$0()], type$.legacy_String, type$.dynamic));
       Q._setIfNotNull(json, "valueAsString", _this.get$valueAsString());
-      t1 = _this.valueAsStringIsTruncated;
-      Q._setIfNotNull(json, "valueAsStringIsTruncated", t1 === true);
+      Q._setIfNotNull(json, "valueAsStringIsTruncated", _this.valueAsStringIsTruncated);
       Q._setIfNotNull(json, "length", _this.length);
       Q._setIfNotNull(json, "name", _this.name);
       t1 = _this.typeClass;
@@ -12502,24 +12555,23 @@
   };
   Q.Instance.prototype = {
     Instance$_fromJson$1: function(json) {
-      var t1, t2, _this = this,
+      var t1, _this = this,
         _s8_ = "elements",
         _s12_ = "associations";
       _this.kind = H._asStringS(json.$index(0, "kind"));
       t1 = type$.legacy_ClassRef;
       _this.Instance_classRef = t1._as(Q.createServiceObject(json.$index(0, "class"), C.List_ClassRef));
       _this.set$valueAsString(H._asStringS(json.$index(0, "valueAsString")));
-      t2 = json.$index(0, "valueAsStringIsTruncated");
-      _this.valueAsStringIsTruncated = H._asBoolS(t2 == null ? false : t2);
+      _this.valueAsStringIsTruncated = H._asBoolS(json.$index(0, "valueAsStringIsTruncated"));
       _this.length = H._asIntS(json.$index(0, "length"));
       _this.offset = H._asIntS(json.$index(0, "offset"));
       _this.count = H._asIntS(json.$index(0, "count"));
       _this.name = H._asStringS(json.$index(0, "name"));
       _this.typeClass = t1._as(Q.createServiceObject(json.$index(0, "typeClass"), C.List_ClassRef));
       _this.parameterizedClass = t1._as(Q.createServiceObject(json.$index(0, "parameterizedClass"), C.List_ClassRef));
-      _this.set$fields(json.$index(0, "fields") == null ? null : P.List_List$from(type$.Iterable_dynamic._as(Q.createServiceObject(json.$index(0, "fields"), C.List_BoundField)), true, type$.legacy_BoundField));
-      _this.elements = json.$index(0, _s8_) == null ? null : P.List_List$from(type$.Iterable_dynamic._as(Q.createServiceObject(json.$index(0, _s8_), C.List_dynamic)), true, type$.dynamic);
-      _this.set$associations(json.$index(0, _s12_) == null ? null : P.List_List$from(type$.Iterable_dynamic._as(Q._createSpecificObject(json.$index(0, _s12_), Q.vm_service_MapAssociation_parse$closure())), true, type$.legacy_MapAssociation));
+      _this.set$fields(json.$index(0, "fields") == null ? null : P.List_List$from(type$.Iterable_dynamic._as(Q.createServiceObject(json.$index(0, "fields"), C.List_BoundField)), type$.legacy_BoundField));
+      _this.elements = json.$index(0, _s8_) == null ? null : P.List_List$from(type$.Iterable_dynamic._as(Q.createServiceObject(json.$index(0, _s8_), C.List_dynamic)), type$.dynamic);
+      _this.set$associations(json.$index(0, _s12_) == null ? null : P.List_List$from(type$.Iterable_dynamic._as(Q._createSpecificObject(json.$index(0, _s12_), Q.vm_service_MapAssociation_parse$closure())), type$.legacy_MapAssociation));
       _this.bytes = H._asStringS(json.$index(0, "bytes"));
       t1 = type$.legacy_InstanceRef;
       _this.mirrorReferent = t1._as(Q.createServiceObject(json.$index(0, "mirrorReferent"), C.List_InstanceRef));
@@ -12541,8 +12593,7 @@
       json.$indexSet(0, "type", "Instance");
       json.addAll$1(0, P.LinkedHashMap_LinkedHashMap$_literal(["kind", _this.kind, "class", _this.Instance_classRef.toJson$0()], type$.legacy_String, type$.dynamic));
       Q._setIfNotNull(json, "valueAsString", _this.get$valueAsString());
-      t1 = _this.valueAsStringIsTruncated;
-      Q._setIfNotNull(json, "valueAsStringIsTruncated", t1 === true);
+      Q._setIfNotNull(json, "valueAsStringIsTruncated", _this.valueAsStringIsTruncated);
       Q._setIfNotNull(json, "length", _this.length);
       Q._setIfNotNull(json, "offset", _this.offset);
       Q._setIfNotNull(json, "count", _this.count);
@@ -12559,7 +12610,7 @@
         t2 = new H.MappedListIterable(t1, t2._eval$1("Map<String*,@>*(1)")._as(new Q.Instance_toJson_closure()), t2._eval$1("MappedListIterable<1,Map<String*,@>*>"));
         t1 = t2;
       }
-      Q._setIfNotNull(json, "fields", t1 == null ? _null : P.List_List$from(t1, true, t1.$ti._eval$1("ListIterable.E")));
+      Q._setIfNotNull(json, "fields", t1 == null ? _null : P.List_List$of(t1, true, t1.$ti._eval$1("ListIterable.E")));
       t1 = _this.elements;
       if (t1 == null)
         t1 = _null;
@@ -12568,7 +12619,7 @@
         t2 = new H.MappedListIterable(t1, t2._eval$1("@(1)")._as(new Q.Instance_toJson_closure0()), t2._eval$1("MappedListIterable<1,@>"));
         t1 = t2;
       }
-      Q._setIfNotNull(json, "elements", t1 == null ? _null : P.List_List$from(t1, true, t1.$ti._eval$1("ListIterable.E")));
+      Q._setIfNotNull(json, "elements", t1 == null ? _null : P.List_List$of(t1, true, t1.$ti._eval$1("ListIterable.E")));
       t1 = _this.associations;
       if (t1 == null)
         t1 = _null;
@@ -12577,7 +12628,7 @@
         t2 = new H.MappedListIterable(t1, t2._eval$1("Map<String*,@>*(1)")._as(new Q.Instance_toJson_closure1()), t2._eval$1("MappedListIterable<1,Map<String*,@>*>"));
         t1 = t2;
       }
-      Q._setIfNotNull(json, "associations", t1 == null ? _null : P.List_List$from(t1, true, t1.$ti._eval$1("ListIterable.E")));
+      Q._setIfNotNull(json, "associations", t1 == null ? _null : P.List_List$of(t1, true, t1.$ti._eval$1("ListIterable.E")));
       Q._setIfNotNull(json, "bytes", _this.bytes);
       t1 = _this.mirrorReferent;
       Q._setIfNotNull(json, "mirrorReferent", t1 == null ? _null : t1.toJson$0());
@@ -12648,14 +12699,14 @@
     call$1: function(f) {
       return f == null ? null : f.toJson$0();
     },
-    $signature: 3
+    $signature: 2
   };
   Q.Instance_toJson_closure1.prototype = {
     call$1: function(f) {
       type$.legacy_MapAssociation._as(f);
       return f == null ? null : f.toJson$0();
     },
-    $signature: 45
+    $signature: 46
   };
   Q.IsolateRef.prototype = {
     toJson$0: function() {
@@ -12701,12 +12752,12 @@
       t11.toString;
       t12 = H._arrayInstanceType(t11);
       t13 = t12._eval$1("MappedListIterable<1,Map<String*,@>*>");
-      t13 = P.List_List$from(new H.MappedListIterable(t11, t12._eval$1("Map<String*,@>*(1)")._as(new Q.Isolate_toJson_closure()), t13), true, t13._eval$1("ListIterable.E"));
+      t13 = P.List_List$of(new H.MappedListIterable(t11, t12._eval$1("Map<String*,@>*(1)")._as(new Q.Isolate_toJson_closure()), t13), true, t13._eval$1("ListIterable.E"));
       t12 = _this.breakpoints;
       t12.toString;
       t11 = H._arrayInstanceType(t12);
       t14 = t11._eval$1("MappedListIterable<1,Map<String*,@>*>");
-      json.addAll$1(0, P.LinkedHashMap_LinkedHashMap$_literal(["id", t3, "number", t4, "name", t5, "startTime", t6, "runnable", t7, "livePorts", t8, "pauseOnExit", t9, "pauseEvent", t10, "libraries", t13, "breakpoints", P.List_List$from(new H.MappedListIterable(t12, t11._eval$1("Map<String*,@>*(1)")._as(new Q.Isolate_toJson_closure0()), t14), true, t14._eval$1("ListIterable.E")), "exceptionPauseMode", _this.exceptionPauseMode], t1, t2));
+      json.addAll$1(0, P.LinkedHashMap_LinkedHashMap$_literal(["id", t3, "number", t4, "name", t5, "startTime", t6, "runnable", t7, "livePorts", t8, "pauseOnExit", t9, "pauseEvent", t10, "libraries", t13, "breakpoints", P.List_List$of(new H.MappedListIterable(t12, t11._eval$1("Map<String*,@>*(1)")._as(new Q.Isolate_toJson_closure0()), t14), true, t14._eval$1("ListIterable.E")), "exceptionPauseMode", _this.exceptionPauseMode], t1, t2));
       t2 = _this.rootLib;
       Q._setIfNotNull(json, "rootLib", t2 == null ? _null : t2.toJson$0());
       t1 = _this.error;
@@ -12719,7 +12770,7 @@
         t2 = new H.MappedListIterable(t1, t2._eval$1("String*(1)")._as(new Q.Isolate_toJson_closure1()), t2._eval$1("MappedListIterable<1,String*>"));
         t1 = t2;
       }
-      Q._setIfNotNull(json, "extensionRPCs", t1 == null ? _null : P.List_List$from(t1, true, t1.$ti._eval$1("ListIterable.E")));
+      Q._setIfNotNull(json, "extensionRPCs", t1 == null ? _null : P.List_List$of(t1, true, t1.$ti._eval$1("ListIterable.E")));
       return json;
     },
     get$hashCode: function(_) {
@@ -12751,7 +12802,7 @@
     call$1: function(f) {
       return type$.legacy_LibraryRef._as(f).toJson$0();
     },
-    $signature: 46
+    $signature: 47
   };
   Q.Isolate_toJson_closure0.prototype = {
     call$1: function(f) {
@@ -12804,7 +12855,7 @@
       t6.toString;
       t7 = H._arrayInstanceType(t6);
       t8 = t7._eval$1("MappedListIterable<1,Map<String*,@>*>");
-      json.addAll$1(0, P.LinkedHashMap_LinkedHashMap$_literal(["id", t3, "number", t4, "name", t5, "isolates", P.List_List$from(new H.MappedListIterable(t6, t7._eval$1("Map<String*,@>*(1)")._as(new Q.IsolateGroup_toJson_closure()), t8), true, t8._eval$1("ListIterable.E"))], t1, t2));
+      json.addAll$1(0, P.LinkedHashMap_LinkedHashMap$_literal(["id", t3, "number", t4, "name", t5, "isolates", P.List_List$of(new H.MappedListIterable(t6, t7._eval$1("Map<String*,@>*(1)")._as(new Q.IsolateGroup_toJson_closure()), t8), true, t8._eval$1("ListIterable.E"))], t1, t2));
       return json;
     },
     get$hashCode: function(_) {
@@ -12844,7 +12895,7 @@
       t3.toString;
       t4 = H._arrayInstanceType(t3);
       t5 = t4._eval$1("MappedListIterable<1,Map<String*,@>*>");
-      json.addAll$1(0, P.LinkedHashMap_LinkedHashMap$_literal(["references", P.List_List$from(new H.MappedListIterable(t3, t4._eval$1("Map<String*,@>*(1)")._as(new Q.InboundReferences_toJson_closure()), t5), true, t5._eval$1("ListIterable.E"))], t1, t2));
+      json.addAll$1(0, P.LinkedHashMap_LinkedHashMap$_literal(["references", P.List_List$of(new H.MappedListIterable(t3, t4._eval$1("Map<String*,@>*(1)")._as(new Q.InboundReferences_toJson_closure()), t5), true, t5._eval$1("ListIterable.E"))], t1, t2));
       return json;
     },
     toString$0: function(_) {
@@ -12858,7 +12909,7 @@
     call$1: function(f) {
       return type$.legacy_InboundReference._as(f).toJson$0();
     },
-    $signature: 48
+    $signature: 49
   };
   Q.InboundReference.prototype = {
     toJson$0: function() {
@@ -12887,7 +12938,7 @@
       t4.toString;
       t5 = H._arrayInstanceType(t4);
       t6 = t5._eval$1("MappedListIterable<1,Map<String*,@>*>");
-      json.addAll$1(0, P.LinkedHashMap_LinkedHashMap$_literal(["totalCount", t3, "instances", P.List_List$from(new H.MappedListIterable(t4, t5._eval$1("Map<String*,@>*(1)")._as(new Q.InstanceSet_toJson_closure()), t6), true, t6._eval$1("ListIterable.E"))], t1, t2));
+      json.addAll$1(0, P.LinkedHashMap_LinkedHashMap$_literal(["totalCount", t3, "instances", P.List_List$of(new H.MappedListIterable(t4, t5._eval$1("Map<String*,@>*(1)")._as(new Q.InstanceSet_toJson_closure()), t6), true, t6._eval$1("ListIterable.E"))], t1, t2));
       return json;
     },
     toString$0: function(_) {
@@ -12901,7 +12952,7 @@
     call$1: function(f) {
       return type$.legacy_ObjRef._as(f).toJson$0();
     },
-    $signature: 49
+    $signature: 50
   };
   Q.LibraryRef.prototype = {
     toJson$0: function() {
@@ -12935,27 +12986,27 @@
       t4.toString;
       t5 = H._arrayInstanceType(t4);
       t6 = t5._eval$1("MappedListIterable<1,Map<String*,@>*>");
-      t6 = P.List_List$from(new H.MappedListIterable(t4, t5._eval$1("Map<String*,@>*(1)")._as(new Q.Library_toJson_closure()), t6), true, t6._eval$1("ListIterable.E"));
+      t6 = P.List_List$of(new H.MappedListIterable(t4, t5._eval$1("Map<String*,@>*(1)")._as(new Q.Library_toJson_closure()), t6), true, t6._eval$1("ListIterable.E"));
       t5 = _this.scripts;
       t5.toString;
       t4 = H._arrayInstanceType(t5);
       t7 = t4._eval$1("MappedListIterable<1,Map<String*,@>*>");
-      t7 = P.List_List$from(new H.MappedListIterable(t5, t4._eval$1("Map<String*,@>*(1)")._as(new Q.Library_toJson_closure0()), t7), true, t7._eval$1("ListIterable.E"));
+      t7 = P.List_List$of(new H.MappedListIterable(t5, t4._eval$1("Map<String*,@>*(1)")._as(new Q.Library_toJson_closure0()), t7), true, t7._eval$1("ListIterable.E"));
       t4 = _this.variables;
       t4.toString;
       t5 = H._arrayInstanceType(t4);
       t8 = t5._eval$1("MappedListIterable<1,Map<String*,@>*>");
-      t8 = P.List_List$from(new H.MappedListIterable(t4, t5._eval$1("Map<String*,@>*(1)")._as(new Q.Library_toJson_closure1()), t8), true, t8._eval$1("ListIterable.E"));
+      t8 = P.List_List$of(new H.MappedListIterable(t4, t5._eval$1("Map<String*,@>*(1)")._as(new Q.Library_toJson_closure1()), t8), true, t8._eval$1("ListIterable.E"));
       t5 = _this.functions;
       t5.toString;
       t4 = H._arrayInstanceType(t5);
       t9 = t4._eval$1("MappedListIterable<1,Map<String*,@>*>");
-      t9 = P.List_List$from(new H.MappedListIterable(t5, t4._eval$1("Map<String*,@>*(1)")._as(new Q.Library_toJson_closure2()), t9), true, t9._eval$1("ListIterable.E"));
+      t9 = P.List_List$of(new H.MappedListIterable(t5, t4._eval$1("Map<String*,@>*(1)")._as(new Q.Library_toJson_closure2()), t9), true, t9._eval$1("ListIterable.E"));
       t4 = _this.classes;
       t4.toString;
       t5 = H._arrayInstanceType(t4);
       t10 = t5._eval$1("MappedListIterable<1,Map<String*,@>*>");
-      json.addAll$1(0, P.LinkedHashMap_LinkedHashMap$_literal(["name", t1, "uri", t2, "debuggable", t3, "dependencies", t6, "scripts", t7, "variables", t8, "functions", t9, "classes", P.List_List$from(new H.MappedListIterable(t4, t5._eval$1("Map<String*,@>*(1)")._as(new Q.Library_toJson_closure3()), t10), true, t10._eval$1("ListIterable.E"))], type$.legacy_String, type$.dynamic));
+      json.addAll$1(0, P.LinkedHashMap_LinkedHashMap$_literal(["name", t1, "uri", t2, "debuggable", t3, "dependencies", t6, "scripts", t7, "variables", t8, "functions", t9, "classes", P.List_List$of(new H.MappedListIterable(t4, t5._eval$1("Map<String*,@>*(1)")._as(new Q.Library_toJson_closure3()), t10), true, t10._eval$1("ListIterable.E"))], type$.legacy_String, type$.dynamic));
       return json;
     },
     get$hashCode: function(_) {
@@ -12990,7 +13041,7 @@
     call$1: function(f) {
       return type$.legacy_LibraryDependency._as(f).toJson$0();
     },
-    $signature: 50
+    $signature: 51
   };
   Q.Library_toJson_closure0.prototype = {
     call$1: function(f) {
@@ -13240,6 +13291,45 @@
       return "[ProfileFunction kind: " + H.S(_this.kind) + ", inclusiveTicks: " + H.S(_this.inclusiveTicks) + ", exclusiveTicks: " + H.S(_this.exclusiveTicks) + ", resolvedUrl: " + H.S(_this.resolvedUrl) + ", function: " + H.S(_this.$function) + "]";
     }
   };
+  Q.ProtocolList.prototype = {
+    toJson$0: function() {
+      var t3, t4, t5,
+        t1 = type$.legacy_String,
+        t2 = type$.dynamic,
+        json = P.LinkedHashMap_LinkedHashMap$_empty(t1, t2);
+      json.$indexSet(0, "type", "ProtocolList");
+      t3 = this.protocols;
+      t3.toString;
+      t4 = H._arrayInstanceType(t3);
+      t5 = t4._eval$1("MappedListIterable<1,Map<String*,@>*>");
+      json.addAll$1(0, P.LinkedHashMap_LinkedHashMap$_literal(["protocols", P.List_List$of(new H.MappedListIterable(t3, t4._eval$1("Map<String*,@>*(1)")._as(new Q.ProtocolList_toJson_closure()), t5), true, t5._eval$1("ListIterable.E"))], t1, t2));
+      return json;
+    },
+    toString$0: function(_) {
+      return "[ProtocolList type: " + H.S(this.type) + ", protocols: " + H.S(this.protocols) + "]";
+    },
+    set$protocols: function(protocols) {
+      this.protocols = type$.legacy_List_legacy_Protocol._as(protocols);
+    }
+  };
+  Q.ProtocolList_toJson_closure.prototype = {
+    call$1: function(f) {
+      return type$.legacy_Protocol._as(f).toJson$0();
+    },
+    $signature: 53
+  };
+  Q.Protocol.prototype = {
+    toJson$0: function() {
+      var t1 = type$.legacy_String,
+        t2 = type$.dynamic,
+        json = P.LinkedHashMap_LinkedHashMap$_empty(t1, t2);
+      json.addAll$1(0, P.LinkedHashMap_LinkedHashMap$_literal(["protocolName", this.protocolName, "major", this.major, "minor", this.minor], t1, t2));
+      return json;
+    },
+    toString$0: function(_) {
+      return "[Protocol protocolName: " + H.S(this.protocolName) + ", major: " + H.S(this.major) + ", minor: " + H.S(this.minor) + "]";
+    }
+  };
   Q.ReloadReport.prototype = {
     toJson$0: function() {
       var t1 = type$.legacy_String,
@@ -13283,7 +13373,7 @@
       t5.toString;
       t6 = H._arrayInstanceType(t5);
       t7 = t6._eval$1("MappedListIterable<1,Map<String*,@>*>");
-      json.addAll$1(0, P.LinkedHashMap_LinkedHashMap$_literal(["length", t3, "gcRootType", t4, "elements", P.List_List$from(new H.MappedListIterable(t5, t6._eval$1("Map<String*,@>*(1)")._as(new Q.RetainingPath_toJson_closure()), t7), true, t7._eval$1("ListIterable.E"))], t1, t2));
+      json.addAll$1(0, P.LinkedHashMap_LinkedHashMap$_literal(["length", t3, "gcRootType", t4, "elements", P.List_List$of(new H.MappedListIterable(t5, t6._eval$1("Map<String*,@>*(1)")._as(new Q.RetainingPath_toJson_closure()), t7), true, t7._eval$1("ListIterable.E"))], t1, t2));
       return json;
     },
     toString$0: function(_) {
@@ -13301,7 +13391,7 @@
     call$1: function(f) {
       return type$.legacy_RetainingObject._as(f).toJson$0();
     },
-    $signature: 52
+    $signature: 54
   };
   Q.Response.prototype = {
     toJson$0: function() {
@@ -13355,7 +13445,7 @@
       _this.lineOffset = H._asIntS(json.$index(0, "lineOffset"));
       _this.columnOffset = H._asIntS(json.$index(0, "columnOffset"));
       _this.source = H._asStringS(json.$index(0, "source"));
-      _this.set$tokenPosTable(json.$index(0, _s13_) == null ? null : P.List_List$from(type$.Iterable_dynamic._as(J.map$1$ax(json.$index(0, _s13_), new Q.Script$_fromJson_closure())), true, type$.legacy_List_legacy_int));
+      _this.set$tokenPosTable(json.$index(0, _s13_) == null ? null : P.List_List$from(type$.Iterable_dynamic._as(J.map$1$ax(json.$index(0, _s13_), new Q.Script$_fromJson_closure())), type$.legacy_List_legacy_int));
       _this._parseTokenPosTable$0();
     },
     _parseTokenPosTable$0: function() {
@@ -13392,7 +13482,7 @@
         t2 = new H.MappedListIterable(t1, t2._eval$1("List<int*>*(1)")._as(new Q.Script_toJson_closure()), t2._eval$1("MappedListIterable<1,List<int*>*>"));
         t1 = t2;
       }
-      Q._setIfNotNull(json, "tokenPosTable", t1 == null ? null : P.List_List$from(t1, true, t1.$ti._eval$1("ListIterable.E")));
+      Q._setIfNotNull(json, "tokenPosTable", t1 == null ? null : P.List_List$of(t1, true, t1.$ti._eval$1("ListIterable.E")));
       return json;
     },
     get$hashCode: function(_) {
@@ -13414,16 +13504,16 @@
   };
   Q.Script$_fromJson_closure.prototype = {
     call$1: function(list) {
-      return P.List_List$from(type$.Iterable_dynamic._as(list), true, type$.legacy_int);
+      return P.List_List$from(type$.Iterable_dynamic._as(list), type$.legacy_int);
     },
-    $signature: 53
+    $signature: 55
   };
   Q.Script_toJson_closure.prototype = {
     call$1: function(f) {
       type$.legacy_List_legacy_int._as(f);
       return f == null ? null : J.toList$0$ax(f);
     },
-    $signature: 54
+    $signature: 56
   };
   Q.ScriptList.prototype = {
     toJson$0: function() {
@@ -13436,7 +13526,7 @@
       t3.toString;
       t4 = H._arrayInstanceType(t3);
       t5 = t4._eval$1("MappedListIterable<1,Map<String*,@>*>");
-      json.addAll$1(0, P.LinkedHashMap_LinkedHashMap$_literal(["scripts", P.List_List$from(new H.MappedListIterable(t3, t4._eval$1("Map<String*,@>*(1)")._as(new Q.ScriptList_toJson_closure()), t5), true, t5._eval$1("ListIterable.E"))], t1, t2));
+      json.addAll$1(0, P.LinkedHashMap_LinkedHashMap$_literal(["scripts", P.List_List$of(new H.MappedListIterable(t3, t4._eval$1("Map<String*,@>*(1)")._as(new Q.ScriptList_toJson_closure()), t5), true, t5._eval$1("ListIterable.E"))], t1, t2));
       return json;
     },
     toString$0: function(_) {
@@ -13477,12 +13567,12 @@
       t3.toString;
       t4 = H._arrayInstanceType(t3);
       t5 = t4._eval$1("MappedListIterable<1,Map<String*,@>*>");
-      t5 = P.List_List$from(new H.MappedListIterable(t3, t4._eval$1("Map<String*,@>*(1)")._as(new Q.SourceReport_toJson_closure()), t5), true, t5._eval$1("ListIterable.E"));
+      t5 = P.List_List$of(new H.MappedListIterable(t3, t4._eval$1("Map<String*,@>*(1)")._as(new Q.SourceReport_toJson_closure()), t5), true, t5._eval$1("ListIterable.E"));
       t4 = this.scripts;
       t4.toString;
       t3 = H._arrayInstanceType(t4);
       t6 = t3._eval$1("MappedListIterable<1,Map<String*,@>*>");
-      json.addAll$1(0, P.LinkedHashMap_LinkedHashMap$_literal(["ranges", t5, "scripts", P.List_List$from(new H.MappedListIterable(t4, t3._eval$1("Map<String*,@>*(1)")._as(new Q.SourceReport_toJson_closure0()), t6), true, t6._eval$1("ListIterable.E"))], t1, t2));
+      json.addAll$1(0, P.LinkedHashMap_LinkedHashMap$_literal(["ranges", t5, "scripts", P.List_List$of(new H.MappedListIterable(t4, t3._eval$1("Map<String*,@>*(1)")._as(new Q.SourceReport_toJson_closure0()), t6), true, t6._eval$1("ListIterable.E"))], t1, t2));
       return json;
     },
     toString$0: function(_) {
@@ -13499,7 +13589,7 @@
     call$1: function(f) {
       return type$.legacy_SourceReportRange._as(f).toJson$0();
     },
-    $signature: 55
+    $signature: 57
   };
   Q.SourceReport_toJson_closure0.prototype = {
     call$1: function(f) {
@@ -13517,12 +13607,12 @@
       t3.toString;
       t4 = H._arrayInstanceType(t3);
       t5 = t4._eval$1("MappedListIterable<1,int*>");
-      t5 = P.List_List$from(new H.MappedListIterable(t3, t4._eval$1("int*(1)")._as(new Q.SourceReportCoverage_toJson_closure()), t5), true, t5._eval$1("ListIterable.E"));
+      t5 = P.List_List$of(new H.MappedListIterable(t3, t4._eval$1("int*(1)")._as(new Q.SourceReportCoverage_toJson_closure()), t5), true, t5._eval$1("ListIterable.E"));
       t4 = this.misses;
       t4.toString;
       t3 = H._arrayInstanceType(t4);
       t6 = t3._eval$1("MappedListIterable<1,int*>");
-      json.addAll$1(0, P.LinkedHashMap_LinkedHashMap$_literal(["hits", t5, "misses", P.List_List$from(new H.MappedListIterable(t4, t3._eval$1("int*(1)")._as(new Q.SourceReportCoverage_toJson_closure0()), t6), true, t6._eval$1("ListIterable.E"))], t1, t2));
+      json.addAll$1(0, P.LinkedHashMap_LinkedHashMap$_literal(["hits", t5, "misses", P.List_List$of(new H.MappedListIterable(t4, t3._eval$1("int*(1)")._as(new Q.SourceReportCoverage_toJson_closure0()), t6), true, t6._eval$1("ListIterable.E"))], t1, t2));
       return json;
     },
     toString$0: function(_) {
@@ -13566,7 +13656,7 @@
         t2 = new H.MappedListIterable(t1, t2._eval$1("int*(1)")._as(new Q.SourceReportRange_toJson_closure()), t2._eval$1("MappedListIterable<1,int*>"));
         t1 = t2;
       }
-      Q._setIfNotNull(json, "possibleBreakpoints", t1 == null ? _null : P.List_List$from(t1, true, t1.$ti._eval$1("ListIterable.E")));
+      Q._setIfNotNull(json, "possibleBreakpoints", t1 == null ? _null : P.List_List$of(t1, true, t1.$ti._eval$1("ListIterable.E")));
       return json;
     },
     toString$0: function(_) {
@@ -13594,12 +13684,12 @@
       t3.toString;
       t4 = H._arrayInstanceType(t3);
       t5 = t4._eval$1("MappedListIterable<1,Map<String*,@>*>");
-      t5 = P.List_List$from(new H.MappedListIterable(t3, t4._eval$1("Map<String*,@>*(1)")._as(new Q.Stack_toJson_closure()), t5), true, t5._eval$1("ListIterable.E"));
+      t5 = P.List_List$of(new H.MappedListIterable(t3, t4._eval$1("Map<String*,@>*(1)")._as(new Q.Stack_toJson_closure()), t5), true, t5._eval$1("ListIterable.E"));
       t4 = _this.messages;
       t4.toString;
       t3 = H._arrayInstanceType(t4);
       t6 = t3._eval$1("MappedListIterable<1,Map<String*,@>*>");
-      json.addAll$1(0, P.LinkedHashMap_LinkedHashMap$_literal(["frames", t5, "messages", P.List_List$from(new H.MappedListIterable(t4, t3._eval$1("Map<String*,@>*(1)")._as(new Q.Stack_toJson_closure0()), t6), true, t6._eval$1("ListIterable.E"))], t1, t2));
+      json.addAll$1(0, P.LinkedHashMap_LinkedHashMap$_literal(["frames", t5, "messages", P.List_List$of(new H.MappedListIterable(t4, t3._eval$1("Map<String*,@>*(1)")._as(new Q.Stack_toJson_closure0()), t6), true, t6._eval$1("ListIterable.E"))], t1, t2));
       t2 = _this.asyncCausalFrames;
       if (t2 == null)
         t1 = _null;
@@ -13607,7 +13697,7 @@
         t1 = H._arrayInstanceType(t2);
         t1 = new H.MappedListIterable(t2, t1._eval$1("Map<String*,@>*(1)")._as(new Q.Stack_toJson_closure1()), t1._eval$1("MappedListIterable<1,Map<String*,@>*>"));
       }
-      Q._setIfNotNull(json, "asyncCausalFrames", t1 == null ? _null : P.List_List$from(t1, true, t1.$ti._eval$1("ListIterable.E")));
+      Q._setIfNotNull(json, "asyncCausalFrames", t1 == null ? _null : P.List_List$of(t1, true, t1.$ti._eval$1("ListIterable.E")));
       t1 = _this.awaiterFrames;
       if (t1 == null)
         t1 = _null;
@@ -13616,7 +13706,7 @@
         t2 = new H.MappedListIterable(t1, t2._eval$1("Map<String*,@>*(1)")._as(new Q.Stack_toJson_closure2()), t2._eval$1("MappedListIterable<1,Map<String*,@>*>"));
         t1 = t2;
       }
-      Q._setIfNotNull(json, "awaiterFrames", t1 == null ? _null : P.List_List$from(t1, true, t1.$ti._eval$1("ListIterable.E")));
+      Q._setIfNotNull(json, "awaiterFrames", t1 == null ? _null : P.List_List$of(t1, true, t1.$ti._eval$1("ListIterable.E")));
       return json;
     },
     toString$0: function(_) {
@@ -13645,7 +13735,7 @@
     call$1: function(f) {
       return type$.legacy_Message._as(f).toJson$0();
     },
-    $signature: 57
+    $signature: 59
   };
   Q.Stack_toJson_closure1.prototype = {
     call$1: function(f) {
@@ -13682,7 +13772,7 @@
       t3.toString;
       t4 = H._arrayInstanceType(t3);
       t5 = t4._eval$1("MappedListIterable<1,Map<String*,@>*>");
-      json.addAll$1(0, P.LinkedHashMap_LinkedHashMap$_literal(["traceEvents", P.List_List$from(new H.MappedListIterable(t3, t4._eval$1("Map<String*,@>*(1)")._as(new Q.Timeline_toJson_closure()), t5), true, t5._eval$1("ListIterable.E")), "timeOriginMicros", this.timeOriginMicros, "timeExtentMicros", this.timeExtentMicros], t1, t2));
+      json.addAll$1(0, P.LinkedHashMap_LinkedHashMap$_literal(["traceEvents", P.List_List$of(new H.MappedListIterable(t3, t4._eval$1("Map<String*,@>*(1)")._as(new Q.Timeline_toJson_closure()), t5), true, t5._eval$1("ListIterable.E")), "timeOriginMicros", this.timeOriginMicros, "timeExtentMicros", this.timeExtentMicros], t1, t2));
       return json;
     },
     toString$0: function(_) {
@@ -13721,12 +13811,12 @@
       t4.toString;
       t5 = H._arrayInstanceType(t4);
       t6 = t5._eval$1("MappedListIterable<1,String*>");
-      t6 = P.List_List$from(new H.MappedListIterable(t4, t5._eval$1("String*(1)")._as(new Q.TimelineFlags_toJson_closure()), t6), true, t6._eval$1("ListIterable.E"));
+      t6 = P.List_List$of(new H.MappedListIterable(t4, t5._eval$1("String*(1)")._as(new Q.TimelineFlags_toJson_closure()), t6), true, t6._eval$1("ListIterable.E"));
       t5 = this.recordedStreams;
       t5.toString;
       t4 = H._arrayInstanceType(t5);
       t7 = t4._eval$1("MappedListIterable<1,String*>");
-      json.addAll$1(0, P.LinkedHashMap_LinkedHashMap$_literal(["recorderName", t3, "availableStreams", t6, "recordedStreams", P.List_List$from(new H.MappedListIterable(t5, t4._eval$1("String*(1)")._as(new Q.TimelineFlags_toJson_closure0()), t7), true, t7._eval$1("ListIterable.E"))], t1, t2));
+      json.addAll$1(0, P.LinkedHashMap_LinkedHashMap$_literal(["recorderName", t3, "availableStreams", t6, "recordedStreams", P.List_List$of(new H.MappedListIterable(t5, t4._eval$1("String*(1)")._as(new Q.TimelineFlags_toJson_closure0()), t7), true, t7._eval$1("ListIterable.E"))], t1, t2));
       return json;
     },
     toString$0: function(_) {
@@ -13794,7 +13884,7 @@
       t2.toString;
       t3 = H._arrayInstanceType(t2);
       t4 = t3._eval$1("MappedListIterable<1,Map<String*,@>*>");
-      json.addAll$1(0, P.LinkedHashMap_LinkedHashMap$_literal(["name", t1, "types", P.List_List$from(new H.MappedListIterable(t2, t3._eval$1("Map<String*,@>*(1)")._as(new Q.TypeArguments_toJson_closure()), t4), true, t4._eval$1("ListIterable.E"))], type$.legacy_String, type$.dynamic));
+      json.addAll$1(0, P.LinkedHashMap_LinkedHashMap$_literal(["name", t1, "types", P.List_List$of(new H.MappedListIterable(t2, t3._eval$1("Map<String*,@>*(1)")._as(new Q.TypeArguments_toJson_closure()), t4), true, t4._eval$1("ListIterable.E"))], type$.legacy_String, type$.dynamic));
       return json;
     },
     get$hashCode: function(_) {
@@ -13882,12 +13972,12 @@
       t11.toString;
       t12 = H._arrayInstanceType(t11);
       t13 = t12._eval$1("MappedListIterable<1,Map<String*,@>*>");
-      t13 = P.List_List$from(new H.MappedListIterable(t11, t12._eval$1("Map<String*,@>*(1)")._as(new Q.VM_toJson_closure()), t13), true, t13._eval$1("ListIterable.E"));
+      t13 = P.List_List$of(new H.MappedListIterable(t11, t12._eval$1("Map<String*,@>*(1)")._as(new Q.VM_toJson_closure()), t13), true, t13._eval$1("ListIterable.E"));
       t12 = _this.isolateGroups;
       t12.toString;
       t11 = H._arrayInstanceType(t12);
       t14 = t11._eval$1("MappedListIterable<1,Map<String*,@>*>");
-      json.addAll$1(0, P.LinkedHashMap_LinkedHashMap$_literal(["name", t3, "architectureBits", t4, "hostCPU", t5, "operatingSystem", t6, "targetCPU", t7, "version", t8, "pid", t9, "startTime", t10, "isolates", t13, "isolateGroups", P.List_List$from(new H.MappedListIterable(t12, t11._eval$1("Map<String*,@>*(1)")._as(new Q.VM_toJson_closure0()), t14), true, t14._eval$1("ListIterable.E"))], t1, t2));
+      json.addAll$1(0, P.LinkedHashMap_LinkedHashMap$_literal(["name", t3, "architectureBits", t4, "hostCPU", t5, "operatingSystem", t6, "targetCPU", t7, "version", t8, "pid", t9, "startTime", t10, "isolates", t13, "isolateGroups", P.List_List$of(new H.MappedListIterable(t12, t11._eval$1("Map<String*,@>*(1)")._as(new Q.VM_toJson_closure0()), t14), true, t14._eval$1("ListIterable.E"))], t1, t2));
       return json;
     },
     toString$0: function(_) {
@@ -13911,7 +14001,7 @@
     call$1: function(f) {
       return type$.legacy_IsolateGroupRef._as(f).toJson$0();
     },
-    $signature: 58
+    $signature: 60
   };
   E.main_closure.prototype = {
     call$1: function(e) {
@@ -13919,7 +14009,7 @@
       t1.add$1(0, H._instanceType(t1)._precomputed1._as(e));
       return null;
     },
-    $signature: 59
+    $signature: 61
   };
   (function aliases() {
     var _ = J.Interceptor.prototype;
@@ -13952,12 +14042,12 @@
     _static_1(P, "async__AsyncRun__scheduleImmediateWithSetImmediate$closure", "_AsyncRun__scheduleImmediateWithSetImmediate", 6);
     _static_1(P, "async__AsyncRun__scheduleImmediateWithTimer$closure", "_AsyncRun__scheduleImmediateWithTimer", 6);
     _static_0(P, "async___startMicrotaskLoop$closure", "_startMicrotaskLoop", 0);
-    _static_1(P, "async___nullDataHandler$closure", "_nullDataHandler", 2);
+    _static_1(P, "async___nullDataHandler$closure", "_nullDataHandler", 1);
     _static_2(P, "async___nullErrorHandler$closure", "_nullErrorHandler", 7);
     var _;
     _instance_0_u(_ = P._BroadcastSubscription.prototype, "get$_onPause", "_onPause$0", 0);
     _instance_0_u(_, "get$_onResume", "_onResume$0", 0);
-    _instance(P._Completer.prototype, "get$completeError", 0, 1, null, ["call$2", "call$1"], ["completeError$2", "completeError$1"], 39, 0);
+    _instance(P._Completer.prototype, "get$completeError", 0, 1, null, ["call$2", "call$1"], ["completeError$2", "completeError$1"], 48, 0);
     _instance_2_u(P._Future.prototype, "get$_completeError", "_completeError$2", 7);
     _instance_0_u(_ = P._ControllerSubscription.prototype, "get$_onPause", "_onPause$0", 0);
     _instance_0_u(_, "get$_onResume", "_onResume$0", 0);
@@ -13970,98 +14060,102 @@
     _instance_0_u(_ = P._ForwardingStreamSubscription.prototype, "get$_onPause", "_onPause$0", 0);
     _instance_0_u(_, "get$_onResume", "_onResume$0", 0);
     _instance_1_u(_, "get$_handleData", "_handleData$1", 12);
-    _instance_2_u(_, "get$_handleError", "_handleError$2", 32);
+    _instance_2_u(_, "get$_handleError", "_handleError$2", 34);
     _instance_0_u(_, "get$_handleDone", "_handleDone$0", 0);
-    _static_1(P, "convert___defaultToEncodable$closure", "_defaultToEncodable", 3);
+    _static_1(P, "convert___defaultToEncodable$closure", "_defaultToEncodable", 2);
     _instance_1_u(_ = M.SseClient.prototype, "get$_onIncomingControlMessage", "_onIncomingControlMessage$1", 18);
     _instance_1_u(_, "get$_onIncomingMessage", "_onIncomingMessage$1", 18);
     _instance_0_u(_, "get$_onOutgoingDone", "_onOutgoingDone$0", 0);
-    _instance_1_u(_, "get$_onOutgoingMessage", "_onOutgoingMessage$1", 2);
-    _static_1(Q, "vm_service_ExtensionData_parse$closure", "ExtensionData_parse", 61);
-    _static_1(Q, "vm_service_AllocationProfile_parse$closure", "AllocationProfile_parse", 62);
-    _static_1(Q, "vm_service_BoundField_parse$closure", "BoundField_parse", 63);
-    _static_1(Q, "vm_service_BoundVariable_parse$closure", "BoundVariable_parse", 64);
-    _static_1(Q, "vm_service_Breakpoint_parse$closure", "Breakpoint_parse", 65);
-    _static_1(Q, "vm_service_ClassRef_parse$closure", "ClassRef_parse", 66);
-    _static_1(Q, "vm_service_Class_parse$closure", "Class_parse", 67);
-    _static_1(Q, "vm_service_ClassHeapStats_parse$closure", "ClassHeapStats_parse", 68);
-    _static_1(Q, "vm_service_ClassList_parse$closure", "ClassList_parse", 69);
-    _static_1(Q, "vm_service_ClientName_parse$closure", "ClientName_parse", 70);
-    _static_1(Q, "vm_service_CodeRef_parse$closure", "CodeRef_parse", 71);
-    _static_1(Q, "vm_service_Code_parse$closure", "Code_parse", 72);
-    _static_1(Q, "vm_service_ContextRef_parse$closure", "ContextRef_parse", 73);
-    _static_1(Q, "vm_service_Context_parse$closure", "Context_parse", 74);
-    _static_1(Q, "vm_service_ContextElement_parse$closure", "ContextElement_parse", 75);
-    _static_1(Q, "vm_service_CpuSamples_parse$closure", "CpuSamples_parse", 76);
-    _static_1(Q, "vm_service_CpuSample_parse$closure", "CpuSample_parse", 77);
-    _static_1(Q, "vm_service_ErrorRef_parse$closure", "ErrorRef_parse", 78);
-    _static_1(Q, "vm_service_Error_parse$closure", "Error_parse", 79);
-    _static_1(Q, "vm_service_Event_parse$closure", "Event_parse", 80);
-    _static_1(Q, "vm_service_FieldRef_parse$closure", "FieldRef_parse", 81);
-    _static_1(Q, "vm_service_Field_parse$closure", "Field_parse", 82);
-    _static_1(Q, "vm_service_Flag_parse$closure", "Flag_parse", 83);
-    _static_1(Q, "vm_service_FlagList_parse$closure", "FlagList_parse", 84);
-    _static_1(Q, "vm_service_Frame_parse$closure", "Frame_parse", 85);
-    _static_1(Q, "vm_service_FuncRef_parse$closure", "FuncRef_parse", 86);
-    _static_1(Q, "vm_service_Func_parse$closure", "Func_parse", 87);
-    _static_1(Q, "vm_service_InstanceRef_parse$closure", "InstanceRef_parse", 133);
-    _static_1(Q, "vm_service_Instance_parse$closure", "Instance_parse", 89);
-    _static_1(Q, "vm_service_IsolateRef_parse$closure", "IsolateRef_parse", 90);
-    _static_1(Q, "vm_service_Isolate_parse$closure", "Isolate_parse", 91);
-    _static_1(Q, "vm_service_IsolateGroupRef_parse$closure", "IsolateGroupRef_parse", 92);
-    _static_1(Q, "vm_service_IsolateGroup_parse$closure", "IsolateGroup_parse", 93);
-    _static_1(Q, "vm_service_InboundReferences_parse$closure", "InboundReferences_parse", 94);
-    _static_1(Q, "vm_service_InboundReference_parse$closure", "InboundReference_parse", 95);
-    _static_1(Q, "vm_service_InstanceSet_parse$closure", "InstanceSet_parse", 96);
-    _static_1(Q, "vm_service_LibraryRef_parse$closure", "LibraryRef_parse", 97);
-    _static_1(Q, "vm_service_Library_parse$closure", "Library_parse", 98);
-    _static_1(Q, "vm_service_LibraryDependency_parse$closure", "LibraryDependency_parse", 99);
-    _static_1(Q, "vm_service_LogRecord_parse$closure", "LogRecord_parse", 100);
-    _static_1(Q, "vm_service_MapAssociation_parse$closure", "MapAssociation_parse", 101);
-    _static_1(Q, "vm_service_MemoryUsage_parse$closure", "MemoryUsage_parse", 102);
-    _static_1(Q, "vm_service_Message_parse$closure", "Message_parse", 103);
-    _static_1(Q, "vm_service_NativeFunction_parse$closure", "NativeFunction_parse", 104);
-    _static_1(Q, "vm_service_NullValRef_parse$closure", "NullValRef_parse", 105);
-    _static_1(Q, "vm_service_NullVal_parse$closure", "NullVal_parse", 106);
-    _static_1(Q, "vm_service_ObjRef_parse$closure", "ObjRef_parse", 107);
-    _static_1(Q, "vm_service_Obj_parse$closure", "Obj_parse", 108);
-    _static_1(Q, "vm_service_ProfileFunction_parse$closure", "ProfileFunction_parse", 109);
-    _static_1(Q, "vm_service_ReloadReport_parse$closure", "ReloadReport_parse", 110);
-    _static_1(Q, "vm_service_RetainingObject_parse$closure", "RetainingObject_parse", 111);
-    _static_1(Q, "vm_service_RetainingPath_parse$closure", "RetainingPath_parse", 112);
-    _static_1(Q, "vm_service_Response_parse$closure", "Response_parse", 113);
-    _static_1(Q, "vm_service_Sentinel_parse$closure", "Sentinel_parse", 114);
-    _static_1(Q, "vm_service_ScriptRef_parse$closure", "ScriptRef_parse", 115);
-    _static_1(Q, "vm_service_Script_parse$closure", "Script_parse", 116);
-    _static_1(Q, "vm_service_ScriptList_parse$closure", "ScriptList_parse", 117);
-    _static_1(Q, "vm_service_SourceLocation_parse$closure", "SourceLocation_parse", 118);
-    _static_1(Q, "vm_service_SourceReport_parse$closure", "SourceReport_parse", 119);
-    _static_1(Q, "vm_service_SourceReportCoverage_parse$closure", "SourceReportCoverage_parse", 120);
-    _static_1(Q, "vm_service_SourceReportRange_parse$closure", "SourceReportRange_parse", 121);
-    _static_1(Q, "vm_service_Stack_parse$closure", "Stack_parse", 122);
-    _static_1(Q, "vm_service_Success_parse$closure", "Success_parse", 123);
-    _static_1(Q, "vm_service_Timeline_parse$closure", "Timeline_parse", 124);
-    _static_1(Q, "vm_service_TimelineEvent_parse$closure", "TimelineEvent_parse", 125);
-    _static_1(Q, "vm_service_TimelineFlags_parse$closure", "TimelineFlags_parse", 126);
-    _static_1(Q, "vm_service_Timestamp_parse$closure", "Timestamp_parse", 127);
-    _static_1(Q, "vm_service_TypeArgumentsRef_parse$closure", "TypeArgumentsRef_parse", 128);
-    _static_1(Q, "vm_service_TypeArguments_parse$closure", "TypeArguments_parse", 129);
-    _static_1(Q, "vm_service_UnresolvedSourceLocation_parse$closure", "UnresolvedSourceLocation_parse", 130);
-    _static_1(Q, "vm_service_Version_parse$closure", "Version_parse", 131);
-    _static_1(Q, "vm_service_VMRef_parse$closure", "VMRef_parse", 132);
-    _static_1(Q, "vm_service_VM_parse$closure", "VM_parse", 88);
-    _instance_1_u(Q.VmService.prototype, "get$_processMessage", "_processMessage$1", 2);
+    _instance_1_u(_, "get$_onOutgoingMessage", "_onOutgoingMessage$1", 1);
+    _static_1(Q, "vm_service_ExtensionData_parse$closure", "ExtensionData_parse", 63);
+    _static_1(Q, "vm_service_AllocationProfile_parse$closure", "AllocationProfile_parse", 64);
+    _static_1(Q, "vm_service_BoundField_parse$closure", "BoundField_parse", 65);
+    _static_1(Q, "vm_service_BoundVariable_parse$closure", "BoundVariable_parse", 66);
+    _static_1(Q, "vm_service_Breakpoint_parse$closure", "Breakpoint_parse", 67);
+    _static_1(Q, "vm_service_ClassRef_parse$closure", "ClassRef_parse", 68);
+    _static_1(Q, "vm_service_Class_parse$closure", "Class_parse", 69);
+    _static_1(Q, "vm_service_ClassHeapStats_parse$closure", "ClassHeapStats_parse", 70);
+    _static_1(Q, "vm_service_ClassList_parse$closure", "ClassList_parse", 71);
+    _static_1(Q, "vm_service_ClientName_parse$closure", "ClientName_parse", 72);
+    _static_1(Q, "vm_service_CodeRef_parse$closure", "CodeRef_parse", 73);
+    _static_1(Q, "vm_service_Code_parse$closure", "Code_parse", 74);
+    _static_1(Q, "vm_service_ContextRef_parse$closure", "ContextRef_parse", 75);
+    _static_1(Q, "vm_service_Context_parse$closure", "Context_parse", 76);
+    _static_1(Q, "vm_service_ContextElement_parse$closure", "ContextElement_parse", 77);
+    _static_1(Q, "vm_service_CpuSamples_parse$closure", "CpuSamples_parse", 78);
+    _static_1(Q, "vm_service_CpuSample_parse$closure", "CpuSample_parse", 79);
+    _static_1(Q, "vm_service_ErrorRef_parse$closure", "ErrorRef_parse", 80);
+    _static_1(Q, "vm_service_Error_parse$closure", "Error_parse", 81);
+    _static_1(Q, "vm_service_Event_parse$closure", "Event_parse", 82);
+    _static_1(Q, "vm_service_FieldRef_parse$closure", "FieldRef_parse", 83);
+    _static_1(Q, "vm_service_Field_parse$closure", "Field_parse", 84);
+    _static_1(Q, "vm_service_Flag_parse$closure", "Flag_parse", 85);
+    _static_1(Q, "vm_service_FlagList_parse$closure", "FlagList_parse", 86);
+    _static_1(Q, "vm_service_Frame_parse$closure", "Frame_parse", 87);
+    _static_1(Q, "vm_service_FuncRef_parse$closure", "FuncRef_parse", 88);
+    _static_1(Q, "vm_service_Func_parse$closure", "Func_parse", 89);
+    _static_1(Q, "vm_service_InstanceRef_parse$closure", "InstanceRef_parse", 90);
+    _static_1(Q, "vm_service_Instance_parse$closure", "Instance_parse", 137);
+    _static_1(Q, "vm_service_IsolateRef_parse$closure", "IsolateRef_parse", 92);
+    _static_1(Q, "vm_service_Isolate_parse$closure", "Isolate_parse", 93);
+    _static_1(Q, "vm_service_IsolateGroupRef_parse$closure", "IsolateGroupRef_parse", 94);
+    _static_1(Q, "vm_service_IsolateGroup_parse$closure", "IsolateGroup_parse", 95);
+    _static_1(Q, "vm_service_InboundReferences_parse$closure", "InboundReferences_parse", 96);
+    _static_1(Q, "vm_service_InboundReference_parse$closure", "InboundReference_parse", 97);
+    _static_1(Q, "vm_service_InstanceSet_parse$closure", "InstanceSet_parse", 98);
+    _static_1(Q, "vm_service_LibraryRef_parse$closure", "LibraryRef_parse", 99);
+    _static_1(Q, "vm_service_Library_parse$closure", "Library_parse", 100);
+    _static_1(Q, "vm_service_LibraryDependency_parse$closure", "LibraryDependency_parse", 101);
+    _static_1(Q, "vm_service_LogRecord_parse$closure", "LogRecord_parse", 102);
+    _static_1(Q, "vm_service_MapAssociation_parse$closure", "MapAssociation_parse", 103);
+    _static_1(Q, "vm_service_MemoryUsage_parse$closure", "MemoryUsage_parse", 104);
+    _static_1(Q, "vm_service_Message_parse$closure", "Message_parse", 105);
+    _static_1(Q, "vm_service_NativeFunction_parse$closure", "NativeFunction_parse", 106);
+    _static_1(Q, "vm_service_NullValRef_parse$closure", "NullValRef_parse", 107);
+    _static_1(Q, "vm_service_NullVal_parse$closure", "NullVal_parse", 108);
+    _static_1(Q, "vm_service_ObjRef_parse$closure", "ObjRef_parse", 109);
+    _static_1(Q, "vm_service_Obj_parse$closure", "Obj_parse", 110);
+    _static_1(Q, "vm_service_ProfileFunction_parse$closure", "ProfileFunction_parse", 111);
+    _static_1(Q, "vm_service_ProtocolList_parse$closure", "ProtocolList_parse", 112);
+    _static_1(Q, "vm_service_Protocol_parse$closure", "Protocol_parse", 113);
+    _static_1(Q, "vm_service_ReloadReport_parse$closure", "ReloadReport_parse", 114);
+    _static_1(Q, "vm_service_RetainingObject_parse$closure", "RetainingObject_parse", 115);
+    _static_1(Q, "vm_service_RetainingPath_parse$closure", "RetainingPath_parse", 116);
+    _static_1(Q, "vm_service_Response_parse$closure", "Response_parse", 117);
+    _static_1(Q, "vm_service_Sentinel_parse$closure", "Sentinel_parse", 118);
+    _static_1(Q, "vm_service_ScriptRef_parse$closure", "ScriptRef_parse", 119);
+    _static_1(Q, "vm_service_Script_parse$closure", "Script_parse", 120);
+    _static_1(Q, "vm_service_ScriptList_parse$closure", "ScriptList_parse", 121);
+    _static_1(Q, "vm_service_SourceLocation_parse$closure", "SourceLocation_parse", 122);
+    _static_1(Q, "vm_service_SourceReport_parse$closure", "SourceReport_parse", 123);
+    _static_1(Q, "vm_service_SourceReportCoverage_parse$closure", "SourceReportCoverage_parse", 124);
+    _static_1(Q, "vm_service_SourceReportRange_parse$closure", "SourceReportRange_parse", 125);
+    _static_1(Q, "vm_service_Stack_parse$closure", "Stack_parse", 126);
+    _static_1(Q, "vm_service_Success_parse$closure", "Success_parse", 127);
+    _static_1(Q, "vm_service_Timeline_parse$closure", "Timeline_parse", 128);
+    _static_1(Q, "vm_service_TimelineEvent_parse$closure", "TimelineEvent_parse", 129);
+    _static_1(Q, "vm_service_TimelineFlags_parse$closure", "TimelineFlags_parse", 130);
+    _static_1(Q, "vm_service_Timestamp_parse$closure", "Timestamp_parse", 131);
+    _static_1(Q, "vm_service_TypeArgumentsRef_parse$closure", "TypeArgumentsRef_parse", 132);
+    _static_1(Q, "vm_service_TypeArguments_parse$closure", "TypeArguments_parse", 133);
+    _static_1(Q, "vm_service_UnresolvedSourceLocation_parse$closure", "UnresolvedSourceLocation_parse", 134);
+    _static_1(Q, "vm_service_Version_parse$closure", "Version_parse", 135);
+    _static_1(Q, "vm_service_VMRef_parse$closure", "VMRef_parse", 136);
+    _static_1(Q, "vm_service_VM_parse$closure", "VM_parse", 91);
+    _instance_1_u(Q.VmService.prototype, "get$_processMessage", "_processMessage$1", 1);
   })();
   (function inheritance() {
     var _mixin = hunkHelpers.mixin,
       _inherit = hunkHelpers.inherit,
       _inheritMany = hunkHelpers.inheritMany;
     _inherit(P.Object, null);
-    _inheritMany(P.Object, [H.JS_CONST, J.Interceptor, J.JSObject, J.ArrayIterator, P.Iterable, H.ListIterator, P.Iterator, H.FixedLengthListMixin, H.Symbol, P.MapView, H.ConstantMap, H.Closure, H.JSInvocationMirror, H.TypeErrorDecoder, P.Error0, H.NullThrownFromJavaScriptException, H.ExceptionAndStackTrace, H._StackTrace, H._Required, P.MapMixin, H.LinkedHashMapCell, H.LinkedHashMapKeyIterator, H.Rti, H._FunctionParameters, H._Type, P._TimerImpl, P._AsyncAwaitCompleter, P._BufferingStreamSubscription, P._BroadcastStreamController, P.Future, P.Completer, P._Completer, P._FutureListener, P._Future, P._AsyncCallbackEntry, P.Stream, P.StreamSubscription, P.StreamTransformerBase, P.StreamController, P._StreamController, P._AsyncStreamControllerDispatch, P._StreamSinkWrapper, P._DelayedEvent, P._DelayedDone, P._PendingEvents, P._DoneStreamSubscription, P._StreamIterator, P.AsyncError, P._Zone, P._SetBase, P._LinkedHashSetCell, P._LinkedHashSetIterator, P.ListMixin, P._UnmodifiableMapMixin, P._ListQueueIterator, P.Codec, P._JsonStringifier, P._Utf8Decoder, P.bool, P.DateTime, P.num, P.Duration, P.OutOfMemoryError, P.StackOverflowError, P._Exception, P.FormatException, P.Function, P.List, P.Map, P.MapEntry, P.Null, P.StackTrace, P._StringStackTrace, P.String, P.StringBuffer, P.Symbol0, W.EventStreamProvider, P._AcceptStructuredClone, P._JSRandom, P.ByteBuffer, P.ByteData, P.Int8List, P.Uint8List, P.Uint8ClampedList, P.Int16List, P.Uint16List, P.Int32List, P.Uint32List, P.Float32List, P.Float64List, V.ErrorResult, E.Result, F.ValueResult, G.StreamQueue, G._EventRequest, G._NextRequest, Q._QueueList_Object_ListMixin, Y.Level, L.LogRecord0, F.Logger, R.StreamChannelMixin, K.Uuid, Q.VmService, Q.RPCError, Q.SentinelException, Q.ExtensionData, Q._NullLog, Q.Response, Q.BoundField, Q.ContextElement, Q.CpuSample, Q.Flag, Q.InboundReference, Q.LibraryDependency, Q.MapAssociation, Q.NativeFunction, Q.ProfileFunction, Q.RetainingObject, Q.SourceReportCoverage, Q.SourceReportRange, Q.TimelineEvent]);
+    _inheritMany(P.Object, [H.JS_CONST, J.Interceptor, J.ArrayIterator, P.Error0, H.Closure, P.Iterable, H.ListIterator, P.Iterator, H.FixedLengthListMixin, H.Symbol, P.MapView, H.ConstantMap, H.JSInvocationMirror, H.TypeErrorDecoder, H.NullThrownFromJavaScriptException, H.ExceptionAndStackTrace, H._StackTrace, H._Required, P.MapMixin, H.LinkedHashMapCell, H.LinkedHashMapKeyIterator, H.Rti, H._FunctionParameters, H._Type, P._TimerImpl, P._AsyncAwaitCompleter, P._BufferingStreamSubscription, P._BroadcastStreamController, P._Completer, P._FutureListener, P._Future, P._AsyncCallbackEntry, P.Stream, P.StreamSubscription, P.StreamTransformerBase, P._StreamController, P._AsyncStreamControllerDispatch, P._StreamSinkWrapper, P._DelayedEvent, P._DelayedDone, P._PendingEvents, P._DoneStreamSubscription, P._StreamIterator, P.AsyncError, P._Zone, P.__SetBase_Object_SetMixin, P._LinkedHashSetCell, P._LinkedHashSetIterator, P.ListMixin, P._UnmodifiableMapMixin, P._ListQueueIterator, P.SetMixin, P.Codec, P._JsonStringifier, P._Utf8Decoder, P.DateTime, P.Duration, P.OutOfMemoryError, P.StackOverflowError, P._Exception, P.FormatException, P.Null, P._StringStackTrace, P.StringBuffer, W.EventStreamProvider, P._AcceptStructuredClone, P._JSRandom, V.ErrorResult, F.ValueResult, G.StreamQueue, G._NextRequest, Q._QueueList_Object_ListMixin, Y.Level, L.LogRecord0, F.Logger, R.StreamChannelMixin, K.Uuid, Q.VmService, Q.RPCError, Q.SentinelException, Q.ExtensionData, Q._NullLog, Q.Response, Q.BoundField, Q.ContextElement, Q.CpuSample, Q.Flag, Q.InboundReference, Q.LibraryDependency, Q.MapAssociation, Q.NativeFunction, Q.ProfileFunction, Q.Protocol, Q.RetainingObject, Q.SourceReportCoverage, Q.SourceReportRange, Q.TimelineEvent]);
     _inheritMany(J.Interceptor, [J.JSBool, J.JSNull, J.JavaScriptObject, J.JSArray, J.JSNumber, J.JSString, H.NativeByteBuffer, H.NativeTypedData, W.DomException, W.Event0, W.EventTarget]);
     _inheritMany(J.JavaScriptObject, [J.PlainJavaScriptObject, J.UnknownJavaScriptObject, J.JavaScriptFunction]);
     _inherit(J.JSUnmodifiableArray, J.JSArray);
     _inheritMany(J.JSNumber, [J.JSInt, J.JSDouble]);
+    _inheritMany(P.Error0, [H.LateError, H.ReachabilityError, H.NotNullableError, P.TypeError, H.JsNoSuchMethodError, H.UnknownJsTypeError, H.RuntimeError, P.AssertionError, H._Error, P.JsonUnsupportedObjectError, P.NullThrownError, P.ArgumentError, P.NoSuchMethodError, P.UnsupportedError, P.UnimplementedError, P.StateError, P.ConcurrentModificationError, P.CyclicInitializationError]);
+    _inheritMany(H.Closure, [H.nullFuture_closure, H.ConstantMap_map_closure, H.Primitives_functionNoSuchMethod_closure, H.TearOffClosure, H.JsLinkedHashMap_addAll_closure, H.initHooks_closure, H.initHooks_closure0, H.initHooks_closure1, P._AsyncRun__initializeScheduleImmediate_internalCallback, P._AsyncRun__initializeScheduleImmediate_closure, P._AsyncRun__scheduleImmediateJsOverride_internalCallback, P._AsyncRun__scheduleImmediateWithSetImmediate_internalCallback, P._TimerImpl_internalCallback, P._awaitOnObject_closure, P._awaitOnObject_closure0, P._wrapJsFunctionForAsync_closure, P._SyncBroadcastStreamController__sendData_closure, P._Future__addListener_closure, P._Future__prependListeners_closure, P._Future__chainForeignFuture_closure, P._Future__chainForeignFuture_closure0, P._Future__chainForeignFuture_closure1, P._Future__asyncCompleteWithValue_closure, P._Future__chainFuture_closure, P._Future__asyncCompleteError_closure, P._Future__propagateToListeners_handleWhenCompleteCallback, P._Future__propagateToListeners_handleWhenCompleteCallback_closure, P._Future__propagateToListeners_handleValueCallback, P._Future__propagateToListeners_handleError, P.Stream_length_closure, P.Stream_length_closure0, P.Stream_first_closure, P.Stream_first_closure0, P._StreamController__subscribe_closure, P._StreamController__recordCancel_complete, P._BufferingStreamSubscription__sendError_sendError, P._BufferingStreamSubscription__sendDone_sendDone, P._PendingEvents_schedule_closure, P._cancelAndValue_closure, P._rootHandleUncaughtError_closure, P._RootZone_bindCallback_closure, P._RootZone_bindCallbackGuarded_closure, P._RootZone_bindUnaryCallbackGuarded_closure, P.MapBase_mapToString_closure, P.Utf8Decoder__decoder_closure, P.Utf8Decoder__decoderNonfatal_closure, P._JsonStringifier_writeMap_closure, P._symbolMapToStringMap_closure, P.NoSuchMethodError_toString_closure, P.Duration_toString_sixDigits, P.Duration_toString_twoDigits, W.HttpRequest_request_closure, W._EventStreamSubscription_closure, W._EventStreamSubscription_onData_closure, P._AcceptStructuredClone_walk_closure, P._convertDartToNative_Value_closure, P.convertDartToNative_Dictionary_closure, P.promiseToFuture_closure, P.promiseToFuture_closure0, G.StreamQueue__ensureListening_closure, G.StreamQueue__ensureListening_closure1, G.StreamQueue__ensureListening_closure0, F.Logger_Logger_closure, M.SseClient_closure, M.SseClient_closure0, M.SseClient__closure, Q.createServiceObject_closure, Q._createSpecificObject_closure, Q.VmService_closure, Q.AllocationProfile_toJson_closure, Q.Class_toJson_closure, Q.Class_toJson_closure0, Q.Class_toJson_closure1, Q.Class_toJson_closure2, Q.ClassList_toJson_closure, Q.Context_toJson_closure, Q.CpuSamples_toJson_closure, Q.CpuSamples_toJson_closure0, Q.CpuSample_toJson_closure, Q.Event_toJson_closure, Q.Event_toJson_closure0, Q.Event_toJson_closure1, Q.FlagList_toJson_closure, Q.Frame_toJson_closure, Q.Instance_toJson_closure, Q.Instance_toJson_closure0, Q.Instance_toJson_closure1, Q.Isolate_toJson_closure, Q.Isolate_toJson_closure0, Q.Isolate_toJson_closure1, Q.IsolateGroup_toJson_closure, Q.InboundReferences_toJson_closure, Q.InstanceSet_toJson_closure, Q.Library_toJson_closure, Q.Library_toJson_closure0, Q.Library_toJson_closure1, Q.Library_toJson_closure2, Q.Library_toJson_closure3, Q.ProtocolList_toJson_closure, Q.RetainingPath_toJson_closure, Q.Script$_fromJson_closure, Q.Script_toJson_closure, Q.ScriptList_toJson_closure, Q.SourceReport_toJson_closure, Q.SourceReport_toJson_closure0, Q.SourceReportCoverage_toJson_closure, Q.SourceReportCoverage_toJson_closure0, Q.SourceReportRange_toJson_closure, Q.Stack_toJson_closure, Q.Stack_toJson_closure0, Q.Stack_toJson_closure1, Q.Stack_toJson_closure2, Q.Timeline_toJson_closure, Q.TimelineFlags_toJson_closure, Q.TimelineFlags_toJson_closure0, Q.TypeArguments_toJson_closure, Q.VM_toJson_closure, Q.VM_toJson_closure0, E.main_closure]);
     _inheritMany(P.Iterable, [H.EfficientLengthIterable, H.MappedIterable, H._ConstantMapKeyIterable]);
     _inheritMany(H.EfficientLengthIterable, [H.ListIterable, H.LinkedHashMapKeyIterable]);
     _inherit(H.EfficientLengthMappedIterable, H.MappedIterable);
@@ -14070,9 +14164,8 @@
     _inherit(P._UnmodifiableMapView_MapView__UnmodifiableMapMixin, P.MapView);
     _inherit(P.UnmodifiableMapView, P._UnmodifiableMapView_MapView__UnmodifiableMapMixin);
     _inherit(H.ConstantMapView, P.UnmodifiableMapView);
-    _inheritMany(H.Closure, [H.ConstantMap_map_closure, H.Primitives_functionNoSuchMethod_closure, H.TearOffClosure, H.JsLinkedHashMap_addAll_closure, H.initHooks_closure, H.initHooks_closure0, H.initHooks_closure1, P._AsyncRun__initializeScheduleImmediate_internalCallback, P._AsyncRun__initializeScheduleImmediate_closure, P._AsyncRun__scheduleImmediateJsOverride_internalCallback, P._AsyncRun__scheduleImmediateWithSetImmediate_internalCallback, P._TimerImpl_internalCallback, P._awaitOnObject_closure, P._awaitOnObject_closure0, P._wrapJsFunctionForAsync_closure, P._SyncBroadcastStreamController__sendData_closure, P._Future__addListener_closure, P._Future__prependListeners_closure, P._Future__chainForeignFuture_closure, P._Future__chainForeignFuture_closure0, P._Future__chainForeignFuture_closure1, P._Future__asyncCompleteWithValue_closure, P._Future__chainFuture_closure, P._Future__asyncCompleteError_closure, P._Future__propagateToListeners_handleWhenCompleteCallback, P._Future__propagateToListeners_handleWhenCompleteCallback_closure, P._Future__propagateToListeners_handleValueCallback, P._Future__propagateToListeners_handleError, P.Stream_length_closure, P.Stream_length_closure0, P.Stream_first_closure, P.Stream_first_closure0, P._StreamController__subscribe_closure, P._StreamController__recordCancel_complete, P._BufferingStreamSubscription__sendError_sendError, P._BufferingStreamSubscription__sendDone_sendDone, P._PendingEvents_schedule_closure, P._cancelAndValue_closure, P._rootHandleUncaughtError_closure, P._RootZone_bindCallback_closure, P._RootZone_bindCallbackGuarded_closure, P._RootZone_bindUnaryCallbackGuarded_closure, P.MapBase_mapToString_closure, P.Utf8Decoder_closure, P.Utf8Decoder_closure0, P._JsonStringifier_writeMap_closure, P._symbolMapToStringMap_closure, P.NoSuchMethodError_toString_closure, P.Duration_toString_sixDigits, P.Duration_toString_twoDigits, W.HttpRequest_request_closure, W._EventStreamSubscription_closure, W._EventStreamSubscription_onData_closure, P._AcceptStructuredClone_walk_closure, P.convertDartToNative_Dictionary_closure, P.promiseToFuture_closure, P.promiseToFuture_closure0, G.StreamQueue__ensureListening_closure, G.StreamQueue__ensureListening_closure1, G.StreamQueue__ensureListening_closure0, F.Logger_Logger_closure, M.SseClient_closure, M.SseClient_closure0, M.SseClient__closure, Q.createServiceObject_closure, Q._createSpecificObject_closure, Q.VmService_closure, Q.AllocationProfile_toJson_closure, Q.Class_toJson_closure, Q.Class_toJson_closure0, Q.Class_toJson_closure1, Q.Class_toJson_closure2, Q.ClassList_toJson_closure, Q.Context_toJson_closure, Q.CpuSamples_toJson_closure, Q.CpuSamples_toJson_closure0, Q.CpuSample_toJson_closure, Q.Event_toJson_closure, Q.Event_toJson_closure0, Q.Event_toJson_closure1, Q.FlagList_toJson_closure, Q.Frame_toJson_closure, Q.Instance_toJson_closure, Q.Instance_toJson_closure0, Q.Instance_toJson_closure1, Q.Isolate_toJson_closure, Q.Isolate_toJson_closure0, Q.Isolate_toJson_closure1, Q.IsolateGroup_toJson_closure, Q.InboundReferences_toJson_closure, Q.InstanceSet_toJson_closure, Q.Library_toJson_closure, Q.Library_toJson_closure0, Q.Library_toJson_closure1, Q.Library_toJson_closure2, Q.Library_toJson_closure3, Q.RetainingPath_toJson_closure, Q.Script$_fromJson_closure, Q.Script_toJson_closure, Q.ScriptList_toJson_closure, Q.SourceReport_toJson_closure, Q.SourceReport_toJson_closure0, Q.SourceReportCoverage_toJson_closure, Q.SourceReportCoverage_toJson_closure0, Q.SourceReportRange_toJson_closure, Q.Stack_toJson_closure, Q.Stack_toJson_closure0, Q.Stack_toJson_closure1, Q.Stack_toJson_closure2, Q.Timeline_toJson_closure, Q.TimelineFlags_toJson_closure, Q.TimelineFlags_toJson_closure0, Q.TypeArguments_toJson_closure, Q.VM_toJson_closure, Q.VM_toJson_closure0, E.main_closure]);
     _inherit(H.ConstantStringMap, H.ConstantMap);
-    _inheritMany(P.Error0, [H.NullError, H.JsNoSuchMethodError, H.UnknownJsTypeError, H.RuntimeError, P.AssertionError, H._Error, P.JsonUnsupportedObjectError, P.NullThrownError, P.ArgumentError, P.NoSuchMethodError, P.UnsupportedError, P.UnimplementedError, P.StateError, P.ConcurrentModificationError, P.CyclicInitializationError]);
+    _inherit(H.NullError, P.TypeError);
     _inheritMany(H.TearOffClosure, [H.StaticClosure, H.BoundClosure]);
     _inherit(H._AssertionError, P.AssertionError);
     _inherit(P.MapBase, P.MapMixin);
@@ -14097,13 +14190,13 @@
     _inherit(P._StreamImplEvents, P._PendingEvents);
     _inherit(P._MapStream, P._ForwardingStream);
     _inherit(P._RootZone, P._Zone);
+    _inherit(P._SetBase, P.__SetBase_Object_SetMixin);
     _inherit(P._LinkedHashSet, P._SetBase);
     _inherit(P.Converter, P.StreamTransformerBase);
     _inherit(P.JsonCyclicError, P.JsonUnsupportedObjectError);
     _inheritMany(P.Codec, [P.JsonCodec, N.HexCodec]);
     _inheritMany(P.Converter, [P.JsonEncoder, P.JsonDecoder, P.Utf8Decoder, R.HexEncoder]);
     _inherit(P._JsonStringStringifier, P._JsonStringifier);
-    _inheritMany(P.num, [P.double, P.int]);
     _inheritMany(P.ArgumentError, [P.RangeError, P.IndexError]);
     _inheritMany(W.EventTarget, [W.EventSource, W.HttpRequestEventTarget]);
     _inherit(W.HttpRequest, W.HttpRequestEventTarget);
@@ -14112,7 +14205,7 @@
     _inherit(P._AcceptStructuredCloneDart2Js, P._AcceptStructuredClone);
     _inherit(Q.QueueList, Q._QueueList_Object_ListMixin);
     _inherit(M.SseClient, R.StreamChannelMixin);
-    _inheritMany(Q.Response, [Q.AllocationProfile, Q.BoundVariable, Q.Obj, Q.ObjRef, Q.ClassHeapStats, Q.ClassList, Q.ClientName, Q.CpuSamples, Q.Event, Q.FlagList, Q.Frame, Q.IsolateRef, Q.Isolate, Q.IsolateGroupRef, Q.IsolateGroup, Q.InboundReferences, Q.InstanceSet, Q.LogRecord, Q.MemoryUsage, Q.Message, Q.ReloadReport, Q.RetainingPath, Q.Sentinel, Q.ScriptList, Q.SourceLocation, Q.SourceReport, Q.Stack, Q.Success, Q.Timeline, Q.TimelineFlags, Q.Timestamp, Q.UnresolvedSourceLocation, Q.Version, Q.VMRef, Q.VM]);
+    _inheritMany(Q.Response, [Q.AllocationProfile, Q.BoundVariable, Q.Obj, Q.ObjRef, Q.ClassHeapStats, Q.ClassList, Q.ClientName, Q.CpuSamples, Q.Event, Q.FlagList, Q.Frame, Q.IsolateRef, Q.Isolate, Q.IsolateGroupRef, Q.IsolateGroup, Q.InboundReferences, Q.InstanceSet, Q.LogRecord, Q.MemoryUsage, Q.Message, Q.ProtocolList, Q.ReloadReport, Q.RetainingPath, Q.Sentinel, Q.ScriptList, Q.SourceLocation, Q.SourceReport, Q.Stack, Q.Success, Q.Timeline, Q.TimelineFlags, Q.Timestamp, Q.UnresolvedSourceLocation, Q.Version, Q.VMRef, Q.VM]);
     _inheritMany(Q.Obj, [Q.Breakpoint, Q.Class, Q.Context, Q.Error, Q.Field, Q.Func, Q.Instance, Q.Library, Q.Script, Q.TypeArguments]);
     _inheritMany(Q.ObjRef, [Q.ClassRef, Q.CodeRef, Q.Code, Q.ContextRef, Q.ErrorRef, Q.FieldRef, Q.FuncRef, Q.InstanceRef, Q.LibraryRef, Q.ScriptRef, Q.TypeArgumentsRef]);
     _inherit(Q.NullValRef, Q.InstanceRef);
@@ -14123,6 +14216,7 @@
     _mixin(H._NativeTypedArrayOfInt_NativeTypedArray_ListMixin_FixedLengthListMixin, H.FixedLengthListMixin);
     _mixin(P._AsyncStreamController, P._AsyncStreamControllerDispatch);
     _mixin(P._UnmodifiableMapView_MapView__UnmodifiableMapMixin, P._UnmodifiableMapMixin);
+    _mixin(P.__SetBase_Object_SetMixin, P.SetMixin);
     _mixin(Q._QueueList_Object_ListMixin, P.ListMixin);
   })();
   var init = {
@@ -14131,13 +14225,16 @@
     mangledNames: {},
     getTypeFromName: getGlobalFromName,
     metadata: [],
-    types: ["~()", "Null()", "~(@)", "@(@)", "int*(int*)", "String*(String*)", "~(~())", "~(Object,StackTrace)", "Map<String*,@>*(ClassRef*)", "Map<String*,@>*(ScriptRef*)", "Map<String*,@>*(Frame*)", "Null(@)", "~(Object?)", "Null(Object?,Object?)", "@()", "Null(Symbol0,@)", "String(int)", "@(Event0)", "~(Event0*)", "Null(Event0*)", "Map<String*,@>*(InstanceRef*)", "Map<String*,@>*(FieldRef*)", "Map<String*,@>*(FuncRef*)", "Map<String*,@>*(Breakpoint*)", "Map<String*,@>*(TimelineEvent*)", "Map<String*,@>*(IsolateRef*)", "Map<String*,@>*(BoundField*)", "Null(Object,StackTrace)", "_Future<@>(@)", "Object*(@)", "Map<String*,@>*(ClassHeapStats*)", "@(@,String)", "~(@,StackTrace)", "Null(~())", "Null(@,StackTrace)", "Map<String*,@>*(ContextElement*)", "Map<String*,@>*(ProfileFunction*)", "Map<String*,@>*(CpuSample*)", "Null(int,@)", "~(Object[StackTrace?])", "Null(ProgressEvent)", "@(String)", "Map<String*,@>*(Flag*)", "Map<String*,@>*(BoundVariable*)", "Null(String,@)", "Map<String*,@>*(MapAssociation*)", "Map<String*,@>*(LibraryRef*)", "@(@,@)", "Map<String*,@>*(InboundReference*)", "Map<String*,@>*(ObjRef*)", "Map<String*,@>*(LibraryDependency*)", "Null(@,@)", "Map<String*,@>*(RetainingObject*)", "List<int*>*(@)", "List<int*>*(List<int*>*)", "Map<String*,@>*(SourceReportRange*)", "Null(@,StackTrace*)", "Map<String*,@>*(Message*)", "Map<String*,@>*(IsolateGroupRef*)", "~(String*)", "Logger*()", "ExtensionData*(Map<@,@>*)", "AllocationProfile*(Map<String*,@>*)", "BoundField*(Map<String*,@>*)", "BoundVariable*(Map<String*,@>*)", "Breakpoint*(Map<String*,@>*)", "ClassRef*(Map<String*,@>*)", "Class*(Map<String*,@>*)", "ClassHeapStats*(Map<String*,@>*)", "ClassList*(Map<String*,@>*)", "ClientName*(Map<String*,@>*)", "CodeRef*(Map<String*,@>*)", "Code*(Map<String*,@>*)", "ContextRef*(Map<String*,@>*)", "Context*(Map<String*,@>*)", "ContextElement*(Map<String*,@>*)", "CpuSamples*(Map<String*,@>*)", "CpuSample*(Map<String*,@>*)", "ErrorRef*(Map<String*,@>*)", "Error*(Map<String*,@>*)", "Event*(Map<String*,@>*)", "FieldRef*(Map<String*,@>*)", "Field*(Map<String*,@>*)", "Flag*(Map<String*,@>*)", "FlagList*(Map<String*,@>*)", "Frame*(Map<String*,@>*)", "FuncRef*(Map<String*,@>*)", "Func*(Map<String*,@>*)", "VM*(Map<String*,@>*)", "Instance*(Map<String*,@>*)", "IsolateRef*(Map<String*,@>*)", "Isolate*(Map<String*,@>*)", "IsolateGroupRef*(Map<String*,@>*)", "IsolateGroup*(Map<String*,@>*)", "InboundReferences*(Map<String*,@>*)", "InboundReference*(Map<String*,@>*)", "InstanceSet*(Map<String*,@>*)", "LibraryRef*(Map<String*,@>*)", "Library*(Map<String*,@>*)", "LibraryDependency*(Map<String*,@>*)", "LogRecord*(Map<String*,@>*)", "MapAssociation*(Map<String*,@>*)", "MemoryUsage*(Map<String*,@>*)", "Message*(Map<String*,@>*)", "NativeFunction*(Map<String*,@>*)", "NullValRef*(Map<String*,@>*)", "NullVal*(Map<String*,@>*)", "ObjRef*(Map<String*,@>*)", "Obj*(Map<String*,@>*)", "ProfileFunction*(Map<String*,@>*)", "ReloadReport*(Map<String*,@>*)", "RetainingObject*(Map<String*,@>*)", "RetainingPath*(Map<String*,@>*)", "Response*(Map<String*,@>*)", "Sentinel*(Map<String*,@>*)", "ScriptRef*(Map<String*,@>*)", "Script*(Map<String*,@>*)", "ScriptList*(Map<String*,@>*)", "SourceLocation*(Map<String*,@>*)", "SourceReport*(Map<String*,@>*)", "SourceReportCoverage*(Map<String*,@>*)", "SourceReportRange*(Map<String*,@>*)", "Stack*(Map<String*,@>*)", "Success*(Map<String*,@>*)", "Timeline*(Map<String*,@>*)", "TimelineEvent*(Map<String*,@>*)", "TimelineFlags*(Map<String*,@>*)", "Timestamp*(Map<String*,@>*)", "TypeArgumentsRef*(Map<String*,@>*)", "TypeArguments*(Map<String*,@>*)", "UnresolvedSourceLocation*(Map<String*,@>*)", "Version*(Map<String*,@>*)", "VMRef*(Map<String*,@>*)", "InstanceRef*(Map<String*,@>*)"],
+    types: ["~()", "~(@)", "@(@)", "Null()", "int*(int*)", "String*(String*)", "~(~())", "~(Object,StackTrace)", "Map<String*,@>*(ClassRef*)", "Map<String*,@>*(ScriptRef*)", "Map<String*,@>*(Frame*)", "Null(@)", "~(Object?)", "~(Object?,Object?)", "@()", "~(Symbol0,@)", "String(int)", "~(Event0)", "~(Event0*)", "Null(Event0*)", "Map<String*,@>*(InstanceRef*)", "Map<String*,@>*(FieldRef*)", "Map<String*,@>*(FuncRef*)", "Map<String*,@>*(Breakpoint*)", "Map<String*,@>*(TimelineEvent*)", "Map<String*,@>*(IsolateRef*)", "Map<String*,@>*(BoundField*)", "Logger*()", "Null(~())", "Null(Object,StackTrace)", "Object*(@)", "Map<String*,@>*(ClassHeapStats*)", "_Future<@>(@)", "@(@,String)", "~(@,StackTrace)", "@(String)", "Map<String*,@>*(ContextElement*)", "Map<String*,@>*(ProfileFunction*)", "Map<String*,@>*(CpuSample*)", "~(String,@)", "Null(@,StackTrace)", "~(int,@)", "~(ProgressEvent)", "Map<String*,@>*(Flag*)", "Map<String*,@>*(BoundVariable*)", "Future<Null>()", "Map<String*,@>*(MapAssociation*)", "Map<String*,@>*(LibraryRef*)", "~(Object[StackTrace?])", "Map<String*,@>*(InboundReference*)", "Map<String*,@>*(ObjRef*)", "Map<String*,@>*(LibraryDependency*)", "@(@,@)", "Map<String*,@>*(Protocol*)", "Map<String*,@>*(RetainingObject*)", "List<int*>*(@)", "List<int*>*(List<int*>*)", "Map<String*,@>*(SourceReportRange*)", "~(@,@)", "Map<String*,@>*(Message*)", "Map<String*,@>*(IsolateGroupRef*)", "~(String*)", "Null(@,StackTrace*)", "ExtensionData*(Map<@,@>*)", "AllocationProfile*(Map<String*,@>*)", "BoundField*(Map<String*,@>*)", "BoundVariable*(Map<String*,@>*)", "Breakpoint*(Map<String*,@>*)", "ClassRef*(Map<String*,@>*)", "Class*(Map<String*,@>*)", "ClassHeapStats*(Map<String*,@>*)", "ClassList*(Map<String*,@>*)", "ClientName*(Map<String*,@>*)", "CodeRef*(Map<String*,@>*)", "Code*(Map<String*,@>*)", "ContextRef*(Map<String*,@>*)", "Context*(Map<String*,@>*)", "ContextElement*(Map<String*,@>*)", "CpuSamples*(Map<String*,@>*)", "CpuSample*(Map<String*,@>*)", "ErrorRef*(Map<String*,@>*)", "Error*(Map<String*,@>*)", "Event*(Map<String*,@>*)", "FieldRef*(Map<String*,@>*)", "Field*(Map<String*,@>*)", "Flag*(Map<String*,@>*)", "FlagList*(Map<String*,@>*)", "Frame*(Map<String*,@>*)", "FuncRef*(Map<String*,@>*)", "Func*(Map<String*,@>*)", "InstanceRef*(Map<String*,@>*)", "VM*(Map<String*,@>*)", "IsolateRef*(Map<String*,@>*)", "Isolate*(Map<String*,@>*)", "IsolateGroupRef*(Map<String*,@>*)", "IsolateGroup*(Map<String*,@>*)", "InboundReferences*(Map<String*,@>*)", "InboundReference*(Map<String*,@>*)", "InstanceSet*(Map<String*,@>*)", "LibraryRef*(Map<String*,@>*)", "Library*(Map<String*,@>*)", "LibraryDependency*(Map<String*,@>*)", "LogRecord*(Map<String*,@>*)", "MapAssociation*(Map<String*,@>*)", "MemoryUsage*(Map<String*,@>*)", "Message*(Map<String*,@>*)", "NativeFunction*(Map<String*,@>*)", "NullValRef*(Map<String*,@>*)", "NullVal*(Map<String*,@>*)", "ObjRef*(Map<String*,@>*)", "Obj*(Map<String*,@>*)", "ProfileFunction*(Map<String*,@>*)", "ProtocolList*(Map<String*,@>*)", "Protocol*(Map<String*,@>*)", "ReloadReport*(Map<String*,@>*)", "RetainingObject*(Map<String*,@>*)", "RetainingPath*(Map<String*,@>*)", "Response*(Map<String*,@>*)", "Sentinel*(Map<String*,@>*)", "ScriptRef*(Map<String*,@>*)", "Script*(Map<String*,@>*)", "ScriptList*(Map<String*,@>*)", "SourceLocation*(Map<String*,@>*)", "SourceReport*(Map<String*,@>*)", "SourceReportCoverage*(Map<String*,@>*)", "SourceReportRange*(Map<String*,@>*)", "Stack*(Map<String*,@>*)", "Success*(Map<String*,@>*)", "Timeline*(Map<String*,@>*)", "TimelineEvent*(Map<String*,@>*)", "TimelineFlags*(Map<String*,@>*)", "Timestamp*(Map<String*,@>*)", "TypeArgumentsRef*(Map<String*,@>*)", "TypeArguments*(Map<String*,@>*)", "UnresolvedSourceLocation*(Map<String*,@>*)", "Version*(Map<String*,@>*)", "VMRef*(Map<String*,@>*)", "Instance*(Map<String*,@>*)"],
     interceptorsByTag: null,
     leafTags: null,
     arrayRti: typeof Symbol == "function" && typeof Symbol() == "symbol" ? Symbol("$ti") : "$ti"
   };
-  H._Universe_addRules(init.typeUniverse, JSON.parse('{"JavaScriptFunction":"JavaScriptObject","PlainJavaScriptObject":"JavaScriptObject","UnknownJavaScriptObject":"JavaScriptObject","AbortPaymentEvent":"Event0","ExtendableEvent":"Event0","_ResourceProgressEvent":"ProgressEvent","MessagePort":"EventTarget","JSBool":{"bool":[]},"JSNull":{"Null":[]},"JavaScriptObject":{"Function":[]},"JSArray":{"List":["1"],"EfficientLengthIterable":["1"],"Iterable":["1"],"JSIndexable":["1"]},"JSUnmodifiableArray":{"JSArray":["1"],"List":["1"],"EfficientLengthIterable":["1"],"Iterable":["1"],"JSIndexable":["1"]},"ArrayIterator":{"Iterator":["1"]},"JSNumber":{"double":[],"num":[]},"JSInt":{"double":[],"int":[],"num":[]},"JSDouble":{"double":[],"num":[]},"JSString":{"String":[],"Pattern":[],"JSIndexable":["@"]},"EfficientLengthIterable":{"Iterable":["1"]},"ListIterable":{"EfficientLengthIterable":["1"],"Iterable":["1"]},"ListIterator":{"Iterator":["1"]},"MappedIterable":{"Iterable":["2"],"Iterable.E":"2"},"EfficientLengthMappedIterable":{"MappedIterable":["1","2"],"EfficientLengthIterable":["2"],"Iterable":["2"],"Iterable.E":"2"},"MappedIterator":{"Iterator":["2"]},"MappedListIterable":{"ListIterable":["2"],"EfficientLengthIterable":["2"],"Iterable":["2"],"ListIterable.E":"2","Iterable.E":"2"},"Symbol":{"Symbol0":[]},"ConstantMapView":{"UnmodifiableMapView":["1","2"],"_UnmodifiableMapView_MapView__UnmodifiableMapMixin":["1","2"],"MapView":["1","2"],"_UnmodifiableMapMixin":["1","2"],"Map":["1","2"]},"ConstantMap":{"Map":["1","2"]},"ConstantStringMap":{"ConstantMap":["1","2"],"Map":["1","2"]},"_ConstantMapKeyIterable":{"Iterable":["1"],"Iterable.E":"1"},"JSInvocationMirror":{"Invocation":[]},"NullError":{"Error0":[]},"JsNoSuchMethodError":{"Error0":[]},"UnknownJsTypeError":{"Error0":[]},"_StackTrace":{"StackTrace":[]},"Closure":{"Function":[]},"TearOffClosure":{"Function":[]},"StaticClosure":{"Function":[]},"BoundClosure":{"Function":[]},"RuntimeError":{"Error0":[]},"_AssertionError":{"Error0":[]},"JsLinkedHashMap":{"MapMixin":["1","2"],"LinkedHashMap":["1","2"],"Map":["1","2"],"MapMixin.K":"1","MapMixin.V":"2"},"LinkedHashMapKeyIterable":{"EfficientLengthIterable":["1"],"Iterable":["1"],"Iterable.E":"1"},"LinkedHashMapKeyIterator":{"Iterator":["1"]},"NativeByteData":{"ByteData":[]},"NativeTypedArray":{"JavaScriptIndexingBehavior":["1"],"JSIndexable":["1"]},"NativeTypedArrayOfDouble":{"ListMixin":["double"],"JavaScriptIndexingBehavior":["double"],"List":["double"],"EfficientLengthIterable":["double"],"JSIndexable":["double"],"Iterable":["double"],"FixedLengthListMixin":["double"]},"NativeTypedArrayOfInt":{"ListMixin":["int"],"JavaScriptIndexingBehavior":["int"],"List":["int"],"EfficientLengthIterable":["int"],"JSIndexable":["int"],"Iterable":["int"],"FixedLengthListMixin":["int"]},"NativeFloat32List":{"ListMixin":["double"],"JavaScriptIndexingBehavior":["double"],"List":["double"],"EfficientLengthIterable":["double"],"JSIndexable":["double"],"Iterable":["double"],"FixedLengthListMixin":["double"],"ListMixin.E":"double"},"NativeFloat64List":{"ListMixin":["double"],"JavaScriptIndexingBehavior":["double"],"List":["double"],"EfficientLengthIterable":["double"],"JSIndexable":["double"],"Iterable":["double"],"FixedLengthListMixin":["double"],"ListMixin.E":"double"},"NativeInt16List":{"ListMixin":["int"],"JavaScriptIndexingBehavior":["int"],"List":["int"],"EfficientLengthIterable":["int"],"JSIndexable":["int"],"Iterable":["int"],"FixedLengthListMixin":["int"],"ListMixin.E":"int"},"NativeInt32List":{"ListMixin":["int"],"JavaScriptIndexingBehavior":["int"],"List":["int"],"EfficientLengthIterable":["int"],"JSIndexable":["int"],"Iterable":["int"],"FixedLengthListMixin":["int"],"ListMixin.E":"int"},"NativeInt8List":{"ListMixin":["int"],"JavaScriptIndexingBehavior":["int"],"List":["int"],"EfficientLengthIterable":["int"],"JSIndexable":["int"],"Iterable":["int"],"FixedLengthListMixin":["int"],"ListMixin.E":"int"},"NativeUint16List":{"ListMixin":["int"],"JavaScriptIndexingBehavior":["int"],"List":["int"],"EfficientLengthIterable":["int"],"JSIndexable":["int"],"Iterable":["int"],"FixedLengthListMixin":["int"],"ListMixin.E":"int"},"NativeUint32List":{"ListMixin":["int"],"JavaScriptIndexingBehavior":["int"],"List":["int"],"EfficientLengthIterable":["int"],"JSIndexable":["int"],"Iterable":["int"],"FixedLengthListMixin":["int"],"ListMixin.E":"int"},"NativeUint8ClampedList":{"ListMixin":["int"],"JavaScriptIndexingBehavior":["int"],"List":["int"],"EfficientLengthIterable":["int"],"JSIndexable":["int"],"Iterable":["int"],"FixedLengthListMixin":["int"],"ListMixin.E":"int"},"NativeUint8List":{"ListMixin":["int"],"Uint8List":[],"JavaScriptIndexingBehavior":["int"],"List":["int"],"EfficientLengthIterable":["int"],"JSIndexable":["int"],"Iterable":["int"],"FixedLengthListMixin":["int"],"ListMixin.E":"int"},"_Error":{"Error0":[]},"_TypeError":{"Error0":[]},"_TimerImpl":{"Timer":[]},"_AsyncAwaitCompleter":{"Completer":["1"]},"_BroadcastSubscription":{"_ControllerSubscription":["1"],"_BufferingStreamSubscription":["1"],"StreamSubscription":["1"],"_EventSink":["1"],"_EventDispatch":["1"],"_BufferingStreamSubscription.T":"1"},"_BroadcastStreamController":{"StreamController":["1"],"_StreamControllerLifecycle":["1"],"_EventSink":["1"],"_EventDispatch":["1"]},"_SyncBroadcastStreamController":{"_BroadcastStreamController":["1"],"StreamController":["1"],"_StreamControllerLifecycle":["1"],"_EventSink":["1"],"_EventDispatch":["1"]},"_AsyncBroadcastStreamController":{"_BroadcastStreamController":["1"],"StreamController":["1"],"_StreamControllerLifecycle":["1"],"_EventSink":["1"],"_EventDispatch":["1"]},"_Completer":{"Completer":["1"]},"_AsyncCompleter":{"_Completer":["1"],"Completer":["1"]},"_Future":{"Future":["1"]},"_StreamController":{"StreamController":["1"],"_StreamControllerLifecycle":["1"],"_EventSink":["1"],"_EventDispatch":["1"]},"_AsyncStreamController":{"_AsyncStreamControllerDispatch":["1"],"_StreamController":["1"],"StreamController":["1"],"_StreamControllerLifecycle":["1"],"_EventSink":["1"],"_EventDispatch":["1"]},"_ControllerStream":{"_StreamImpl":["1"],"Stream":["1"],"Stream.T":"1"},"_ControllerSubscription":{"_BufferingStreamSubscription":["1"],"StreamSubscription":["1"],"_EventSink":["1"],"_EventDispatch":["1"],"_BufferingStreamSubscription.T":"1"},"_BufferingStreamSubscription":{"StreamSubscription":["1"],"_EventSink":["1"],"_EventDispatch":["1"],"_BufferingStreamSubscription.T":"1"},"_StreamImpl":{"Stream":["1"]},"_DelayedData":{"_DelayedEvent":["1"]},"_DelayedError":{"_DelayedEvent":["@"]},"_DelayedDone":{"_DelayedEvent":["@"]},"_StreamImplEvents":{"_PendingEvents":["1"]},"_DoneStreamSubscription":{"StreamSubscription":["1"]},"_ForwardingStream":{"Stream":["2"]},"_ForwardingStreamSubscription":{"_BufferingStreamSubscription":["2"],"StreamSubscription":["2"],"_EventSink":["2"],"_EventDispatch":["2"],"_BufferingStreamSubscription.T":"2"},"_MapStream":{"_ForwardingStream":["1","2"],"Stream":["2"],"Stream.T":"2"},"AsyncError":{"Error0":[]},"_Zone":{"Zone":[]},"_RootZone":{"_Zone":[],"Zone":[]},"_LinkedHashSet":{"_SetBase":["1"],"EfficientLengthIterable":["1"],"Iterable":["1"]},"_LinkedHashSetIterator":{"Iterator":["1"]},"MapBase":{"MapMixin":["1","2"],"Map":["1","2"]},"MapMixin":{"Map":["1","2"]},"MapView":{"Map":["1","2"]},"UnmodifiableMapView":{"_UnmodifiableMapView_MapView__UnmodifiableMapMixin":["1","2"],"MapView":["1","2"],"_UnmodifiableMapMixin":["1","2"],"Map":["1","2"]},"ListQueue":{"ListIterable":["1"],"Queue":["1"],"EfficientLengthIterable":["1"],"Iterable":["1"],"ListIterable.E":"1","Iterable.E":"1"},"_ListQueueIterator":{"Iterator":["1"]},"_SetBase":{"EfficientLengthIterable":["1"],"Iterable":["1"]},"_JsonMap":{"MapMixin":["String","@"],"Map":["String","@"],"MapMixin.K":"String","MapMixin.V":"@"},"_JsonMapKeyIterable":{"ListIterable":["String"],"EfficientLengthIterable":["String"],"Iterable":["String"],"ListIterable.E":"String","Iterable.E":"String"},"JsonUnsupportedObjectError":{"Error0":[]},"JsonCyclicError":{"Error0":[]},"JsonCodec":{"Codec":["Object?","String"],"Codec.S":"Object?"},"JsonEncoder":{"Converter":["Object?","String"]},"JsonDecoder":{"Converter":["String","Object?"]},"Utf8Decoder":{"Converter":["List<int>","String"]},"double":{"num":[]},"AssertionError":{"Error0":[]},"NullThrownError":{"Error0":[]},"ArgumentError":{"Error0":[]},"RangeError":{"Error0":[]},"IndexError":{"Error0":[]},"NoSuchMethodError":{"Error0":[]},"UnsupportedError":{"Error0":[]},"UnimplementedError":{"Error0":[]},"StateError":{"Error0":[]},"ConcurrentModificationError":{"Error0":[]},"OutOfMemoryError":{"Error0":[]},"StackOverflowError":{"Error0":[]},"CyclicInitializationError":{"Error0":[]},"int":{"num":[]},"List":{"EfficientLengthIterable":["1"],"Iterable":["1"]},"_StringStackTrace":{"StackTrace":[]},"String":{"Pattern":[]},"StringBuffer":{"StringSink":[]},"EventSource":{"EventTarget":[]},"HttpRequest":{"EventTarget":[]},"HttpRequestEventTarget":{"EventTarget":[]},"MessageEvent":{"Event0":[]},"ProgressEvent":{"Event0":[]},"_EventStream":{"Stream":["1"],"Stream.T":"1"},"_EventStreamSubscription":{"StreamSubscription":["1"]},"Int8List":{"List":["int"],"EfficientLengthIterable":["int"],"Iterable":["int"]},"Uint8List":{"List":["int"],"EfficientLengthIterable":["int"],"Iterable":["int"]},"Uint8ClampedList":{"List":["int"],"EfficientLengthIterable":["int"],"Iterable":["int"]},"Int16List":{"List":["int"],"EfficientLengthIterable":["int"],"Iterable":["int"]},"Uint16List":{"List":["int"],"EfficientLengthIterable":["int"],"Iterable":["int"]},"Int32List":{"List":["int"],"EfficientLengthIterable":["int"],"Iterable":["int"]},"Uint32List":{"List":["int"],"EfficientLengthIterable":["int"],"Iterable":["int"]},"Float32List":{"List":["double"],"EfficientLengthIterable":["double"],"Iterable":["double"]},"Float64List":{"List":["double"],"EfficientLengthIterable":["double"],"Iterable":["double"]},"ErrorResult":{"Result":["Null"]},"ValueResult":{"Result":["1*"]},"_NextRequest":{"_EventRequest":["1*"]},"QueueList":{"ListMixin":["1*"],"List":["1*"],"Queue":["1*"],"EfficientLengthIterable":["1*"],"Iterable":["1*"],"ListMixin.E":"1*"},"HexCodec":{"Codec":["List<int*>*","String*"],"Codec.S":"List<int*>*"},"HexEncoder":{"Converter":["List<int*>*","String*"]},"_NullLog":{"Log":[]},"Breakpoint":{"ObjRef":[]},"ClassRef":{"ObjRef":[]},"Class":{"ClassRef":[],"ObjRef":[]},"CodeRef":{"ObjRef":[]},"Code":{"CodeRef":[],"ObjRef":[]},"ContextRef":{"ObjRef":[]},"Context":{"ContextRef":[],"ObjRef":[]},"ErrorRef":{"ObjRef":[]},"Error":{"ErrorRef":[],"ObjRef":[]},"FieldRef":{"ObjRef":[]},"Field":{"FieldRef":[],"ObjRef":[]},"FuncRef":{"ObjRef":[]},"Func":{"FuncRef":[],"ObjRef":[]},"InstanceRef":{"ObjRef":[]},"Instance":{"InstanceRef":[],"ObjRef":[]},"Isolate":{"IsolateRef":[]},"IsolateGroup":{"IsolateGroupRef":[]},"LibraryRef":{"ObjRef":[]},"Library":{"LibraryRef":[],"ObjRef":[]},"NullValRef":{"InstanceRef":[],"ObjRef":[]},"NullVal":{"NullValRef":[],"InstanceRef":[],"ObjRef":[]},"Obj":{"ObjRef":[]},"ScriptRef":{"ObjRef":[]},"Script":{"ScriptRef":[],"ObjRef":[]},"TypeArgumentsRef":{"ObjRef":[]},"TypeArguments":{"TypeArgumentsRef":[],"ObjRef":[]},"VM":{"VMRef":[]}}'));
-  H._Universe_addErasedTypes(init.typeUniverse, JSON.parse('{"EfficientLengthIterable":1,"NativeTypedArray":1,"StreamTransformerBase":2,"MapBase":2,"MapEntry":2,"_QueueList_Object_ListMixin":1,"StreamChannelMixin":1}'));
+  H._Universe_addRules(init.typeUniverse, JSON.parse('{"JavaScriptFunction":"JavaScriptObject","PlainJavaScriptObject":"JavaScriptObject","UnknownJavaScriptObject":"JavaScriptObject","AbortPaymentEvent":"Event0","ExtendableEvent":"Event0","_ResourceProgressEvent":"ProgressEvent","MessagePort":"EventTarget","JSBool":{"bool":[]},"JSNull":{"Null":[]},"JavaScriptObject":{"Function":[]},"JSArray":{"List":["1"],"EfficientLengthIterable":["1"],"Iterable":["1"],"JSIndexable":["1"]},"JSUnmodifiableArray":{"JSArray":["1"],"List":["1"],"EfficientLengthIterable":["1"],"Iterable":["1"],"JSIndexable":["1"]},"ArrayIterator":{"Iterator":["1"]},"JSNumber":{"double":[],"num":[]},"JSInt":{"double":[],"int":[],"num":[]},"JSDouble":{"double":[],"num":[]},"JSString":{"String":[],"Pattern":[],"JSIndexable":["@"]},"LateError":{"Error0":[]},"ReachabilityError":{"Error0":[]},"NotNullableError":{"Error0":[]},"EfficientLengthIterable":{"Iterable":["1"]},"ListIterable":{"EfficientLengthIterable":["1"],"Iterable":["1"]},"ListIterator":{"Iterator":["1"]},"MappedIterable":{"Iterable":["2"],"Iterable.E":"2"},"EfficientLengthMappedIterable":{"MappedIterable":["1","2"],"EfficientLengthIterable":["2"],"Iterable":["2"],"Iterable.E":"2"},"MappedIterator":{"Iterator":["2"]},"MappedListIterable":{"ListIterable":["2"],"EfficientLengthIterable":["2"],"Iterable":["2"],"ListIterable.E":"2","Iterable.E":"2"},"Symbol":{"Symbol0":[]},"ConstantMapView":{"UnmodifiableMapView":["1","2"],"_UnmodifiableMapView_MapView__UnmodifiableMapMixin":["1","2"],"MapView":["1","2"],"_UnmodifiableMapMixin":["1","2"],"Map":["1","2"]},"ConstantMap":{"Map":["1","2"]},"ConstantStringMap":{"ConstantMap":["1","2"],"Map":["1","2"]},"_ConstantMapKeyIterable":{"Iterable":["1"],"Iterable.E":"1"},"JSInvocationMirror":{"Invocation":[]},"NullError":{"Error0":[]},"JsNoSuchMethodError":{"Error0":[]},"UnknownJsTypeError":{"Error0":[]},"_StackTrace":{"StackTrace":[]},"Closure":{"Function":[]},"TearOffClosure":{"Function":[]},"StaticClosure":{"Function":[]},"BoundClosure":{"Function":[]},"RuntimeError":{"Error0":[]},"_AssertionError":{"Error0":[]},"JsLinkedHashMap":{"MapMixin":["1","2"],"LinkedHashMap":["1","2"],"Map":["1","2"],"MapMixin.K":"1","MapMixin.V":"2"},"LinkedHashMapKeyIterable":{"EfficientLengthIterable":["1"],"Iterable":["1"],"Iterable.E":"1"},"LinkedHashMapKeyIterator":{"Iterator":["1"]},"NativeByteData":{"ByteData":[]},"NativeTypedArray":{"JavaScriptIndexingBehavior":["1"],"JSIndexable":["1"]},"NativeTypedArrayOfDouble":{"ListMixin":["double"],"JavaScriptIndexingBehavior":["double"],"List":["double"],"EfficientLengthIterable":["double"],"JSIndexable":["double"],"Iterable":["double"],"FixedLengthListMixin":["double"]},"NativeTypedArrayOfInt":{"ListMixin":["int"],"JavaScriptIndexingBehavior":["int"],"List":["int"],"EfficientLengthIterable":["int"],"JSIndexable":["int"],"Iterable":["int"],"FixedLengthListMixin":["int"]},"NativeFloat32List":{"ListMixin":["double"],"JavaScriptIndexingBehavior":["double"],"List":["double"],"EfficientLengthIterable":["double"],"JSIndexable":["double"],"Iterable":["double"],"FixedLengthListMixin":["double"],"ListMixin.E":"double"},"NativeFloat64List":{"ListMixin":["double"],"JavaScriptIndexingBehavior":["double"],"List":["double"],"EfficientLengthIterable":["double"],"JSIndexable":["double"],"Iterable":["double"],"FixedLengthListMixin":["double"],"ListMixin.E":"double"},"NativeInt16List":{"ListMixin":["int"],"JavaScriptIndexingBehavior":["int"],"List":["int"],"EfficientLengthIterable":["int"],"JSIndexable":["int"],"Iterable":["int"],"FixedLengthListMixin":["int"],"ListMixin.E":"int"},"NativeInt32List":{"ListMixin":["int"],"JavaScriptIndexingBehavior":["int"],"List":["int"],"EfficientLengthIterable":["int"],"JSIndexable":["int"],"Iterable":["int"],"FixedLengthListMixin":["int"],"ListMixin.E":"int"},"NativeInt8List":{"ListMixin":["int"],"JavaScriptIndexingBehavior":["int"],"List":["int"],"EfficientLengthIterable":["int"],"JSIndexable":["int"],"Iterable":["int"],"FixedLengthListMixin":["int"],"ListMixin.E":"int"},"NativeUint16List":{"ListMixin":["int"],"JavaScriptIndexingBehavior":["int"],"List":["int"],"EfficientLengthIterable":["int"],"JSIndexable":["int"],"Iterable":["int"],"FixedLengthListMixin":["int"],"ListMixin.E":"int"},"NativeUint32List":{"ListMixin":["int"],"JavaScriptIndexingBehavior":["int"],"List":["int"],"EfficientLengthIterable":["int"],"JSIndexable":["int"],"Iterable":["int"],"FixedLengthListMixin":["int"],"ListMixin.E":"int"},"NativeUint8ClampedList":{"ListMixin":["int"],"JavaScriptIndexingBehavior":["int"],"List":["int"],"EfficientLengthIterable":["int"],"JSIndexable":["int"],"Iterable":["int"],"FixedLengthListMixin":["int"],"ListMixin.E":"int"},"NativeUint8List":{"ListMixin":["int"],"Uint8List":[],"JavaScriptIndexingBehavior":["int"],"List":["int"],"EfficientLengthIterable":["int"],"JSIndexable":["int"],"Iterable":["int"],"FixedLengthListMixin":["int"],"ListMixin.E":"int"},"_Error":{"Error0":[]},"_TypeError":{"Error0":[]},"_TimerImpl":{"Timer":[]},"_AsyncAwaitCompleter":{"Completer":["1"]},"_BroadcastSubscription":{"_ControllerSubscription":["1"],"_BufferingStreamSubscription":["1"],"StreamSubscription":["1"],"_EventSink":["1"],"_EventDispatch":["1"],"_BufferingStreamSubscription.T":"1"},"_BroadcastStreamController":{"StreamController":["1"],"_StreamControllerLifecycle":["1"],"_EventSink":["1"],"_EventDispatch":["1"]},"_SyncBroadcastStreamController":{"_BroadcastStreamController":["1"],"StreamController":["1"],"_StreamControllerLifecycle":["1"],"_EventSink":["1"],"_EventDispatch":["1"]},"_AsyncBroadcastStreamController":{"_BroadcastStreamController":["1"],"StreamController":["1"],"_StreamControllerLifecycle":["1"],"_EventSink":["1"],"_EventDispatch":["1"]},"_Completer":{"Completer":["1"]},"_AsyncCompleter":{"_Completer":["1"],"Completer":["1"]},"_Future":{"Future":["1"]},"_StreamController":{"StreamController":["1"],"_StreamControllerLifecycle":["1"],"_EventSink":["1"],"_EventDispatch":["1"]},"_AsyncStreamController":{"_AsyncStreamControllerDispatch":["1"],"_StreamController":["1"],"StreamController":["1"],"_StreamControllerLifecycle":["1"],"_EventSink":["1"],"_EventDispatch":["1"]},"_ControllerStream":{"_StreamImpl":["1"],"Stream":["1"],"Stream.T":"1"},"_ControllerSubscription":{"_BufferingStreamSubscription":["1"],"StreamSubscription":["1"],"_EventSink":["1"],"_EventDispatch":["1"],"_BufferingStreamSubscription.T":"1"},"_BufferingStreamSubscription":{"StreamSubscription":["1"],"_EventSink":["1"],"_EventDispatch":["1"],"_BufferingStreamSubscription.T":"1"},"_StreamImpl":{"Stream":["1"]},"_DelayedData":{"_DelayedEvent":["1"]},"_DelayedError":{"_DelayedEvent":["@"]},"_DelayedDone":{"_DelayedEvent":["@"]},"_StreamImplEvents":{"_PendingEvents":["1"]},"_DoneStreamSubscription":{"StreamSubscription":["1"]},"_ForwardingStream":{"Stream":["2"]},"_ForwardingStreamSubscription":{"_BufferingStreamSubscription":["2"],"StreamSubscription":["2"],"_EventSink":["2"],"_EventDispatch":["2"],"_BufferingStreamSubscription.T":"2"},"_MapStream":{"_ForwardingStream":["1","2"],"Stream":["2"],"Stream.T":"2"},"AsyncError":{"Error0":[]},"_Zone":{"Zone":[]},"_RootZone":{"_Zone":[],"Zone":[]},"_LinkedHashSet":{"SetMixin":["1"],"EfficientLengthIterable":["1"],"Iterable":["1"]},"_LinkedHashSetIterator":{"Iterator":["1"]},"MapBase":{"MapMixin":["1","2"],"Map":["1","2"]},"MapMixin":{"Map":["1","2"]},"MapView":{"Map":["1","2"]},"UnmodifiableMapView":{"_UnmodifiableMapView_MapView__UnmodifiableMapMixin":["1","2"],"MapView":["1","2"],"_UnmodifiableMapMixin":["1","2"],"Map":["1","2"]},"ListQueue":{"ListIterable":["1"],"Queue":["1"],"EfficientLengthIterable":["1"],"Iterable":["1"],"ListIterable.E":"1","Iterable.E":"1"},"_ListQueueIterator":{"Iterator":["1"]},"_SetBase":{"SetMixin":["1"],"EfficientLengthIterable":["1"],"Iterable":["1"]},"_JsonMap":{"MapMixin":["String","@"],"Map":["String","@"],"MapMixin.K":"String","MapMixin.V":"@"},"_JsonMapKeyIterable":{"ListIterable":["String"],"EfficientLengthIterable":["String"],"Iterable":["String"],"ListIterable.E":"String","Iterable.E":"String"},"JsonUnsupportedObjectError":{"Error0":[]},"JsonCyclicError":{"Error0":[]},"JsonCodec":{"Codec":["Object?","String"],"Codec.S":"Object?"},"JsonEncoder":{"Converter":["Object?","String"]},"JsonDecoder":{"Converter":["String","Object?"]},"Utf8Decoder":{"Converter":["List<int>","String"]},"double":{"num":[]},"int":{"num":[]},"List":{"EfficientLengthIterable":["1"],"Iterable":["1"]},"String":{"Pattern":[]},"AssertionError":{"Error0":[]},"TypeError":{"Error0":[]},"NullThrownError":{"Error0":[]},"ArgumentError":{"Error0":[]},"RangeError":{"Error0":[]},"IndexError":{"Error0":[]},"NoSuchMethodError":{"Error0":[]},"UnsupportedError":{"Error0":[]},"UnimplementedError":{"Error0":[]},"StateError":{"Error0":[]},"ConcurrentModificationError":{"Error0":[]},"OutOfMemoryError":{"Error0":[]},"StackOverflowError":{"Error0":[]},"CyclicInitializationError":{"Error0":[]},"_StringStackTrace":{"StackTrace":[]},"StringBuffer":{"StringSink":[]},"EventSource":{"EventTarget":[]},"HttpRequest":{"EventTarget":[]},"HttpRequestEventTarget":{"EventTarget":[]},"MessageEvent":{"Event0":[]},"ProgressEvent":{"Event0":[]},"_EventStream":{"Stream":["1"],"Stream.T":"1"},"_EventStreamSubscription":{"StreamSubscription":["1"]},"_JSRandom":{"Random":[]},"ErrorResult":{"Result":["Null"]},"ValueResult":{"Result":["1*"]},"_NextRequest":{"_EventRequest":["1*"]},"QueueList":{"ListMixin":["1*"],"List":["1*"],"Queue":["1*"],"EfficientLengthIterable":["1*"],"Iterable":["1*"],"ListMixin.E":"1*"},"HexCodec":{"Codec":["List<int*>*","String*"],"Codec.S":"List<int*>*"},"HexEncoder":{"Converter":["List<int*>*","String*"]},"_NullLog":{"Log":[]},"Breakpoint":{"ObjRef":[]},"ClassRef":{"ObjRef":[]},"Class":{"ClassRef":[],"ObjRef":[]},"CodeRef":{"ObjRef":[]},"Code":{"CodeRef":[],"ObjRef":[]},"ContextRef":{"ObjRef":[]},"Context":{"ContextRef":[],"ObjRef":[]},"ErrorRef":{"ObjRef":[]},"Error":{"ErrorRef":[],"ObjRef":[]},"FieldRef":{"ObjRef":[]},"Field":{"FieldRef":[],"ObjRef":[]},"FuncRef":{"ObjRef":[]},"Func":{"FuncRef":[],"ObjRef":[]},"InstanceRef":{"ObjRef":[]},"Instance":{"InstanceRef":[],"ObjRef":[]},"Isolate":{"IsolateRef":[]},"IsolateGroup":{"IsolateGroupRef":[]},"LibraryRef":{"ObjRef":[]},"Library":{"LibraryRef":[],"ObjRef":[]},"NullValRef":{"InstanceRef":[],"ObjRef":[]},"NullVal":{"NullValRef":[],"InstanceRef":[],"ObjRef":[]},"Obj":{"ObjRef":[]},"ScriptRef":{"ObjRef":[]},"Script":{"ScriptRef":[],"ObjRef":[]},"TypeArgumentsRef":{"ObjRef":[]},"TypeArguments":{"TypeArgumentsRef":[],"ObjRef":[]},"VM":{"VMRef":[]},"Int8List":{"List":["int"],"EfficientLengthIterable":["int"],"Iterable":["int"]},"Uint8List":{"List":["int"],"EfficientLengthIterable":["int"],"Iterable":["int"]},"Uint8ClampedList":{"List":["int"],"EfficientLengthIterable":["int"],"Iterable":["int"]},"Int16List":{"List":["int"],"EfficientLengthIterable":["int"],"Iterable":["int"]},"Uint16List":{"List":["int"],"EfficientLengthIterable":["int"],"Iterable":["int"]},"Int32List":{"List":["int"],"EfficientLengthIterable":["int"],"Iterable":["int"]},"Uint32List":{"List":["int"],"EfficientLengthIterable":["int"],"Iterable":["int"]},"Float32List":{"List":["double"],"EfficientLengthIterable":["double"],"Iterable":["double"]},"Float64List":{"List":["double"],"EfficientLengthIterable":["double"],"Iterable":["double"]}}'));
+  H._Universe_addErasedTypes(init.typeUniverse, JSON.parse('{"EfficientLengthIterable":1,"NativeTypedArray":1,"StreamTransformerBase":2,"MapBase":2,"_SetBase":1,"__SetBase_Object_SetMixin":1,"MapEntry":2,"_QueueList_Object_ListMixin":1,"StreamChannelMixin":1}'));
+  var string$ = {
+    Cannot: "Cannot fire new event. Controller is already firing an event"
+  };
   var type$ = (function rtii() {
     var findType = H.findType;
     return {
@@ -14156,7 +14253,6 @@
       Iterable_dynamic: findType("Iterable<@>"),
       JSArray_String: findType("JSArray<String>"),
       JSArray_dynamic: findType("JSArray<@>"),
-      JSArray_int: findType("JSArray<int>"),
       JSArray_legacy_Result_legacy_String: findType("JSArray<Result<String*>*>"),
       JSArray_legacy_String: findType("JSArray<String*>"),
       JSArray_legacy_int: findType("JSArray<int*>"),
@@ -14178,7 +14274,6 @@
       QueueList_legacy_Result_legacy_String: findType("QueueList<Result<String*>*>"),
       StackTrace: findType("StackTrace"),
       StreamQueue_legacy_String: findType("StreamQueue<String*>"),
-      Stream_dynamic: findType("Stream<@>"),
       String: findType("String"),
       Symbol: findType("Symbol0"),
       UnknownJavaScriptObject: findType("UnknownJavaScriptObject"),
@@ -14187,6 +14282,7 @@
       _AsyncCompleter_legacy_Version: findType("_AsyncCompleter<Version*>"),
       _EventStream_legacy_Event: findType("_EventStream<Event0*>"),
       _Future_HttpRequest: findType("_Future<HttpRequest>"),
+      _Future_Null: findType("_Future<Null>"),
       _Future_bool: findType("_Future<bool>"),
       _Future_dynamic: findType("_Future<@>"),
       _Future_int: findType("_Future<int>"),
@@ -14253,6 +14349,7 @@
       legacy_List_legacy_Message: findType("List<Message*>*"),
       legacy_List_legacy_ObjRef: findType("List<ObjRef*>*"),
       legacy_List_legacy_ProfileFunction: findType("List<ProfileFunction*>*"),
+      legacy_List_legacy_Protocol: findType("List<Protocol*>*"),
       legacy_List_legacy_RetainingObject: findType("List<RetainingObject*>*"),
       legacy_List_legacy_ScriptRef: findType("List<ScriptRef*>*"),
       legacy_List_legacy_SourceReportRange: findType("List<SourceReportRange*>*"),
@@ -14275,6 +14372,7 @@
       legacy_Object: findType("Object*"),
       legacy_ProfileFunction: findType("ProfileFunction*"),
       legacy_ProgressEvent: findType("ProgressEvent*"),
+      legacy_Protocol: findType("Protocol*"),
       legacy_RetainingObject: findType("RetainingObject*"),
       legacy_ScriptRef: findType("ScriptRef*"),
       legacy_SourceLocation: findType("SourceLocation*"),
@@ -14501,6 +14599,8 @@
     C.List_ObjRef = H.setRuntimeTypeInfo(makeConstList(["ObjRef"]), type$.JSArray_legacy_String);
     C.List_PAk = H.setRuntimeTypeInfo(makeConstList(["InstanceRef", "TypeArgumentsRef", "Sentinel"]), type$.JSArray_legacy_String);
     C.List_ProfileFunction = H.setRuntimeTypeInfo(makeConstList(["ProfileFunction"]), type$.JSArray_legacy_String);
+    C.List_Protocol = H.setRuntimeTypeInfo(makeConstList(["Protocol"]), type$.JSArray_legacy_String);
+    C.List_ProtocolList = H.setRuntimeTypeInfo(makeConstList(["ProtocolList"]), type$.JSArray_legacy_String);
     C.List_ReloadReport = H.setRuntimeTypeInfo(makeConstList(["ReloadReport"]), type$.JSArray_legacy_String);
     C.List_RetainingObject = H.setRuntimeTypeInfo(makeConstList(["RetainingObject"]), type$.JSArray_legacy_String);
     C.List_RetainingPath = H.setRuntimeTypeInfo(makeConstList(["RetainingPath"]), type$.JSArray_legacy_String);
@@ -14565,32 +14665,37 @@
     $._toStringVisiting = H.setRuntimeTypeInfo([], H.findType("JSArray<Object>"));
     $.LogRecord__nextNumber = 0;
     $.Logger__loggers = P.LinkedHashMap_LinkedHashMap$_empty(type$.legacy_String, type$.legacy_Logger);
-    $._typeFactories = P.LinkedHashMap_LinkedHashMap$_literal(["AllocationProfile", Q.vm_service_AllocationProfile_parse$closure(), "BoundField", Q.vm_service_BoundField_parse$closure(), "BoundVariable", Q.vm_service_BoundVariable_parse$closure(), "Breakpoint", Q.vm_service_Breakpoint_parse$closure(), "@Class", Q.vm_service_ClassRef_parse$closure(), "Class", Q.vm_service_Class_parse$closure(), "ClassHeapStats", Q.vm_service_ClassHeapStats_parse$closure(), "ClassList", Q.vm_service_ClassList_parse$closure(), "ClientName", Q.vm_service_ClientName_parse$closure(), "@Code", Q.vm_service_CodeRef_parse$closure(), "Code", Q.vm_service_Code_parse$closure(), "@Context", Q.vm_service_ContextRef_parse$closure(), "Context", Q.vm_service_Context_parse$closure(), "ContextElement", Q.vm_service_ContextElement_parse$closure(), "CpuSamples", Q.vm_service_CpuSamples_parse$closure(), "CpuSample", Q.vm_service_CpuSample_parse$closure(), "@Error", Q.vm_service_ErrorRef_parse$closure(), "Error", Q.vm_service_Error_parse$closure(), "Event", Q.vm_service_Event_parse$closure(), "ExtensionData", Q.vm_service_ExtensionData_parse$closure(), "@Field", Q.vm_service_FieldRef_parse$closure(), "Field", Q.vm_service_Field_parse$closure(), "Flag", Q.vm_service_Flag_parse$closure(), "FlagList", Q.vm_service_FlagList_parse$closure(), "Frame", Q.vm_service_Frame_parse$closure(), "@Function", Q.vm_service_FuncRef_parse$closure(), "Function", Q.vm_service_Func_parse$closure(), "@Instance", Q.vm_service_InstanceRef_parse$closure(), "Instance", Q.vm_service_Instance_parse$closure(), "@Isolate", Q.vm_service_IsolateRef_parse$closure(), "Isolate", Q.vm_service_Isolate_parse$closure(), "@IsolateGroup", Q.vm_service_IsolateGroupRef_parse$closure(), "IsolateGroup", Q.vm_service_IsolateGroup_parse$closure(), "InboundReferences", Q.vm_service_InboundReferences_parse$closure(), "InboundReference", Q.vm_service_InboundReference_parse$closure(), "InstanceSet", Q.vm_service_InstanceSet_parse$closure(), "@Library", Q.vm_service_LibraryRef_parse$closure(), "Library", Q.vm_service_Library_parse$closure(), "LibraryDependency", Q.vm_service_LibraryDependency_parse$closure(), "LogRecord", Q.vm_service_LogRecord_parse$closure(), "MapAssociation", Q.vm_service_MapAssociation_parse$closure(), "MemoryUsage", Q.vm_service_MemoryUsage_parse$closure(), "Message", Q.vm_service_Message_parse$closure(), "NativeFunction", Q.vm_service_NativeFunction_parse$closure(), "@Null", Q.vm_service_NullValRef_parse$closure(), "Null", Q.vm_service_NullVal_parse$closure(), "@Object", Q.vm_service_ObjRef_parse$closure(), "Object", Q.vm_service_Obj_parse$closure(), "ProfileFunction", Q.vm_service_ProfileFunction_parse$closure(), "ReloadReport", Q.vm_service_ReloadReport_parse$closure(), "RetainingObject", Q.vm_service_RetainingObject_parse$closure(), "RetainingPath", Q.vm_service_RetainingPath_parse$closure(), "Response", Q.vm_service_Response_parse$closure(), "Sentinel", Q.vm_service_Sentinel_parse$closure(), "@Script", Q.vm_service_ScriptRef_parse$closure(), "Script", Q.vm_service_Script_parse$closure(), "ScriptList", Q.vm_service_ScriptList_parse$closure(), "SourceLocation", Q.vm_service_SourceLocation_parse$closure(), "SourceReport", Q.vm_service_SourceReport_parse$closure(), "SourceReportCoverage", Q.vm_service_SourceReportCoverage_parse$closure(), "SourceReportRange", Q.vm_service_SourceReportRange_parse$closure(), "Stack", Q.vm_service_Stack_parse$closure(), "Success", Q.vm_service_Success_parse$closure(), "Timeline", Q.vm_service_Timeline_parse$closure(), "TimelineEvent", Q.vm_service_TimelineEvent_parse$closure(), "TimelineFlags", Q.vm_service_TimelineFlags_parse$closure(), "Timestamp", Q.vm_service_Timestamp_parse$closure(), "@TypeArguments", Q.vm_service_TypeArgumentsRef_parse$closure(), "TypeArguments", Q.vm_service_TypeArguments_parse$closure(), "UnresolvedSourceLocation", Q.vm_service_UnresolvedSourceLocation_parse$closure(), "Version", Q.vm_service_Version_parse$closure(), "@VM", Q.vm_service_VMRef_parse$closure(), "VM", Q.vm_service_VM_parse$closure()], type$.legacy_String, H.findType("Function*"));
-    $._methodReturnTypes = P.LinkedHashMap_LinkedHashMap$_literal(["addBreakpoint", C.List_Breakpoint, "addBreakpointWithScriptUri", C.List_Breakpoint, "addBreakpointAtEntry", C.List_Breakpoint, "clearCpuSamples", C.List_Success, "clearVMTimeline", C.List_Success, "invoke", C.List_InstanceRef_ErrorRef, "evaluate", C.List_InstanceRef_ErrorRef, "evaluateInFrame", C.List_InstanceRef_ErrorRef, "getAllocationProfile", C.List_AllocationProfile, "getClassList", C.List_ClassList, "getClientName", C.List_ClientName, "getCpuSamples", C.List_CpuSamples, "getFlagList", C.List_FlagList, "getInboundReferences", C.List_InboundReferences, "getInstances", C.List_InstanceSet, "getIsolate", C.List_Isolate, "getIsolateGroup", C.List_IsolateGroup, "getMemoryUsage", C.List_MemoryUsage, "getIsolateGroupMemoryUsage", C.List_MemoryUsage, "getScripts", C.List_ScriptList, "getObject", C.List_Obj, "getRetainingPath", C.List_RetainingPath, "getStack", C.List_Stack, "getSourceReport", C.List_SourceReport, "getVersion", C.List_Version, "getVM", C.List_VM, "getVMTimeline", C.List_Timeline, "getVMTimelineFlags", C.List_TimelineFlags, "getVMTimelineMicros", C.List_Timestamp, "pause", C.List_Success, "kill", C.List_Success, "registerService", C.List_Success, "reloadSources", C.List_ReloadReport, "removeBreakpoint", C.List_Success, "requestHeapSnapshot", C.List_Success, "requirePermissionToResume", C.List_Success, "resume", C.List_Success, "setClientName", C.List_Success, "setExceptionPauseMode", C.List_Success, "setFlag", C.List_Success_Error, "setLibraryDebuggable", C.List_Success, "setName", C.List_Success, "setVMName", C.List_Success, "setVMTimelineFlags", C.List_Success, "streamCancel", C.List_Success, "streamListen", C.List_Success], type$.legacy_String, type$.legacy_List_legacy_String);
+    $._typeFactories = P.LinkedHashMap_LinkedHashMap$_literal(["AllocationProfile", Q.vm_service_AllocationProfile_parse$closure(), "BoundField", Q.vm_service_BoundField_parse$closure(), "BoundVariable", Q.vm_service_BoundVariable_parse$closure(), "Breakpoint", Q.vm_service_Breakpoint_parse$closure(), "@Class", Q.vm_service_ClassRef_parse$closure(), "Class", Q.vm_service_Class_parse$closure(), "ClassHeapStats", Q.vm_service_ClassHeapStats_parse$closure(), "ClassList", Q.vm_service_ClassList_parse$closure(), "ClientName", Q.vm_service_ClientName_parse$closure(), "@Code", Q.vm_service_CodeRef_parse$closure(), "Code", Q.vm_service_Code_parse$closure(), "@Context", Q.vm_service_ContextRef_parse$closure(), "Context", Q.vm_service_Context_parse$closure(), "ContextElement", Q.vm_service_ContextElement_parse$closure(), "CpuSamples", Q.vm_service_CpuSamples_parse$closure(), "CpuSample", Q.vm_service_CpuSample_parse$closure(), "@Error", Q.vm_service_ErrorRef_parse$closure(), "Error", Q.vm_service_Error_parse$closure(), "Event", Q.vm_service_Event_parse$closure(), "ExtensionData", Q.vm_service_ExtensionData_parse$closure(), "@Field", Q.vm_service_FieldRef_parse$closure(), "Field", Q.vm_service_Field_parse$closure(), "Flag", Q.vm_service_Flag_parse$closure(), "FlagList", Q.vm_service_FlagList_parse$closure(), "Frame", Q.vm_service_Frame_parse$closure(), "@Function", Q.vm_service_FuncRef_parse$closure(), "Function", Q.vm_service_Func_parse$closure(), "@Instance", Q.vm_service_InstanceRef_parse$closure(), "Instance", Q.vm_service_Instance_parse$closure(), "@Isolate", Q.vm_service_IsolateRef_parse$closure(), "Isolate", Q.vm_service_Isolate_parse$closure(), "@IsolateGroup", Q.vm_service_IsolateGroupRef_parse$closure(), "IsolateGroup", Q.vm_service_IsolateGroup_parse$closure(), "InboundReferences", Q.vm_service_InboundReferences_parse$closure(), "InboundReference", Q.vm_service_InboundReference_parse$closure(), "InstanceSet", Q.vm_service_InstanceSet_parse$closure(), "@Library", Q.vm_service_LibraryRef_parse$closure(), "Library", Q.vm_service_Library_parse$closure(), "LibraryDependency", Q.vm_service_LibraryDependency_parse$closure(), "LogRecord", Q.vm_service_LogRecord_parse$closure(), "MapAssociation", Q.vm_service_MapAssociation_parse$closure(), "MemoryUsage", Q.vm_service_MemoryUsage_parse$closure(), "Message", Q.vm_service_Message_parse$closure(), "NativeFunction", Q.vm_service_NativeFunction_parse$closure(), "@Null", Q.vm_service_NullValRef_parse$closure(), "Null", Q.vm_service_NullVal_parse$closure(), "@Object", Q.vm_service_ObjRef_parse$closure(), "Object", Q.vm_service_Obj_parse$closure(), "ProfileFunction", Q.vm_service_ProfileFunction_parse$closure(), "ProtocolList", Q.vm_service_ProtocolList_parse$closure(), "Protocol", Q.vm_service_Protocol_parse$closure(), "ReloadReport", Q.vm_service_ReloadReport_parse$closure(), "RetainingObject", Q.vm_service_RetainingObject_parse$closure(), "RetainingPath", Q.vm_service_RetainingPath_parse$closure(), "Response", Q.vm_service_Response_parse$closure(), "Sentinel", Q.vm_service_Sentinel_parse$closure(), "@Script", Q.vm_service_ScriptRef_parse$closure(), "Script", Q.vm_service_Script_parse$closure(), "ScriptList", Q.vm_service_ScriptList_parse$closure(), "SourceLocation", Q.vm_service_SourceLocation_parse$closure(), "SourceReport", Q.vm_service_SourceReport_parse$closure(), "SourceReportCoverage", Q.vm_service_SourceReportCoverage_parse$closure(), "SourceReportRange", Q.vm_service_SourceReportRange_parse$closure(), "Stack", Q.vm_service_Stack_parse$closure(), "Success", Q.vm_service_Success_parse$closure(), "Timeline", Q.vm_service_Timeline_parse$closure(), "TimelineEvent", Q.vm_service_TimelineEvent_parse$closure(), "TimelineFlags", Q.vm_service_TimelineFlags_parse$closure(), "Timestamp", Q.vm_service_Timestamp_parse$closure(), "@TypeArguments", Q.vm_service_TypeArgumentsRef_parse$closure(), "TypeArguments", Q.vm_service_TypeArguments_parse$closure(), "UnresolvedSourceLocation", Q.vm_service_UnresolvedSourceLocation_parse$closure(), "Version", Q.vm_service_Version_parse$closure(), "@VM", Q.vm_service_VMRef_parse$closure(), "VM", Q.vm_service_VM_parse$closure()], type$.legacy_String, H.findType("Function*"));
+    $._methodReturnTypes = P.LinkedHashMap_LinkedHashMap$_literal(["addBreakpoint", C.List_Breakpoint, "addBreakpointWithScriptUri", C.List_Breakpoint, "addBreakpointAtEntry", C.List_Breakpoint, "clearCpuSamples", C.List_Success, "clearVMTimeline", C.List_Success, "invoke", C.List_InstanceRef_ErrorRef, "evaluate", C.List_InstanceRef_ErrorRef, "evaluateInFrame", C.List_InstanceRef_ErrorRef, "getAllocationProfile", C.List_AllocationProfile, "getClassList", C.List_ClassList, "getClientName", C.List_ClientName, "getCpuSamples", C.List_CpuSamples, "getFlagList", C.List_FlagList, "getInboundReferences", C.List_InboundReferences, "getInstances", C.List_InstanceSet, "getIsolate", C.List_Isolate, "getIsolateGroup", C.List_IsolateGroup, "getMemoryUsage", C.List_MemoryUsage, "getIsolateGroupMemoryUsage", C.List_MemoryUsage, "getScripts", C.List_ScriptList, "getObject", C.List_Obj, "getRetainingPath", C.List_RetainingPath, "getStack", C.List_Stack, "getSupportedProtocols", C.List_ProtocolList, "getSourceReport", C.List_SourceReport, "getVersion", C.List_Version, "getVM", C.List_VM, "getVMTimeline", C.List_Timeline, "getVMTimelineFlags", C.List_TimelineFlags, "getVMTimelineMicros", C.List_Timestamp, "pause", C.List_Success, "kill", C.List_Success, "registerService", C.List_Success, "reloadSources", C.List_ReloadReport, "removeBreakpoint", C.List_Success, "requestHeapSnapshot", C.List_Success, "requirePermissionToResume", C.List_Success, "resume", C.List_Success, "setClientName", C.List_Success, "setExceptionPauseMode", C.List_Success, "setFlag", C.List_Success_Error, "setLibraryDebuggable", C.List_Success, "setName", C.List_Success, "setVMName", C.List_Success, "setVMTimelineFlags", C.List_Success, "streamCancel", C.List_Success, "streamListen", C.List_Success], type$.legacy_String, type$.legacy_List_legacy_String);
   })();
   (function lazyInitializers() {
-    var _lazy = hunkHelpers.lazy;
-    _lazy($, "DART_CLOSURE_PROPERTY_NAME", "$get$DART_CLOSURE_PROPERTY_NAME", function() {
+    var _lazyFinal = hunkHelpers.lazyFinal,
+      _lazy = hunkHelpers.lazy,
+      _lazyOld = hunkHelpers.lazyOld;
+    _lazyFinal($, "DART_CLOSURE_PROPERTY_NAME", "$get$DART_CLOSURE_PROPERTY_NAME", function() {
       return H.getIsolateAffinityTag("_$dart_dartClosure");
     });
-    _lazy($, "TypeErrorDecoder_noSuchMethodPattern", "$get$TypeErrorDecoder_noSuchMethodPattern", function() {
+    _lazyFinal($, "nullFuture", "$get$nullFuture", function() {
+      return C.C__RootZone.run$1$1(new H.nullFuture_closure(), H.findType("Future<Null>"));
+    });
+    _lazyFinal($, "TypeErrorDecoder_noSuchMethodPattern", "$get$TypeErrorDecoder_noSuchMethodPattern", function() {
       return H.TypeErrorDecoder_extractPattern(H.TypeErrorDecoder_provokeCallErrorOn({
         toString: function() {
           return "$receiver$";
         }
       }));
     });
-    _lazy($, "TypeErrorDecoder_notClosurePattern", "$get$TypeErrorDecoder_notClosurePattern", function() {
+    _lazyFinal($, "TypeErrorDecoder_notClosurePattern", "$get$TypeErrorDecoder_notClosurePattern", function() {
       return H.TypeErrorDecoder_extractPattern(H.TypeErrorDecoder_provokeCallErrorOn({$method$: null,
         toString: function() {
           return "$receiver$";
         }
       }));
     });
-    _lazy($, "TypeErrorDecoder_nullCallPattern", "$get$TypeErrorDecoder_nullCallPattern", function() {
+    _lazyFinal($, "TypeErrorDecoder_nullCallPattern", "$get$TypeErrorDecoder_nullCallPattern", function() {
       return H.TypeErrorDecoder_extractPattern(H.TypeErrorDecoder_provokeCallErrorOn(null));
     });
-    _lazy($, "TypeErrorDecoder_nullLiteralCallPattern", "$get$TypeErrorDecoder_nullLiteralCallPattern", function() {
+    _lazyFinal($, "TypeErrorDecoder_nullLiteralCallPattern", "$get$TypeErrorDecoder_nullLiteralCallPattern", function() {
       return H.TypeErrorDecoder_extractPattern(function() {
         var $argumentsExpr$ = '$arguments$';
         try {
@@ -14600,10 +14705,10 @@
         }
       }());
     });
-    _lazy($, "TypeErrorDecoder_undefinedCallPattern", "$get$TypeErrorDecoder_undefinedCallPattern", function() {
+    _lazyFinal($, "TypeErrorDecoder_undefinedCallPattern", "$get$TypeErrorDecoder_undefinedCallPattern", function() {
       return H.TypeErrorDecoder_extractPattern(H.TypeErrorDecoder_provokeCallErrorOn(void 0));
     });
-    _lazy($, "TypeErrorDecoder_undefinedLiteralCallPattern", "$get$TypeErrorDecoder_undefinedLiteralCallPattern", function() {
+    _lazyFinal($, "TypeErrorDecoder_undefinedLiteralCallPattern", "$get$TypeErrorDecoder_undefinedLiteralCallPattern", function() {
       return H.TypeErrorDecoder_extractPattern(function() {
         var $argumentsExpr$ = '$arguments$';
         try {
@@ -14613,10 +14718,10 @@
         }
       }());
     });
-    _lazy($, "TypeErrorDecoder_nullPropertyPattern", "$get$TypeErrorDecoder_nullPropertyPattern", function() {
+    _lazyFinal($, "TypeErrorDecoder_nullPropertyPattern", "$get$TypeErrorDecoder_nullPropertyPattern", function() {
       return H.TypeErrorDecoder_extractPattern(H.TypeErrorDecoder_provokePropertyErrorOn(null));
     });
-    _lazy($, "TypeErrorDecoder_nullLiteralPropertyPattern", "$get$TypeErrorDecoder_nullLiteralPropertyPattern", function() {
+    _lazyFinal($, "TypeErrorDecoder_nullLiteralPropertyPattern", "$get$TypeErrorDecoder_nullLiteralPropertyPattern", function() {
       return H.TypeErrorDecoder_extractPattern(function() {
         try {
           null.$method$;
@@ -14625,10 +14730,10 @@
         }
       }());
     });
-    _lazy($, "TypeErrorDecoder_undefinedPropertyPattern", "$get$TypeErrorDecoder_undefinedPropertyPattern", function() {
+    _lazyFinal($, "TypeErrorDecoder_undefinedPropertyPattern", "$get$TypeErrorDecoder_undefinedPropertyPattern", function() {
       return H.TypeErrorDecoder_extractPattern(H.TypeErrorDecoder_provokePropertyErrorOn(void 0));
     });
-    _lazy($, "TypeErrorDecoder_undefinedLiteralPropertyPattern", "$get$TypeErrorDecoder_undefinedLiteralPropertyPattern", function() {
+    _lazyFinal($, "TypeErrorDecoder_undefinedLiteralPropertyPattern", "$get$TypeErrorDecoder_undefinedLiteralPropertyPattern", function() {
       return H.TypeErrorDecoder_extractPattern(function() {
         try {
           (void 0).$method$;
@@ -14637,25 +14742,27 @@
         }
       }());
     });
-    _lazy($, "_AsyncRun__scheduleImmediateClosure", "$get$_AsyncRun__scheduleImmediateClosure", function() {
+    _lazyFinal($, "_AsyncRun__scheduleImmediateClosure", "$get$_AsyncRun__scheduleImmediateClosure", function() {
       return P._AsyncRun__initializeScheduleImmediate();
     });
-    _lazy($, "Future__nullFuture", "$get$Future__nullFuture", function() {
-      return P._Future$zoneValue(null, C.C__RootZone, type$.Null);
+    _lazyFinal($, "Future__nullFuture", "$get$Future__nullFuture", function() {
+      return type$._Future_Null._as($.$get$nullFuture());
     });
-    _lazy($, "Future__falseFuture", "$get$Future__falseFuture", function() {
-      return P._Future$zoneValue(false, C.C__RootZone, type$.bool);
+    _lazyFinal($, "Future__falseFuture", "$get$Future__falseFuture", function() {
+      var t1 = new P._Future(C.C__RootZone, type$._Future_bool);
+      t1._setValue$1(false);
+      return t1;
     });
-    _lazy($, "Utf8Decoder__decoder", "$get$Utf8Decoder__decoder", function() {
-      return new P.Utf8Decoder_closure().call$0();
+    _lazyFinal($, "Utf8Decoder__decoder", "$get$Utf8Decoder__decoder", function() {
+      return new P.Utf8Decoder__decoder_closure().call$0();
     });
-    _lazy($, "Utf8Decoder__decoderNonfatal", "$get$Utf8Decoder__decoderNonfatal", function() {
-      return new P.Utf8Decoder_closure0().call$0();
+    _lazyFinal($, "Utf8Decoder__decoderNonfatal", "$get$Utf8Decoder__decoderNonfatal", function() {
+      return new P.Utf8Decoder__decoderNonfatal_closure().call$0();
     });
     _lazy($, "_hasErrorStackProperty", "$get$_hasErrorStackProperty", function() {
       return new Error().stack != void 0;
     });
-    _lazy($, "Logger_root", "$get$Logger_root", function() {
+    _lazyOld($, "Logger_root", "$get$Logger_root", function() {
       return F.Logger_Logger("");
     });
   })();
@@ -14713,10 +14820,11 @@
       scripts[i].addEventListener("load", onLoad, false);
   })(function(currentScript) {
     init.currentScript = currentScript;
+    var callMain = E.main;
     if (typeof dartMainRunner === "function")
-      dartMainRunner(E.main, []);
+      dartMainRunner(callMain, []);
     else
-      E.main([]);
+      callMain([]);
   });
 })();
 
diff --git a/runtime/observatory/tests/service/service_kernel.status b/runtime/observatory/tests/service/service_kernel.status
index 1d2ed8f..3241e5f 100644
--- a/runtime/observatory/tests/service/service_kernel.status
+++ b/runtime/observatory/tests/service/service_kernel.status
@@ -9,7 +9,7 @@
 break_on_activation_test: SkipByDesign # No incremental compiler available.
 complex_reload_test: RuntimeError
 debugger_inspect_test: SkipByDesign # No incremental compiler available.
-debugger_location_second_test: RuntimeError
+debugger_location_second_test: SkipByDesign # No script sources available.
 eval_internal_class_test: SkipByDesign # No incremental compiler available.
 eval_regression_flutter20255_test: SkipByDesign # No incremental compiler available.
 eval_test: SkipByDesign # No incremental compiler available.
diff --git a/runtime/observatory_2/tests/service_2/service_2_kernel.status b/runtime/observatory_2/tests/service_2/service_2_kernel.status
index 070691b..0eca6fb 100644
--- a/runtime/observatory_2/tests/service_2/service_2_kernel.status
+++ b/runtime/observatory_2/tests/service_2/service_2_kernel.status
@@ -9,7 +9,7 @@
 break_on_activation_test: SkipByDesign # No incremental compiler available.
 complex_reload_test: RuntimeError
 debugger_inspect_test: SkipByDesign # No incremental compiler available.
-debugger_location_second_test: RuntimeError
+debugger_location_second_test: SkipByDesign # No script sources available.
 eval_internal_class_test: SkipByDesign # No incremental compiler available.
 eval_regression_flutter20255_test: SkipByDesign # No incremental compiler available.
 eval_test: SkipByDesign # No incremental compiler available.
diff --git a/tools/VERSION b/tools/VERSION
index 9a6485e..1bcadd3 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 12
 PATCH 0
-PRERELEASE 174
+PRERELEASE 175
 PRERELEASE_PATCH 0
\ No newline at end of file
