diff --git a/dwds/CHANGELOG.md b/dwds/CHANGELOG.md
index 1a87732..75723bc 100644
--- a/dwds/CHANGELOG.md
+++ b/dwds/CHANGELOG.md
@@ -1,3 +1,5 @@
+## 25.1.0-wip
+
 ## 25.0.3
 
 ### Bug Fixes:
diff --git a/dwds/lib/src/injected/client.js b/dwds/lib/src/injected/client.js
index cb3b4b4..9ec7775 100644
--- a/dwds/lib/src/injected/client.js
+++ b/dwds/lib/src/injected/client.js
@@ -1,4 +1,4 @@
-// Generated by dart2js (, csp, intern-composite-values), the Dart to JavaScript compiler version: 3.9.0.
+// Generated by dart2js (, csp, intern-composite-values), the Dart to JavaScript compiler version: 3.9.0-333.4.beta.
 // The code supports the following hooks:
 // dartPrint(message):
 //    if this function is defined it is called instead of the Dart [print]
@@ -388,22 +388,6 @@
         return J.UnknownJavaScriptObject.prototype;
       return receiver;
     },
-    getInterceptor$x(receiver) {
-      if (receiver == null)
-        return receiver;
-      if (typeof receiver != "object") {
-        if (typeof receiver == "function")
-          return J.JavaScriptFunction.prototype;
-        if (typeof receiver == "symbol")
-          return J.JavaScriptSymbol.prototype;
-        if (typeof receiver == "bigint")
-          return J.JavaScriptBigInt.prototype;
-        return receiver;
-      }
-      if (receiver instanceof A.Object)
-        return receiver;
-      return J.getNativeInterceptor(receiver);
-    },
     set$length$asx(receiver, value) {
       return J.getInterceptor$asx(receiver).set$length(receiver, value);
     },
@@ -454,9 +438,6 @@
     allMatches$2$s(receiver, a0, a1) {
       return J.getInterceptor$s(receiver).allMatches$2(receiver, a0, a1);
     },
-    asUint8List$2$x(receiver, a0, a1) {
-      return J.getInterceptor$x(receiver).asUint8List$2(receiver, a0, a1);
-    },
     cast$1$0$ax(receiver, $T1) {
       return J.getInterceptor$ax(receiver).cast$1$0(receiver, $T1);
     },
@@ -2236,9 +2217,6 @@
       this._name = t0;
       this.__late_helper$_value = null;
     },
-    _checkLength($length) {
-      return $length;
-    },
     _ensureNativeList(list) {
       var t1, result, i;
       if (type$.JSIndexable_dynamic._is(list))
@@ -2283,9 +2261,6 @@
     },
     NativeTypedData: function NativeTypedData() {
     },
-    _UnmodifiableNativeByteBufferView: function _UnmodifiableNativeByteBufferView(t0) {
-      this._data = t0;
-    },
     NativeByteData: function NativeByteData() {
     },
     NativeTypedArray: function NativeTypedArray() {
@@ -3903,78 +3878,6 @@
       }($function, 1);
       return $.Zone__current.registerBinaryCallback$3$1(new A._wrapJsFunctionForAsync_closure($protected), type$.void, type$.int, type$.dynamic);
     },
-    _asyncStarHelper(object, bodyFunctionOrErrorCode, controller) {
-      var t1, t2, t3,
-        _s10_ = "controller";
-      if (bodyFunctionOrErrorCode === 0) {
-        t1 = controller.cancelationFuture;
-        if (t1 != null)
-          t1._completeWithValue$1(null);
-        else {
-          t1 = controller.___AsyncStarStreamController_controller_A;
-          t1 === $ && A.throwLateFieldNI(_s10_);
-          t1.close$0();
-        }
-        return;
-      } else if (bodyFunctionOrErrorCode === 1) {
-        t1 = controller.cancelationFuture;
-        if (t1 != null) {
-          t2 = A.unwrapException(object);
-          t3 = A.getTraceFromException(object);
-          t1._completeErrorObject$1(new A.AsyncError(t2, t3));
-        } else {
-          t1 = A.unwrapException(object);
-          t2 = A.getTraceFromException(object);
-          t3 = controller.___AsyncStarStreamController_controller_A;
-          t3 === $ && A.throwLateFieldNI(_s10_);
-          t3.addError$2(t1, t2);
-          controller.___AsyncStarStreamController_controller_A.close$0();
-        }
-        return;
-      }
-      type$.void_Function_int_dynamic._as(bodyFunctionOrErrorCode);
-      if (object instanceof A._IterationMarker) {
-        if (controller.cancelationFuture != null) {
-          bodyFunctionOrErrorCode.call$2(2, null);
-          return;
-        }
-        t1 = object.state;
-        if (t1 === 0) {
-          t1 = object.value;
-          t2 = controller.___AsyncStarStreamController_controller_A;
-          t2 === $ && A.throwLateFieldNI(_s10_);
-          t2.add$1(0, controller.$ti._precomputed1._as(t1));
-          A.scheduleMicrotask(new A._asyncStarHelper_closure(controller, bodyFunctionOrErrorCode));
-          return;
-        } else if (t1 === 1) {
-          t1 = controller.$ti._eval$1("Stream<1>")._as(type$.Stream_dynamic._as(object.value));
-          t2 = controller.___AsyncStarStreamController_controller_A;
-          t2 === $ && A.throwLateFieldNI(_s10_);
-          t2.addStream$2$cancelOnError(t1, false).then$1$1(new A._asyncStarHelper_closure0(controller, bodyFunctionOrErrorCode), type$.Null);
-          return;
-        }
-      }
-      A._awaitOnObject(object, bodyFunctionOrErrorCode);
-    },
-    _streamOfController(controller) {
-      var t1 = controller.___AsyncStarStreamController_controller_A;
-      t1 === $ && A.throwLateFieldNI("controller");
-      return new A._ControllerStream(t1, A._instanceType(t1)._eval$1("_ControllerStream<1>"));
-    },
-    _AsyncStarStreamController$(body, $T) {
-      var t1 = new A._AsyncStarStreamController($T._eval$1("_AsyncStarStreamController<0>"));
-      t1._AsyncStarStreamController$1(body, $T);
-      return t1;
-    },
-    _makeAsyncStarStreamController(body, $T) {
-      return A._AsyncStarStreamController$(body, $T);
-    },
-    _IterationMarker_yieldStar(values) {
-      return new A._IterationMarker(values, 1);
-    },
-    _IterationMarker_yieldSingle(value) {
-      return new A._IterationMarker(value, 0);
-    },
     AsyncError_defaultStackTrace(error) {
       var stackTrace;
       if (type$.Error._is(error)) {
@@ -4274,12 +4177,21 @@
       t1 = $.Zone__current;
       t1.scheduleMicrotask$1(t1.bindCallbackGuarded$1(callback));
     },
+    Stream_Stream$value(value, $T) {
+      var _null = null,
+        t1 = $T._eval$1("_AsyncStreamController<0>"),
+        t2 = new A._AsyncStreamController(_null, _null, _null, _null, t1);
+      t2._add$1(value);
+      t2._closeUnchecked$0();
+      return new A._ControllerStream(t2, t1._eval$1("_ControllerStream<1>"));
+    },
     StreamIterator_StreamIterator(stream, $T) {
       A.checkNotNullable(stream, "stream", type$.Object);
       return new A._StreamIterator($T._eval$1("_StreamIterator<0>"));
     },
-    StreamController_StreamController(onCancel, onListen, onResume, sync, $T) {
-      return sync ? new A._SyncStreamController(onListen, null, onResume, onCancel, $T._eval$1("_SyncStreamController<0>")) : new A._AsyncStreamController(onListen, null, onResume, onCancel, $T._eval$1("_AsyncStreamController<0>"));
+    StreamController_StreamController(onCancel, onListen, sync, $T) {
+      var _null = null;
+      return sync ? new A._SyncStreamController(onListen, _null, _null, onCancel, $T._eval$1("_SyncStreamController<0>")) : new A._AsyncStreamController(onListen, _null, _null, onCancel, $T._eval$1("_AsyncStreamController<0>"));
     },
     _runGuarded(notificationHandler) {
       var e, s, exception;
@@ -4293,9 +4205,6 @@
         $.Zone__current.handleUncaughtError$2(e, s);
       }
     },
-    _AddStreamState_makeErrorHandler(controller) {
-      return new A._AddStreamState_makeErrorHandler_closure(controller);
-    },
     _BufferingStreamSubscription__registerDataHandler(zone, handleData, $T) {
       var t1 = handleData == null ? A.async___nullDataHandler$closure() : handleData;
       return zone.registerUnaryCallback$2$1(t1, type$.void, $T);
@@ -4515,45 +4424,6 @@
     _wrapJsFunctionForAsync_closure: function _wrapJsFunctionForAsync_closure(t0) {
       this.$protected = t0;
     },
-    _asyncStarHelper_closure: function _asyncStarHelper_closure(t0, t1) {
-      this.controller = t0;
-      this.bodyFunction = t1;
-    },
-    _asyncStarHelper_closure0: function _asyncStarHelper_closure0(t0, t1) {
-      this.controller = t0;
-      this.bodyFunction = t1;
-    },
-    _AsyncStarStreamController: function _AsyncStarStreamController(t0) {
-      var _ = this;
-      _.___AsyncStarStreamController_controller_A = $;
-      _.isSuspended = false;
-      _.cancelationFuture = null;
-      _.$ti = t0;
-    },
-    _AsyncStarStreamController__resumeBody: function _AsyncStarStreamController__resumeBody(t0) {
-      this.body = t0;
-    },
-    _AsyncStarStreamController__resumeBody_closure: function _AsyncStarStreamController__resumeBody_closure(t0) {
-      this.body = t0;
-    },
-    _AsyncStarStreamController_closure0: function _AsyncStarStreamController_closure0(t0) {
-      this._resumeBody = t0;
-    },
-    _AsyncStarStreamController_closure1: function _AsyncStarStreamController_closure1(t0, t1) {
-      this.$this = t0;
-      this._resumeBody = t1;
-    },
-    _AsyncStarStreamController_closure: function _AsyncStarStreamController_closure(t0, t1) {
-      this.$this = t0;
-      this.body = t1;
-    },
-    _AsyncStarStreamController__closure: function _AsyncStarStreamController__closure(t0) {
-      this.body = t0;
-    },
-    _IterationMarker: function _IterationMarker(t0, t1) {
-      this.value = t0;
-      this.state = t1;
-    },
     AsyncError: function AsyncError(t0, t1) {
       this.error = t0;
       this.stackTrace = t1;
@@ -4723,21 +4593,6 @@
       this._async$_target = t0;
       this.$ti = t1;
     },
-    _AddStreamState: function _AddStreamState() {
-    },
-    _AddStreamState_makeErrorHandler_closure: function _AddStreamState_makeErrorHandler_closure(t0) {
-      this.controller = t0;
-    },
-    _AddStreamState_cancel_closure: function _AddStreamState_cancel_closure(t0) {
-      this.$this = t0;
-    },
-    _StreamControllerAddStreamState: function _StreamControllerAddStreamState(t0, t1, t2, t3) {
-      var _ = this;
-      _._varData = t0;
-      _.addStreamFuture = t1;
-      _.addSubscription = t2;
-      _.$ti = t3;
-    },
     _BufferingStreamSubscription: function _BufferingStreamSubscription() {
     },
     _BufferingStreamSubscription_asFuture_closure: function _BufferingStreamSubscription_asFuture_closure(t0, t1) {
@@ -5131,7 +4986,7 @@
     },
     _LinkedHashSetCell: function _LinkedHashSetCell(t0) {
       this._element = t0;
-      this._collection$_next = null;
+      this._collection$_previous = this._collection$_next = null;
     },
     _LinkedHashSetIterator: function _LinkedHashSetIterator(t0, t1, t2) {
       var _ = this;
@@ -5618,7 +5473,7 @@
     _JsonMap: function _JsonMap(t0, t1) {
       this._original = t0;
       this._processed = t1;
-      this._convert$_data = null;
+      this._data = null;
     },
     _JsonMapKeyIterable: function _JsonMapKeyIterable(t0) {
       this._parent = t0;
@@ -7790,17 +7645,6 @@
         return callback.call$1(arg1);
       return callback.call$0();
     },
-    _callDartFunctionFast3(callback, arg1, arg2, arg3, $length) {
-      type$.Function._as(callback);
-      A._asInt($length);
-      if ($length >= 3)
-        return callback.call$3(arg1, arg2, arg3);
-      if ($length === 2)
-        return callback.call$2(arg1, arg2);
-      if ($length === 1)
-        return callback.call$1(arg1);
-      return callback.call$0();
-    },
     _noJsifyRequired(o) {
       return o == null || A._isBool(o) || typeof o == "number" || typeof o == "string" || type$.Int8List._is(o) || type$.Uint8List._is(o) || type$.Uint8ClampedList._is(o) || type$.Int16List._is(o) || type$.Uint16List._is(o) || type$.Int32List._is(o) || type$.Uint32List._is(o) || type$.Float32List._is(o) || type$.Float64List._is(o) || type$.ByteBuffer._is(o) || type$.ByteData._is(o);
     },
@@ -7871,9 +7715,6 @@
     },
     _JSRandom: function _JSRandom() {
     },
-    _JSSecureRandom: function _JSSecureRandom(t0) {
-      this._math$_buffer = t0;
-    },
     AsyncMemoizer: function AsyncMemoizer(t0, t1) {
       this._async_memoizer$_completer = t0;
       this.$ti = t1;
@@ -8956,10 +8797,6 @@
       this.iterator = t1;
       this.$ti = t2;
     },
-    RequestAbortedException: function RequestAbortedException(t0, t1) {
-      this.message = t0;
-      this.uri = t1;
-    },
     BaseClient: function BaseClient() {
     },
     BaseRequest: function BaseRequest() {
@@ -8970,162 +8807,39 @@
     },
     BaseResponse: function BaseResponse() {
     },
-    _rethrowAsClientException(e, st, request) {
-      var t1, message;
-      if (type$.JSObject._is(e))
-        t1 = A._asString(e.name) === "AbortError";
-      else
-        t1 = false;
-      if (t1)
-        A.Error_throwWithStackTrace(new A.RequestAbortedException("Request aborted by `abortTrigger`", request.url), st);
-      if (!(e instanceof A.ClientException)) {
-        message = J.toString$0$(e);
-        if (B.JSString_methods.startsWith$1(message, "TypeError: "))
-          message = B.JSString_methods.substring$1(message, 11);
-        e = new A.ClientException(message, request.url);
+    _extension_0_get_responseHeaders(_this) {
+      var _i, header, splitIdx, key, value,
+        t1 = type$.String,
+        headers = A.LinkedHashMap_LinkedHashMap$_empty(t1, t1),
+        headersList = A._asString(_this.getAllResponseHeaders()).split("\r\n");
+      for (t1 = headersList.length, _i = 0; _i < t1; ++_i) {
+        header = headersList[_i];
+        if (header.length === 0)
+          continue;
+        splitIdx = B.JSString_methods.indexOf$1(header, ": ");
+        if (splitIdx === -1)
+          continue;
+        key = B.JSString_methods.substring$2(header, 0, splitIdx).toLowerCase();
+        value = B.JSString_methods.substring$1(header, splitIdx + 2);
+        if (headers.containsKey$1(key))
+          headers.$indexSet(0, key, A.S(headers.$index(0, key)) + ", " + value);
+        else
+          headers.$indexSet(0, key, value);
       }
-      A.Error_throwWithStackTrace(e, st);
-    },
-    _readBody(request, response) {
-      return A._readBody$body(request, response);
-    },
-    _readBody$body(request, response) {
-      var $async$_readBody = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) {
-        switch ($async$errorCode) {
-          case 2:
-            $async$next = $async$nextWhenCanceled;
-            $async$goto = $async$next.pop();
-            break;
-          case 1:
-            $async$errorStack.push($async$result);
-            $async$goto = $async$handler;
-        }
-        while (true)
-          switch ($async$goto) {
-            case 0:
-              // Function start
-              _box_0 = {};
-              t1 = A._asJSObjectQ(response.body);
-              bodyStreamReader = t1 == null ? null : A._asJSObject(t1.getReader());
-              if (bodyStreamReader == null) {
-                // goto return
-                $async$goto = 1;
-                break;
-              }
-              isDone = false;
-              _box_0.isError = false;
-              $async$handler = 4;
-              t1 = type$.NativeUint8List, t2 = type$.JSObject;
-            case 7:
-              // for condition
-              // trivial condition
-              $async$goto = 9;
-              return A._asyncStarHelper(A.promiseToFuture(A._asJSObject(bodyStreamReader.read()), t2), $async$_readBody, $async$controller);
-            case 9:
-              // returning from await.
-              chunk = $async$result;
-              if (A._asBool(chunk.done)) {
-                isDone = true;
-                // goto after for
-                $async$goto = 8;
-                break;
-              }
-              t3 = chunk.value;
-              t3.toString;
-              $async$goto = 10;
-              $async$nextWhenCanceled = [1, 5];
-              return A._asyncStarHelper(A._IterationMarker_yieldSingle(t1._as(t3)), $async$_readBody, $async$controller);
-            case 10:
-              // after yield
-              // goto for condition
-              $async$goto = 7;
-              break;
-            case 8:
-              // after for
-              $async$next.push(6);
-              // goto finally
-              $async$goto = 5;
-              break;
-            case 4:
-              // catch
-              $async$handler = 3;
-              $async$exception = $async$errorStack.pop();
-              e = A.unwrapException($async$exception);
-              st = A.getTraceFromException($async$exception);
-              _box_0.isError = true;
-              A._rethrowAsClientException(e, st, request);
-              $async$next.push(6);
-              // goto finally
-              $async$goto = 5;
-              break;
-            case 3:
-              // uncaught
-              $async$next = [2];
-            case 5:
-              // finally
-              $async$handler = 2;
-              $async$goto = !isDone ? 11 : 12;
-              break;
-            case 11:
-              // then
-              $async$handler = 14;
-              $async$goto = 17;
-              return A._asyncStarHelper(A.promiseToFuture(A._asJSObject(bodyStreamReader.cancel()), type$.nullable_Object).catchError$2$test(new A._readBody_closure(), new A._readBody_closure0(_box_0)), $async$_readBody, $async$controller);
-            case 17:
-              // returning from await.
-              $async$handler = 2;
-              // goto after finally
-              $async$goto = 16;
-              break;
-            case 14:
-              // catch
-              $async$handler = 13;
-              $async$exception1 = $async$errorStack.pop();
-              e0 = A.unwrapException($async$exception1);
-              st0 = A.getTraceFromException($async$exception1);
-              if (!_box_0.isError)
-                A._rethrowAsClientException(e0, st0, request);
-              // goto after finally
-              $async$goto = 16;
-              break;
-            case 13:
-              // uncaught
-              // goto rethrow
-              $async$goto = 2;
-              break;
-            case 16:
-              // after finally
-            case 12:
-              // join
-              // goto the next finally handler
-              $async$goto = $async$next.pop();
-              break;
-            case 6:
-              // after finally
-            case 1:
-              // return
-              return A._asyncStarHelper(null, 0, $async$controller);
-            case 2:
-              // rethrow
-              return A._asyncStarHelper($async$errorStack.at(-1), 1, $async$controller);
-          }
-      });
-      var $async$goto = 0,
-        $async$controller = A._makeAsyncStarStreamController($async$_readBody, type$.List_int),
-        $async$nextWhenCanceled, $async$handler = 2, $async$errorStack = [], $async$next = [], isDone, chunk, e, st, e0, st0, t2, t3, exception, _box_0, t1, bodyStreamReader, $async$exception, $async$exception1;
-      return A._streamOfController($async$controller);
+      return headers;
     },
     BrowserClient: function BrowserClient(t0) {
+      this._xhrs = t0;
       this.withCredentials = false;
-      this._openRequestAbortControllers = t0;
     },
-    BrowserClient_send_closure: function BrowserClient_send_closure(t0) {
-      this.headers = t0;
+    BrowserClient_send_closure: function BrowserClient_send_closure(t0, t1, t2) {
+      this.xhr = t0;
+      this.completer = t1;
+      this.request = t2;
     },
-    _readBody_closure: function _readBody_closure() {
-    },
-    _readBody_closure0: function _readBody_closure0(t0) {
-      this._box_0 = t0;
+    BrowserClient_send_closure0: function BrowserClient_send_closure0(t0, t1) {
+      this.completer = t0;
+      this.request = t1;
     },
     ByteStream: function ByteStream(t0) {
       this._stream = t0;
@@ -9133,9 +8847,6 @@
     ByteStream_toBytes_closure: function ByteStream_toBytes_closure(t0) {
       this.completer = t0;
     },
-    ClientException$(message, uri) {
-      return new A.ClientException(message, uri);
-    },
     ClientException: function ClientException(t0, t1) {
       this.message = t0;
       this.uri = t1;
@@ -9714,11 +9425,11 @@
     SseClient$(serverUrl, debugKey) {
       var t3, t4, t5, _null = null,
         t1 = type$.String,
-        t2 = A.StreamController_StreamController(_null, _null, _null, false, t1);
-      t1 = A.StreamController_StreamController(_null, _null, _null, false, t1);
+        t2 = A.StreamController_StreamController(_null, _null, false, t1);
+      t1 = A.StreamController_StreamController(_null, _null, false, t1);
       t3 = A.Logger_Logger("SseClient");
       t4 = $.Zone__current;
-      t5 = A.generateId();
+      t5 = A.generateUuidV4();
       t1 = new A.SseClient(debugKey + "-" + t5, t2, t1, t3, new A._AsyncCompleter(new A._Future(t4, type$._Future_void), type$._AsyncCompleter_void));
       t1.SseClient$2$debugKey(serverUrl, debugKey);
       return t1;
@@ -9752,6 +9463,21 @@
       this.$this = t1;
       this.message = t2;
     },
+    generateUuidV4() {
+      var t1 = new A.generateUuidV4_printDigits(),
+        t2 = new A.generateUuidV4_bitsDigits(t1, new A.generateUuidV4_generateBits(B.C__JSRandom)),
+        t3 = B.C__JSRandom.nextInt$1(4);
+      return A.S(t2.call$2(16, 4)) + A.S(t2.call$2(16, 4)) + "-" + A.S(t2.call$2(16, 4)) + "-4" + A.S(t2.call$2(12, 3)) + "-" + A.S(t1.call$2(8 + t3, 1)) + A.S(t2.call$2(12, 3)) + "-" + A.S(t2.call$2(16, 4)) + A.S(t2.call$2(16, 4)) + A.S(t2.call$2(16, 4));
+    },
+    generateUuidV4_generateBits: function generateUuidV4_generateBits(t0) {
+      this.random = t0;
+    },
+    generateUuidV4_printDigits: function generateUuidV4_printDigits() {
+    },
+    generateUuidV4_bitsDigits: function generateUuidV4_bitsDigits(t0, t1) {
+      this.printDigits = t0;
+      this.generateBits = t1;
+    },
     GuaranteeChannel$(innerStream, innerSink, allowSinkErrors, $T) {
       var t2, t1 = {};
       t1.innerStream = innerStream;
@@ -9804,9 +9530,13 @@
       _._string_scanner$_position = 0;
       _._lastMatchPosition = _._lastMatch = null;
     },
+    MathRNG$() {
+      return new A.MathRNG(B.C__JSRandom);
+    },
     RNG: function RNG() {
     },
-    CryptoRNG: function CryptoRNG() {
+    MathRNG: function MathRNG(t0) {
+      this._rnd = t0;
     },
     UuidV1: function UuidV1(t0) {
       this.goptions = t0;
@@ -9875,14 +9605,15 @@
               t1 = type$.JSArray_nullable_Object._as(new t1());
               webSocket = A._asJSObject(new t2(t3, t1));
               webSocket.binaryType = "arraybuffer";
-              browserSocket = new A.BrowserWebSocket(webSocket, A.StreamController_StreamController(null, null, null, false, type$.WebSocketEvent));
+              browserSocket = new A.BrowserWebSocket(webSocket, A.StreamController_StreamController(null, null, false, type$.WebSocketEvent));
               t1 = new A._Future($.Zone__current, type$._Future_BrowserWebSocket);
               webSocketConnected = new A._AsyncCompleter(t1, type$._AsyncCompleter_BrowserWebSocket);
               if (A._asInt(webSocket.readyState) === 1)
                 webSocketConnected.complete$1(browserSocket);
-              else if (A._asInt(webSocket.readyState) === 2 || A._asInt(webSocket.readyState) === 3)
-                webSocketConnected.completeError$1(new A.WebSocketException("Unexpected WebSocket state: " + A._asInt(webSocket.readyState) + ", expected CONNECTING (0) or OPEN (1)"));
-              else
+              else if (A._asInt(webSocket.readyState) === 2 || A._asInt(webSocket.readyState) === 3) {
+                A._asInt(webSocket.readyState);
+                webSocketConnected.completeError$1(new A.WebSocketException());
+              } else
                 new A._EventStream(webSocket, "open", false, type$._EventStream_JSObject).get$first(0).then$1$1(new A.BrowserWebSocket_connect_closure(webSocketConnected, browserSocket), type$.void);
               t2 = type$._EventStream_JSObject;
               t3 = type$.void;
@@ -9920,7 +9651,7 @@
       this.browserSocket = t1;
     },
     WebSocketConnectionClosed$() {
-      return new A.WebSocketConnectionClosed("Connection Closed");
+      return new A.WebSocketConnectionClosed();
     },
     WebSocketEvent: function WebSocketEvent() {
     },
@@ -9934,19 +9665,17 @@
       this.code = t0;
       this.reason = t1;
     },
-    WebSocketException: function WebSocketException(t0) {
-      this.message = t0;
+    WebSocketException: function WebSocketException() {
     },
-    WebSocketConnectionClosed: function WebSocketConnectionClosed(t0) {
-      this.message = t0;
+    WebSocketConnectionClosed: function WebSocketConnectionClosed() {
     },
     AdapterWebSocketChannel$(webSocket) {
       var _null = null,
         t1 = $.Zone__current,
         t2 = new A.StreamChannelController(type$.StreamChannelController_nullable_Object),
         t3 = type$.nullable_Object,
-        localToForeignController = A.StreamController_StreamController(_null, _null, _null, true, t3),
-        foreignToLocalController = A.StreamController_StreamController(_null, _null, _null, true, t3),
+        localToForeignController = A.StreamController_StreamController(_null, _null, true, t3),
+        foreignToLocalController = A.StreamController_StreamController(_null, _null, true, t3),
         t4 = A._instanceType(foreignToLocalController),
         t5 = A._instanceType(localToForeignController);
       t2.__StreamChannelController__local_F = A.GuaranteeChannel$(new A._ControllerStream(foreignToLocalController, t4._eval$1("_ControllerStream<1>")), new A._StreamSinkWrapper(localToForeignController, t5._eval$1("_StreamSinkWrapper<1>")), true, t3);
@@ -10042,14 +9771,14 @@
           switch ($async$goto) {
             case 0:
               // Function start
-              client = new A.BrowserClient(A._setArrayType([], type$.JSArray_JSObject));
+              client = new A.BrowserClient(A.LinkedHashSet_LinkedHashSet$_empty(type$.JSObject));
               client.withCredentials = true;
               $async$goto = 3;
               return A._asyncAwait(client._sendUnstreamed$3("GET", A.Uri_parse(authUrl), null), $async$_authenticateUser);
             case 3:
               // returning from await.
               response = $async$result;
-              $async$returnValue = B.JSString_methods.contains$1(A.encodingForContentTypeHeader(A._contentTypeForHeaders(response.headers)).decode$1(response.bodyBytes), "Dart Debug Authentication Success!");
+              $async$returnValue = B.JSString_methods.contains$1(A.encodingForCharset(A._contentTypeForHeaders(response.headers).parameters._collection$_map.$index(0, "charset")).decode$1(response.bodyBytes), "Dart Debug Authentication Success!");
               // goto return
               $async$goto = 1;
               break;
@@ -10588,24 +10317,18 @@
       else
         return 255;
     },
-    encodingForContentTypeHeader(contentTypeHeader) {
-      var t1,
-        charset = contentTypeHeader.parameters._collection$_map.$index(0, "charset");
-      if (contentTypeHeader.type === "application" && contentTypeHeader.subtype === "json" && charset == null)
-        return B.C_Utf8Codec;
-      if (charset != null) {
-        t1 = A.Encoding_getByName(charset);
-        if (t1 == null)
-          t1 = B.C_Latin1Codec;
-      } else
-        t1 = B.C_Latin1Codec;
-      return t1;
+    encodingForCharset(charset) {
+      var t1;
+      if (charset == null)
+        return B.C_Latin1Codec;
+      t1 = A.Encoding_getByName(charset);
+      return t1 == null ? B.C_Latin1Codec : t1;
     },
     toUint8List(input) {
       return input;
     },
     toByteStream(stream) {
-      return new A.ByteStream(stream);
+      return stream;
     },
     wrapFormatException($name, value, body, $T) {
       var error, error0, t1, exception;
@@ -10743,16 +10466,6 @@
       }
       return null;
     },
-    generateId() {
-      var i,
-        chars = A.List_List$filled(6, 0, false, type$.int),
-        bits = B.C__JSRandom.nextInt$1(4294967296);
-      for (i = 0; i < 6; ++i) {
-        B.JSArray_methods.$indexSet(chars, i, string$.ABCDEF.charCodeAt(bits & 63));
-        bits = bits >>> 6;
-      }
-      return A.String_String$fromCharCodes(chars, 0, null);
-    },
     UuidParsing_unparse(buffer) {
       var t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17,
         t1 = buffer.length;
@@ -10956,16 +10669,6 @@
         throw A.wrapException(A.diagnoseIndexError(receiver, -1));
       return receiver.pop();
     },
-    remove$1(receiver, element) {
-      var i;
-      receiver.$flags & 1 && A.throwUnsupportedOperation(receiver, "remove", 1);
-      for (i = 0; i < receiver.length; ++i)
-        if (J.$eq$(receiver[i], element)) {
-          receiver.splice(i, 1);
-          return true;
-        }
-      return false;
-    },
     _removeWhere$2(receiver, test, removeMatching) {
       var retained, end, i, element, t1;
       A._arrayInstanceType(receiver)._eval$1("bool(1)")._as(test);
@@ -11437,6 +11140,9 @@
         throw A.wrapException(A.argumentErrorValue(other));
       return other > 31 ? 0 : receiver << other >>> 0;
     },
+    _shlPositive$1(receiver, other) {
+      return other > 31 ? 0 : receiver << other >>> 0;
+    },
     $shr(receiver, other) {
       var t1;
       if (other < 0)
@@ -11821,7 +11527,7 @@
     call$0() {
       return A.Future_Future$value(null, type$.void);
     },
-    $signature: 19
+    $signature: 16
   };
   A.SentinelValue.prototype = {};
   A.EfficientLengthIterable.prototype = {};
@@ -12689,7 +12395,7 @@
       if (index < 0)
         return null;
       cell = bucket.splice(index, 1)[0];
-      _this._unlinkCell$1(cell);
+      _this.__js_helper$_unlinkCell$1(cell);
       if (bucket.length === 0)
         delete rest[hash];
       return cell.hashMapCellValue;
@@ -12724,7 +12430,7 @@
       cell = table[key];
       if (cell == null)
         return null;
-      this._unlinkCell$1(cell);
+      this.__js_helper$_unlinkCell$1(cell);
       delete table[key];
       return cell.hashMapCellValue;
     },
@@ -12747,7 +12453,7 @@
       _this._modified$0();
       return cell;
     },
-    _unlinkCell$1(cell) {
+    __js_helper$_unlinkCell$1(cell) {
       var _this = this,
         previous = cell._previous,
         next = cell._next;
@@ -12922,19 +12628,19 @@
     call$1(o) {
       return this.getTag(o);
     },
-    $signature: 6
+    $signature: 4
   };
   A.initHooks_closure0.prototype = {
     call$2(o, tag) {
       return this.getUnknownTag(o, tag);
     },
-    $signature: 93
+    $signature: 37
   };
   A.initHooks_closure1.prototype = {
     call$1(tag) {
       return this.prototypeForTag(A._asString(tag));
     },
-    $signature: 86
+    $signature: 36
   };
   A._Record.prototype = {
     get$runtimeType(_) {
@@ -13228,21 +12934,11 @@
     get$runtimeType(receiver) {
       return B.Type_ByteBuffer_rqD;
     },
-    asUint8List$2(receiver, offsetInBytes, $length) {
-      return $length == null ? new Uint8Array(receiver, offsetInBytes) : new Uint8Array(receiver, offsetInBytes, $length);
-    },
     $isTrustedGetRuntimeType: 1,
-    $isNativeByteBuffer: 1,
     $isByteBuffer: 1
   };
   A.NativeArrayBuffer.prototype = {$isNativeArrayBuffer: 1};
   A.NativeTypedData.prototype = {
-    get$buffer(receiver) {
-      if (((receiver.$flags | 0) & 2) !== 0)
-        return new A._UnmodifiableNativeByteBufferView(receiver.buffer);
-      else
-        return receiver.buffer;
-    },
     _invalidPosition$3(receiver, position, $length, $name) {
       var t1 = A.RangeError$range(position, 0, $length, $name, null);
       throw A.wrapException(t1);
@@ -13252,14 +12948,6 @@
         this._invalidPosition$3(receiver, position, $length, $name);
     }
   };
-  A._UnmodifiableNativeByteBufferView.prototype = {
-    asUint8List$2(_, offsetInBytes, $length) {
-      var result = A.NativeUint8List_NativeUint8List$view(this._data, offsetInBytes, $length);
-      result.$flags = 3;
-      return result;
-    },
-    $isByteBuffer: 1
-  };
   A.NativeByteData.prototype = {
     get$runtimeType(receiver) {
       return B.Type_ByteData_9dB;
@@ -13513,7 +13201,7 @@
       t1.storedCallback = null;
       f.call$0();
     },
-    $signature: 4
+    $signature: 6
   };
   A._AsyncRun__initializeScheduleImmediate_closure.prototype = {
     call$1(callback) {
@@ -13523,7 +13211,7 @@
       t2 = this.span;
       t1.firstChild ? t1.removeChild(t2) : t1.appendChild(t2);
     },
-    $signature: 69
+    $signature: 38
   };
   A._AsyncRun__scheduleImmediateJsOverride_internalCallback.prototype = {
     call$0() {
@@ -13629,98 +13317,13 @@
     call$2(error, stackTrace) {
       this.bodyFunction.call$2(1, new A.ExceptionAndStackTrace(error, type$.StackTrace._as(stackTrace)));
     },
-    $signature: 66
+    $signature: 57
   };
   A._wrapJsFunctionForAsync_closure.prototype = {
     call$2(errorCode, result) {
       this.$protected(A._asInt(errorCode), result);
     },
-    $signature: 64
-  };
-  A._asyncStarHelper_closure.prototype = {
-    call$0() {
-      var t3,
-        t1 = this.controller,
-        t2 = t1.___AsyncStarStreamController_controller_A;
-      t2 === $ && A.throwLateFieldNI("controller");
-      t3 = t2._state;
-      if ((t3 & 1) !== 0 ? (t2.get$_subscription()._state & 4) !== 0 : (t3 & 2) === 0) {
-        t1.isSuspended = true;
-        return;
-      }
-      t1 = t1.cancelationFuture != null ? 2 : 0;
-      this.bodyFunction.call$2(t1, null);
-    },
-    $signature: 0
-  };
-  A._asyncStarHelper_closure0.prototype = {
-    call$1(__wc0_formal) {
-      var errorCode = this.controller.cancelationFuture != null ? 2 : 0;
-      this.bodyFunction.call$2(errorCode, null);
-    },
-    $signature: 4
-  };
-  A._AsyncStarStreamController.prototype = {
-    _AsyncStarStreamController$1(body, $T) {
-      var _this = this,
-        t1 = new A._AsyncStarStreamController__resumeBody(body);
-      _this.___AsyncStarStreamController_controller_A = _this.$ti._eval$1("StreamController<1>")._as(A.StreamController_StreamController(new A._AsyncStarStreamController_closure(_this, body), new A._AsyncStarStreamController_closure0(t1), new A._AsyncStarStreamController_closure1(_this, t1), false, $T));
-    }
-  };
-  A._AsyncStarStreamController__resumeBody.prototype = {
-    call$0() {
-      A.scheduleMicrotask(new A._AsyncStarStreamController__resumeBody_closure(this.body));
-    },
-    $signature: 1
-  };
-  A._AsyncStarStreamController__resumeBody_closure.prototype = {
-    call$0() {
-      this.body.call$2(0, null);
-    },
-    $signature: 0
-  };
-  A._AsyncStarStreamController_closure0.prototype = {
-    call$0() {
-      this._resumeBody.call$0();
-    },
-    $signature: 0
-  };
-  A._AsyncStarStreamController_closure1.prototype = {
-    call$0() {
-      var t1 = this.$this;
-      if (t1.isSuspended) {
-        t1.isSuspended = false;
-        this._resumeBody.call$0();
-      }
-    },
-    $signature: 0
-  };
-  A._AsyncStarStreamController_closure.prototype = {
-    call$0() {
-      var t1 = this.$this,
-        t2 = t1.___AsyncStarStreamController_controller_A;
-      t2 === $ && A.throwLateFieldNI("controller");
-      if ((t2._state & 4) === 0) {
-        t1.cancelationFuture = new A._Future($.Zone__current, type$._Future_dynamic);
-        if (t1.isSuspended) {
-          t1.isSuspended = false;
-          A.scheduleMicrotask(new A._AsyncStarStreamController__closure(this.body));
-        }
-        return t1.cancelationFuture;
-      }
-    },
-    $signature: 59
-  };
-  A._AsyncStarStreamController__closure.prototype = {
-    call$0() {
-      this.body.call$2(2, null);
-    },
-    $signature: 0
-  };
-  A._IterationMarker.prototype = {
-    toString$0(_) {
-      return "IterationMarker(" + this.state + ", " + A.S(this.value) + ")";
-    }
+    $signature: 91
   };
   A.AsyncError.prototype = {
     toString$0(_) {
@@ -13859,23 +13462,14 @@
       this._addListener$1(new A._FutureListener(result, 19, f, onError, t1._eval$1("@<1>")._bind$1($E)._eval$1("_FutureListener<1,2>")));
       return result;
     },
-    catchError$2$test(onError, test) {
-      var t1, t2, result;
-      type$.nullable_bool_Function_Object._as(test);
-      t1 = this.$ti;
-      t2 = $.Zone__current;
-      result = new A._Future(t2, t1);
-      if (t2 !== B.C__RootZone) {
-        onError = A._registerErrorHandler(onError, t2);
-        if (test != null)
-          test = t2.registerUnaryCallback$2$1(test, type$.bool, type$.Object);
-      }
-      t2 = test == null ? 2 : 6;
-      this._addListener$1(new A._FutureListener(result, t2, test, onError, t1._eval$1("_FutureListener<1,1>")));
-      return result;
-    },
     catchError$1(onError) {
-      return this.catchError$2$test(onError, null);
+      var t1 = this.$ti,
+        t2 = $.Zone__current,
+        result = new A._Future(t2, t1);
+      if (t2 !== B.C__RootZone)
+        onError = A._registerErrorHandler(onError, t2);
+      this._addListener$1(new A._FutureListener(result, 2, null, onError, t1._eval$1("_FutureListener<1,1>")));
+      return result;
     },
     whenComplete$1(action) {
       var t1, t2, result;
@@ -14119,7 +13713,7 @@
     call$1(__wc0_formal) {
       this.joinedResult._completeWithResultOf$1(this.originalSource);
     },
-    $signature: 4
+    $signature: 6
   };
   A._Future__propagateToListeners_handleWhenCompleteCallback_closure0.prototype = {
     call$2(e, s) {
@@ -14301,10 +13895,10 @@
       if ((_this._state & 8) === 0)
         return A._instanceType(_this)._eval$1("_PendingEvents<1>?")._as(_this._varData);
       t1 = A._instanceType(_this);
-      return t1._eval$1("_PendingEvents<1>?")._as(t1._eval$1("_StreamControllerAddStreamState<1>")._as(_this._varData)._varData);
+      return t1._eval$1("_PendingEvents<1>?")._as(t1._eval$1("_StreamControllerAddStreamState<1>")._as(_this._varData).get$_varData());
     },
     _ensurePendingEvents$0() {
-      var events, t1, state, _this = this;
+      var events, t1, _this = this;
       if ((_this._state & 8) === 0) {
         events = _this._varData;
         if (events == null)
@@ -14312,16 +13906,13 @@
         return A._instanceType(_this)._eval$1("_PendingEvents<1>")._as(events);
       }
       t1 = A._instanceType(_this);
-      state = t1._eval$1("_StreamControllerAddStreamState<1>")._as(_this._varData);
-      events = state._varData;
-      if (events == null)
-        events = state._varData = new A._PendingEvents(t1._eval$1("_PendingEvents<1>"));
+      events = t1._eval$1("_StreamControllerAddStreamState<1>")._as(_this._varData).get$_varData();
       return t1._eval$1("_PendingEvents<1>")._as(events);
     },
     get$_subscription() {
       var varData = this._varData;
       if ((this._state & 8) !== 0)
-        varData = type$._StreamControllerAddStreamState_nullable_Object._as(varData)._varData;
+        varData = type$._StreamControllerAddStreamState_nullable_Object._as(varData).get$_varData();
       return A._instanceType(this)._eval$1("_ControllerSubscription<1>")._as(varData);
     },
     _badEventState$0() {
@@ -14329,31 +13920,6 @@
         return new A.StateError("Cannot add event after closing");
       return new A.StateError("Cannot add event while adding a stream");
     },
-    addStream$2$cancelOnError(source, cancelOnError) {
-      var t2, t3, t4, t5, t6, _this = this,
-        t1 = A._instanceType(_this);
-      t1._eval$1("Stream<1>")._as(source);
-      t2 = _this._state;
-      if (t2 >= 4)
-        throw A.wrapException(_this._badEventState$0());
-      if ((t2 & 2) !== 0) {
-        t1 = new A._Future($.Zone__current, type$._Future_dynamic);
-        t1._asyncComplete$1(null);
-        return t1;
-      }
-      t2 = _this._varData;
-      t3 = cancelOnError === true;
-      t4 = new A._Future($.Zone__current, type$._Future_dynamic);
-      t5 = t1._eval$1("~(1)")._as(_this.get$_add());
-      t6 = t3 ? A._AddStreamState_makeErrorHandler(_this) : _this.get$_addError();
-      t6 = source.listen$4$cancelOnError$onDone$onError(t5, t3, _this.get$_close(), t6);
-      t3 = _this._state;
-      if ((t3 & 1) !== 0 ? (_this.get$_subscription()._state & 4) !== 0 : (t3 & 2) === 0)
-        t6.pause$0();
-      _this._varData = new A._StreamControllerAddStreamState(t2, t4, t6, t1._eval$1("_StreamControllerAddStreamState<1>"));
-      _this._state |= 8;
-      return t4;
-    },
     _ensureDoneFuture$0() {
       var t1 = this._doneFuture;
       if (t1 == null)
@@ -14368,13 +13934,19 @@
       _this._add$1(value);
     },
     addError$2(error, stackTrace) {
-      var _0_0;
+      var _0_0, t1, _this = this;
       A._asObject(error);
       type$.nullable_StackTrace._as(stackTrace);
-      if (this._state >= 4)
-        throw A.wrapException(this._badEventState$0());
+      if (_this._state >= 4)
+        throw A.wrapException(_this._badEventState$0());
       _0_0 = A._interceptUserError(error, stackTrace);
-      this._addError$2(_0_0.error, _0_0.stackTrace);
+      error = _0_0.error;
+      stackTrace = _0_0.stackTrace;
+      t1 = _this._state;
+      if ((t1 & 1) !== 0)
+        _this._sendError$2(error, stackTrace);
+      else if ((t1 & 3) === 0)
+        _this._ensurePendingEvents$0().add$1(0, new A._DelayedError(error, stackTrace));
     },
     addError$1(error) {
       return this.addError$2(error, null);
@@ -14406,23 +13978,6 @@
       else if ((t2 & 3) === 0)
         _this._ensurePendingEvents$0().add$1(0, new A._DelayedData(value, t1._eval$1("_DelayedData<1>")));
     },
-    _addError$2(error, stackTrace) {
-      var t1;
-      A._asObject(error);
-      type$.StackTrace._as(stackTrace);
-      t1 = this._state;
-      if ((t1 & 1) !== 0)
-        this._sendError$2(error, stackTrace);
-      else if ((t1 & 3) === 0)
-        this._ensurePendingEvents$0().add$1(0, new A._DelayedError(error, stackTrace));
-    },
-    _close$0() {
-      var _this = this,
-        addState = A._instanceType(_this)._eval$1("_StreamControllerAddStreamState<1>")._as(_this._varData);
-      _this._varData = addState._varData;
-      _this._state &= 4294967287;
-      addState.addStreamFuture._asyncComplete$1(null);
-    },
     _subscribe$4(onData, onError, onDone, cancelOnError) {
       var t2, t3, t4, t5, t6, t7, subscription, pendingEvents, addState, _this = this,
         t1 = A._instanceType(_this);
@@ -14440,8 +13995,8 @@
       pendingEvents = _this.get$_pendingEvents();
       if (((_this._state |= 1) & 8) !== 0) {
         addState = t1._eval$1("_StreamControllerAddStreamState<1>")._as(_this._varData);
-        addState._varData = subscription;
-        addState.addSubscription.resume$0();
+        addState.set$_varData(subscription);
+        addState.resume$0();
       } else
         _this._varData = subscription;
       subscription._setPendingEvents$1(pendingEvents);
@@ -14550,7 +14105,7 @@
         t2 = A._instanceType(t1);
       t2._eval$1("StreamSubscription<1>")._as(this);
       if ((t1._state & 8) !== 0)
-        t2._eval$1("_StreamControllerAddStreamState<1>")._as(t1._varData).addSubscription.pause$0();
+        t2._eval$1("_StreamControllerAddStreamState<1>")._as(t1._varData).pause$0();
       A._runGuarded(t1.onPause);
     },
     _onResume$0() {
@@ -14558,7 +14113,7 @@
         t2 = A._instanceType(t1);
       t2._eval$1("StreamSubscription<1>")._as(this);
       if ((t1._state & 8) !== 0)
-        t2._eval$1("_StreamControllerAddStreamState<1>")._as(t1._varData).addSubscription.resume$0();
+        t2._eval$1("_StreamControllerAddStreamState<1>")._as(t1._varData).resume$0();
       A._runGuarded(t1.onResume);
     }
   };
@@ -14568,27 +14123,6 @@
     },
     $isStreamSink: 1
   };
-  A._AddStreamState.prototype = {
-    cancel$0() {
-      var cancel = this.addSubscription.cancel$0();
-      return cancel.whenComplete$1(new A._AddStreamState_cancel_closure(this));
-    }
-  };
-  A._AddStreamState_makeErrorHandler_closure.prototype = {
-    call$2(e, s) {
-      var t1 = this.controller;
-      t1._addError$2(A._asObject(e), type$.StackTrace._as(s));
-      t1._close$0();
-    },
-    $signature: 5
-  };
-  A._AddStreamState_cancel_closure.prototype = {
-    call$0() {
-      this.$this.addStreamFuture._asyncComplete$1(null);
-    },
-    $signature: 1
-  };
-  A._StreamControllerAddStreamState.prototype = {};
   A._BufferingStreamSubscription.prototype = {
     _setPendingEvents$1(pendingEvents) {
       var _this = this;
@@ -15598,7 +15132,7 @@
           t2._processUncaughtError$3(zone, A._asObject(e), t1._as(s));
       }
     },
-    $signature: 55
+    $signature: 47
   };
   A._HashMap.prototype = {
     get$length(_) {
@@ -15823,7 +15357,7 @@
     call$1(v) {
       return this.K._is(v);
     },
-    $signature: 12
+    $signature: 14
   };
   A._HashMapKeyIterable.prototype = {
     get$length(_) {
@@ -15904,7 +15438,7 @@
     call$1(v) {
       return this.K._is(v);
     },
-    $signature: 12
+    $signature: 14
   };
   A._HashSet.prototype = {
     get$iterator(_) {
@@ -16160,6 +15694,26 @@
       }
       return true;
     },
+    remove$1(_, object) {
+      var t1 = this._remove$1(object);
+      return t1;
+    },
+    _remove$1(object) {
+      var hash, bucket, index, cell, _this = this,
+        rest = _this._collection$_rest;
+      if (rest == null)
+        return false;
+      hash = _this._computeHashCode$1(object);
+      bucket = rest[hash];
+      index = _this._findBucketIndex$2(bucket, object);
+      if (index < 0)
+        return false;
+      cell = bucket.splice(index, 1)[0];
+      if (0 === bucket.length)
+        delete rest[hash];
+      _this._unlinkCell$1(cell);
+      return true;
+    },
     _collection$_addHashTableEntry$2(table, element) {
       A._instanceType(this)._precomputed1._as(element);
       if (type$.nullable__LinkedHashSetCell._as(table[element]) != null)
@@ -16167,17 +15721,39 @@
       table[element] = this._collection$_newLinkedCell$1(element);
       return true;
     },
+    _collection$_modified$0() {
+      this._collection$_modifications = this._collection$_modifications + 1 & 1073741823;
+    },
     _collection$_newLinkedCell$1(element) {
-      var _this = this,
+      var t1, _this = this,
         cell = new A._LinkedHashSetCell(A._instanceType(_this)._precomputed1._as(element));
       if (_this._collection$_first == null)
         _this._collection$_first = _this._collection$_last = cell;
-      else
-        _this._collection$_last = _this._collection$_last._collection$_next = cell;
+      else {
+        t1 = _this._collection$_last;
+        t1.toString;
+        cell._collection$_previous = t1;
+        _this._collection$_last = t1._collection$_next = cell;
+      }
       ++_this._collection$_length;
-      _this._collection$_modifications = _this._collection$_modifications + 1 & 1073741823;
+      _this._collection$_modified$0();
       return cell;
     },
+    _unlinkCell$1(cell) {
+      var _this = this,
+        previous = cell._collection$_previous,
+        next = cell._collection$_next;
+      if (previous == null)
+        _this._collection$_first = next;
+      else
+        previous._collection$_next = next;
+      if (next == null)
+        _this._collection$_last = previous;
+      else
+        next._collection$_previous = previous;
+      --_this._collection$_length;
+      _this._collection$_modified$0();
+    },
     _computeHashCode$1(element) {
       return J.get$hashCode$(element) & 1073741823;
     },
@@ -16230,7 +15806,7 @@
     call$2(k, v) {
       this.result.$indexSet(0, this.K._as(k), this.V._as(v));
     },
-    $signature: 24
+    $signature: 25
   };
   A.ListBase.prototype = {
     get$iterator(receiver) {
@@ -16426,7 +16002,7 @@
       t2 = A.S(v);
       t1._contents += t2;
     },
-    $signature: 25
+    $signature: 33
   };
   A._UnmodifiableMapMixin.prototype = {
     $indexSet(_, key, value) {
@@ -16949,7 +16525,7 @@
       var result,
         t1 = this._processed;
       if (t1 == null)
-        return this._convert$_data.$index(0, key);
+        return this._data.$index(0, key);
       else if (typeof key != "string")
         return null;
       else {
@@ -16958,7 +16534,7 @@
       }
     },
     get$length(_) {
-      return this._processed == null ? this._convert$_data.__js_helper$_length : this._convert$_computeKeys$0().length;
+      return this._processed == null ? this._data.__js_helper$_length : this._convert$_computeKeys$0().length;
     },
     get$isEmpty(_) {
       return this.get$length(0) === 0;
@@ -16968,7 +16544,7 @@
     },
     get$keys() {
       if (this._processed == null) {
-        var t1 = this._convert$_data;
+        var t1 = this._data;
         return new A.LinkedHashMapKeysIterable(t1, A._instanceType(t1)._eval$1("LinkedHashMapKeysIterable<1>"));
       }
       return new A._JsonMapKeyIterable(this);
@@ -16977,7 +16553,7 @@
       var processed, original, _this = this;
       A._asString(key);
       if (_this._processed == null)
-        _this._convert$_data.$indexSet(0, key, value);
+        _this._data.$indexSet(0, key, value);
       else if (_this.containsKey$1(key)) {
         processed = _this._processed;
         processed[key] = value;
@@ -16989,7 +16565,7 @@
     },
     containsKey$1(key) {
       if (this._processed == null)
-        return this._convert$_data.containsKey$1(key);
+        return this._data.containsKey$1(key);
       if (typeof key != "string")
         return false;
       return Object.prototype.hasOwnProperty.call(this._original, key);
@@ -16998,7 +16574,7 @@
       var keys, i, key, value, _this = this;
       type$.void_Function_String_dynamic._as(f);
       if (_this._processed == null)
-        return _this._convert$_data.forEach$1(0, f);
+        return _this._data.forEach$1(0, f);
       keys = _this._convert$_computeKeys$0();
       for (i = 0; i < keys.length; ++i) {
         key = keys[i];
@@ -17008,20 +16584,20 @@
           _this._processed[key] = value;
         }
         f.call$2(key, value);
-        if (keys !== _this._convert$_data)
+        if (keys !== _this._data)
           throw A.wrapException(A.ConcurrentModificationError$(_this));
       }
     },
     _convert$_computeKeys$0() {
-      var keys = type$.nullable_List_dynamic._as(this._convert$_data);
+      var keys = type$.nullable_List_dynamic._as(this._data);
       if (keys == null)
-        keys = this._convert$_data = A._setArrayType(Object.keys(this._original), type$.JSArray_String);
+        keys = this._data = A._setArrayType(Object.keys(this._original), type$.JSArray_String);
       return keys;
     },
     _upgrade$0() {
       var result, keys, i, t1, key, _this = this;
       if (_this._processed == null)
-        return _this._convert$_data;
+        return _this._data;
       result = A.LinkedHashMap_LinkedHashMap$_empty(type$.String, type$.dynamic);
       keys = _this._convert$_computeKeys$0();
       for (i = 0; t1 = keys.length, i < t1; ++i) {
@@ -17033,7 +16609,7 @@
       else
         B.JSArray_methods.clear$0(keys);
       _this._original = _this._processed = null;
-      return _this._convert$_data = result;
+      return _this._data = result;
     },
     _process$1(key) {
       var result;
@@ -17084,7 +16660,7 @@
       }
       return null;
     },
-    $signature: 26
+    $signature: 21
   };
   A._Utf8Decoder__decoderNonfatal_closure.prototype = {
     call$0() {
@@ -17096,7 +16672,7 @@
       }
       return null;
     },
-    $signature: 26
+    $signature: 21
   };
   A.AsciiCodec.prototype = {
     encode$1(source) {
@@ -17602,7 +17178,7 @@
       B.JSArray_methods.$indexSet(t1, t2.i++, key);
       B.JSArray_methods.$indexSet(t1, t2.i++, value);
     },
-    $signature: 25
+    $signature: 33
   };
   A._JsonStringStringifier.prototype = {
     get$_partialResult() {
@@ -18284,7 +17860,7 @@
       hash = hash + ((hash & 524287) << 10) & 536870911;
       return hash ^ hash >>> 6;
     },
-    $signature: 27
+    $signature: 28
   };
   A._BigIntImpl_hashCode_finish.prototype = {
     call$1(hash) {
@@ -18292,7 +17868,7 @@
       hash ^= hash >>> 11;
       return hash + ((hash & 16383) << 15) & 536870911;
     },
-    $signature: 53
+    $signature: 22
   };
   A.DateTime.prototype = {
     $eq(_, other) {
@@ -18710,13 +18286,13 @@
     call$2(msg, position) {
       throw A.wrapException(A.FormatException$("Illegal IPv4 address, " + msg, this.host, position));
     },
-    $signature: 44
+    $signature: 39
   };
   A.Uri_parseIPv6Address_error.prototype = {
     call$2(msg, position) {
       throw A.wrapException(A.FormatException$("Illegal IPv6 address, " + msg, this.host, position));
     },
-    $signature: 40
+    $signature: 43
   };
   A.Uri_parseIPv6Address_parseHex.prototype = {
     call$2(start, end) {
@@ -18728,7 +18304,7 @@
         this.error.call$2("each part must be in the range of `0x0..0xFFFF`", start);
       return value;
     },
-    $signature: 27
+    $signature: 28
   };
   A._Uri.prototype = {
     get$_text() {
@@ -19028,7 +18604,7 @@
     call$1(s) {
       return A._Uri__uriEncode(64, A._asString(s), B.C_Utf8Codec, false);
     },
-    $signature: 16
+    $signature: 15
   };
   A.UriData.prototype = {
     get$uri() {
@@ -19354,7 +18930,7 @@
       var t1 = type$.JavaScriptFunction;
       this._this.then$1$2$onError(new A.FutureOfJSAnyToJSPromise_get_toJS__closure(t1._as(resolve)), new A.FutureOfJSAnyToJSPromise_get_toJS__closure0(t1._as(reject)), type$.nullable_Object);
     },
-    $signature: 30
+    $signature: 23
   };
   A.FutureOfJSAnyToJSPromise_get_toJS__closure.prototype = {
     call$1(value) {
@@ -19362,7 +18938,7 @@
       t1.call(t1, value);
       return value;
     },
-    $signature: 11
+    $signature: 10
   };
   A.FutureOfJSAnyToJSPromise_get_toJS__closure0.prototype = {
     call$2(error, stackTrace) {
@@ -19380,21 +18956,21 @@
       t1.call(t1, wrapper);
       return wrapper;
     },
-    $signature: 39
+    $signature: 50
   };
   A.FutureOfVoidToJSPromise_get_toJS_closure.prototype = {
     call$2(resolve, reject) {
       var t1 = type$.JavaScriptFunction;
       this._this.then$1$2$onError(new A.FutureOfVoidToJSPromise_get_toJS__closure(t1._as(resolve)), new A.FutureOfVoidToJSPromise_get_toJS__closure0(t1._as(reject)), type$.nullable_Object);
     },
-    $signature: 30
+    $signature: 23
   };
   A.FutureOfVoidToJSPromise_get_toJS__closure.prototype = {
     call$1(__wc0_formal) {
       var t1 = this.resolve;
       return t1.call(t1);
     },
-    $signature: 38
+    $signature: 51
   };
   A.FutureOfVoidToJSPromise_get_toJS__closure0.prototype = {
     call$2(error, stackTrace) {
@@ -19437,7 +19013,7 @@
       } else
         return o;
     },
-    $signature: 11
+    $signature: 10
   };
   A.promiseToFuture_closure.prototype = {
     call$1(r) {
@@ -19503,7 +19079,7 @@
       }
       return o;
     },
-    $signature: 11
+    $signature: 10
   };
   A.NullRejectionException.prototype = {
     toString$0(_) {
@@ -19514,44 +19090,10 @@
   A._JSRandom.prototype = {
     nextInt$1(max) {
       if (max <= 0 || max > 4294967296)
-        throw A.wrapException(A.RangeError$(string$.max_mu + max));
+        throw A.wrapException(A.RangeError$("max must be in range 0 < max \u2264 2^32, was " + max));
       return Math.random() * max >>> 0;
-    }
-  };
-  A._JSSecureRandom.prototype = {
-    _JSSecureRandom$0() {
-      var $crypto = self.crypto;
-      if ($crypto != null)
-        if ($crypto.getRandomValues != null)
-          return;
-      throw A.wrapException(A.UnsupportedError$("No source of cryptographically secure random numbers available."));
     },
-    nextInt$1(max) {
-      var byteCount, t1, start, randomLimit, t2, t3, random, result;
-      if (max <= 0 || max > 4294967296)
-        throw A.wrapException(A.RangeError$(string$.max_mu + max));
-      if (max > 255)
-        if (max > 65535)
-          byteCount = max > 16777215 ? 4 : 3;
-        else
-          byteCount = 2;
-      else
-        byteCount = 1;
-      t1 = this._math$_buffer;
-      t1.$flags & 2 && A.throwUnsupportedOperation(t1, 11);
-      t1.setUint32(0, 0, false);
-      start = 4 - byteCount;
-      randomLimit = A._asInt(Math.pow(256, byteCount));
-      for (t2 = max - 1, t3 = (max & t2) >>> 0 === 0; true;) {
-        crypto.getRandomValues(J.asUint8List$2$x(B.NativeByteData_methods.get$buffer(t1), start, byteCount));
-        random = t1.getUint32(0, false);
-        if (t3)
-          return (random & t2) >>> 0;
-        result = random % max;
-        if (random - result + max < randomLimit)
-          return result;
-      }
-    }
+    $isRandom: 1
   };
   A.AsyncMemoizer.prototype = {};
   A.DelegatingStreamSink.prototype = {
@@ -19714,7 +19256,7 @@
     call$2(h, i) {
       return A._combine(A._asInt(h), J.get$hashCode$(i));
     },
-    $signature: 37
+    $signature: 53
   };
   A.BuiltList.prototype = {
     toBuilder$0() {
@@ -19924,7 +19466,7 @@
     call$1(k) {
       return this.multimap.$index(0, k);
     },
-    $signature: 6
+    $signature: 4
   };
   A.BuiltListMultimap_hashCode_closure.prototype = {
     call$1(key) {
@@ -20081,7 +19623,7 @@
     call$1(k) {
       return this.multimap.$index(0, k);
     },
-    $signature: 6
+    $signature: 4
   };
   A.BuiltMap.prototype = {
     toBuilder$0() {
@@ -20148,7 +19690,7 @@
     call$1(k) {
       return this.map.$index(0, k);
     },
-    $signature: 6
+    $signature: 4
   };
   A.BuiltMap_hashCode_closure.prototype = {
     call$1(key) {
@@ -20266,7 +19808,7 @@
       var t1 = this.$this.$ti;
       this.replacement.$indexSet(0, t1._precomputed1._as(key), t1._rest[1]._as(value));
     },
-    $signature: 24
+    $signature: 25
   };
   A.BuiltSet.prototype = {
     get$hashCode(_) {
@@ -20630,7 +20172,7 @@
     call$1(k) {
       return this.multimap.$index(0, k);
     },
-    $signature: 6
+    $signature: 4
   };
   A.EnumClass.prototype = {
     toString$0(_) {
@@ -20645,7 +20187,7 @@
       $._indentingBuiltValueToStringHelperIndent = $._indentingBuiltValueToStringHelperIndent + 2;
       return new A.IndentingBuiltValueToStringHelper(t1);
     },
-    $signature: 84
+    $signature: 62
   };
   A.IndentingBuiltValueToStringHelper.prototype = {
     add$2(_, field, value) {
@@ -20776,34 +20318,34 @@
     call$0() {
       return A.ListBuilder_ListBuilder(B.List_empty0, type$.Object);
     },
-    $signature: 58
+    $signature: 67
   };
   A.Serializers_Serializers_closure0.prototype = {
     call$0() {
       var t1 = type$.Object;
       return A.ListMultimapBuilder_ListMultimapBuilder(t1, t1);
     },
-    $signature: 34
+    $signature: 71
   };
   A.Serializers_Serializers_closure1.prototype = {
     call$0() {
       var t1 = type$.Object;
       return A.MapBuilder_MapBuilder(t1, t1);
     },
-    $signature: 35
+    $signature: 84
   };
   A.Serializers_Serializers_closure2.prototype = {
     call$0() {
       return A.SetBuilder_SetBuilder(type$.Object);
     },
-    $signature: 36
+    $signature: 64
   };
   A.Serializers_Serializers_closure3.prototype = {
     call$0() {
       var t1 = type$.Object;
       return A.SetMultimapBuilder_SetMultimapBuilder(t1, t1);
     },
-    $signature: 92
+    $signature: 54
   };
   A.FullType.prototype = {
     $eq(_, other) {
@@ -21224,7 +20766,7 @@
     call$1(value) {
       return this.serializers.deserialize$2$specifiedType(value, this.valueType);
     },
-    $signature: 11
+    $signature: 10
   };
   A.BuiltListSerializer.prototype = {
     serialize$3$specifiedType(serializers, builtList, specifiedType) {
@@ -24544,13 +24086,13 @@
     call$0() {
       return A.ListBuilder_ListBuilder(B.List_empty0, type$.DebugEvent);
     },
-    $signature: 41
+    $signature: 40
   };
   A._$serializers_closure0.prototype = {
     call$0() {
       return A.ListBuilder_ListBuilder(B.List_empty0, type$.ExtensionEvent);
     },
-    $signature: 42
+    $signature: 41
   };
   A.ServiceExtensionRequest.prototype = {};
   A._$ServiceExtensionRequestSerializer.prototype = {
@@ -24662,7 +24204,7 @@
       b.get$_service_extension_response$_$this()._service_extension_response$_errorMessage = _this.errorMessage;
       return b;
     },
-    $signature: 43
+    $signature: 42
   };
   A._$ServiceExtensionResponseSerializer.prototype = {
     serialize$3$specifiedType(serializers, object, specifiedType) {
@@ -24901,13 +24443,13 @@
     call$0() {
       return true;
     },
-    $signature: 29
+    $signature: 27
   };
   A.BatchedStreamController__hasEventDuring_closure.prototype = {
     call$0() {
       return false;
     },
-    $signature: 29
+    $signature: 27
   };
   A.SocketClient.prototype = {};
   A.SseSocketClient.prototype = {
@@ -24948,14 +24490,14 @@
     call$1(o) {
       return J.toString$0$(o);
     },
-    $signature: 45
+    $signature: 44
   };
   A.safeUnawaited_closure.prototype = {
     call$2(error, stackTrace) {
       type$.StackTrace._as(stackTrace);
       return $.$get$_logger().log$4(B.Level_WARNING_900, "Error in unawaited Future:", error, stackTrace);
     },
-    $signature: 21
+    $signature: 26
   };
   A.Int32.prototype = {
     _toInt$1(val) {
@@ -25079,7 +24621,6 @@
     $isComparable: 1
   };
   A._StackState.prototype = {};
-  A.RequestAbortedException.prototype = {};
   A.BaseClient.prototype = {
     _sendUnstreamed$3(method, url, headers) {
       var $async$goto = 0,
@@ -25125,34 +24666,26 @@
     call$2(key1, key2) {
       return A._asString(key1).toLowerCase() === A._asString(key2).toLowerCase();
     },
-    $signature: 46
+    $signature: 45
   };
   A.BaseRequest_closure0.prototype = {
     call$1(key) {
       return B.JSString_methods.get$hashCode(A._asString(key).toLowerCase());
     },
-    $signature: 47
+    $signature: 46
   };
   A.BaseResponse.prototype = {
     BaseResponse$7$contentLength$headers$isRedirect$persistentConnection$reasonPhrase$request(statusCode, contentLength, headers, isRedirect, persistentConnection, reasonPhrase, request) {
       var t1 = this.statusCode;
       if (t1 < 100)
         throw A.wrapException(A.ArgumentError$("Invalid status code " + t1 + ".", null));
-      else {
-        t1 = this.contentLength;
-        if (t1 != null && t1 < 0)
-          throw A.wrapException(A.ArgumentError$("Invalid content length " + A.S(t1) + ".", null));
-      }
     }
   };
   A.BrowserClient.prototype = {
     send$1(request) {
-      return this.send$body$BrowserClient(request);
-    },
-    send$body$BrowserClient(request) {
       var $async$goto = 0,
         $async$completer = A._makeAsyncAwaitCompleter(type$.StreamedResponse),
-        $async$returnValue, $async$handler = 2, $async$errorStack = [], $async$next = [], $async$self = this, bodyBytes, _0_0, _0_2, _0_2_isSet, abortTrigger, t1, _1_0, contentLength, header, response, contentLengthHeader, contentLength0, headers, e, st, t4, t5, _this, t6, t7, t8, t9, result, exception, t2, abortController, t3, $async$exception;
+        $async$returnValue, $async$handler = 2, $async$errorStack = [], $async$next = [], $async$self = this, xhr, completer, bytes, t1, t2, header, t3;
       var $async$send$1 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) {
         if ($async$errorCode === 1) {
           $async$errorStack.push($async$result);
@@ -25162,109 +24695,55 @@
           switch ($async$goto) {
             case 0:
               // Function start
-              t2 = init.G;
-              abortController = A._asJSObject(new t2.AbortController());
-              t3 = $async$self._openRequestAbortControllers;
-              B.JSArray_methods.add$1(t3, abortController);
               request.super$BaseRequest$finalize();
-              t4 = type$._AsyncStreamController_List_int;
-              t5 = new A._AsyncStreamController(null, null, null, null, t4);
-              t5._add$1(request._bodyBytes);
-              t5._closeUnchecked$0();
               $async$goto = 3;
-              return A._asyncAwait(new A.ByteStream(new A._ControllerStream(t5, t4._eval$1("_ControllerStream<1>"))).toBytes$0(), $async$send$1);
+              return A._asyncAwait(new A.ByteStream(A.Stream_Stream$value(request._bodyBytes, type$.List_int)).toBytes$0(), $async$send$1);
             case 3:
               // returning from await.
-              bodyBytes = $async$result;
-              $async$handler = 5;
-              _0_0 = request;
-              _0_2 = null;
-              _0_2_isSet = false;
-              abortTrigger = null;
-              t4 = request.url;
-              _this = t4.toString$0(0);
-              t5 = !J.get$isEmpty$asx(bodyBytes) ? bodyBytes : null;
-              t6 = $async$self.withCredentials ? "include" : "same-origin";
-              t7 = type$.String;
-              t1 = A.LinkedHashMap_LinkedHashMap$_empty(t7, type$.Object);
-              _1_0 = request._bodyBytes.length;
-              contentLength = null;
-              if (_1_0 != null) {
-                contentLength = _1_0;
-                J.$indexSet$ax(t1, "content-length", contentLength);
+              bytes = $async$result;
+              xhr = A._asJSObject(new init.G.XMLHttpRequest());
+              t1 = $async$self._xhrs;
+              t1.add$1(0, xhr);
+              t2 = xhr;
+              t2.open(request.method, request.url.toString$0(0), true);
+              t2.responseType = "arraybuffer";
+              t2.withCredentials = $async$self.withCredentials;
+              for (t2 = request.headers, t2 = new A.LinkedHashMapEntriesIterable(t2, A._instanceType(t2)._eval$1("LinkedHashMapEntriesIterable<1,2>")).get$iterator(0); t2.moveNext$0();) {
+                header = t2.__js_helper$_current;
+                xhr.setRequestHeader(header.key, header.value);
               }
-              for (t8 = request.headers, t8 = new A.LinkedHashMapEntriesIterable(t8, A._instanceType(t8)._eval$1("LinkedHashMapEntriesIterable<1,2>")).get$iterator(0); t8.moveNext$0();) {
-                t9 = t8.__js_helper$_current;
-                t9.toString;
-                header = t9;
-                J.$indexSet$ax(t1, header.key, header.value);
-              }
-              t1 = A.jsify(t1);
-              t1.toString;
-              A._asJSObject(t1);
-              t8 = A._asJSObject(abortController.signal);
-              $async$goto = 8;
-              return A._asyncAwait(A.promiseToFuture(A._asJSObject(t2.fetch(_this, {method: request.method, headers: t1, body: t5, credentials: t6, redirect: "follow", signal: t8})), type$.JSObject), $async$send$1);
-            case 8:
+              completer = new A._AsyncCompleter(new A._Future($.Zone__current, type$._Future_StreamedResponse), type$._AsyncCompleter_StreamedResponse);
+              t2 = type$._EventStream_JSObject;
+              t3 = type$.void;
+              new A._EventStream(xhr, "load", false, t2).get$first(0).then$1$1(new A.BrowserClient_send_closure(xhr, completer, request), t3);
+              new A._EventStream(xhr, "error", false, t2).get$first(0).then$1$1(new A.BrowserClient_send_closure0(completer, request), t3);
+              xhr.send(bytes);
+              $async$handler = 4;
+              $async$goto = 7;
+              return A._asyncAwait(completer.future, $async$send$1);
+            case 7:
               // returning from await.
-              response = $async$result;
-              contentLengthHeader = A._asStringQ(A._asJSObject(response.headers).get("content-length"));
-              contentLength0 = contentLengthHeader != null ? A.Primitives_parseInt(contentLengthHeader, null) : null;
-              if (contentLength0 == null && contentLengthHeader != null) {
-                t1 = A.ClientException$("Invalid content-length header [" + contentLengthHeader + "].", t4);
-                throw A.wrapException(t1);
-              }
-              headers = A.LinkedHashMap_LinkedHashMap$_empty(t7, t7);
-              t1 = A._asJSObject(response.headers);
-              t2 = new A.BrowserClient_send_closure(headers);
-              if (typeof t2 == "function")
-                A.throwExpression(A.ArgumentError$("Attempting to rewrap a JS function.", null));
-              result = function(_call, f) {
-                return function(arg1, arg2, arg3) {
-                  return _call(f, arg1, arg2, arg3, arguments.length);
-                };
-              }(A._callDartFunctionFast3, t2);
-              result[$.$get$DART_CLOSURE_PROPERTY_NAME()] = t2;
-              t1.forEach(result);
-              t1 = A._readBody(request, response);
-              t2 = A._asInt(response.status);
-              t4 = headers;
-              t5 = contentLength0;
-              A.Uri_parse(A._asString(response.url));
-              t6 = A._asString(response.statusText);
-              t1 = new A.StreamedResponseV2(A.toByteStream(t1), request, t2, t6, t5, t4, false, true);
-              t1.BaseResponse$7$contentLength$headers$isRedirect$persistentConnection$reasonPhrase$request(t2, t5, t4, false, true, t6, request);
-              $async$returnValue = t1;
+              t2 = $async$result;
+              $async$returnValue = t2;
               $async$next = [1];
               // goto finally
-              $async$goto = 6;
+              $async$goto = 5;
               break;
-              $async$next.push(7);
+              $async$next.push(6);
               // goto finally
-              $async$goto = 6;
-              break;
-            case 5:
-              // catch
-              $async$handler = 4;
-              $async$exception = $async$errorStack.pop();
-              e = A.unwrapException($async$exception);
-              st = A.getTraceFromException($async$exception);
-              A._rethrowAsClientException(e, st, request);
-              $async$next.push(7);
-              // goto finally
-              $async$goto = 6;
+              $async$goto = 5;
               break;
             case 4:
               // uncaught
               $async$next = [2];
-            case 6:
+            case 5:
               // finally
               $async$handler = 2;
-              B.JSArray_methods.remove$1(t3, abortController);
+              t1.remove$1(0, xhr);
               // goto the next finally handler
               $async$goto = $async$next.pop();
               break;
-            case 7:
+            case 6:
               // after finally
             case 1:
               // return
@@ -25278,32 +24757,42 @@
     }
   };
   A.BrowserClient_send_closure.prototype = {
-    call$3(value, header, _) {
-      A._asString(value);
-      this.headers.$indexSet(0, A._asString(header).toLowerCase(), value);
-    },
-    call$2(value, header) {
-      return this.call$3(value, header, null);
-    },
-    "call*": "call$3",
-    $requiredArgCount: 2,
-    $defaultValues() {
-      return [null];
-    },
-    $signature: 48
-  };
-  A._readBody_closure.prototype = {
     call$1(_) {
-      return null;
+      var t1, _0_0, t2, body, responseUrl, t3, t4, t5, t6, _this = this;
+      A._asJSObject(_);
+      t1 = _this.xhr;
+      _0_0 = A._extension_0_get_responseHeaders(t1).$index(0, "content-length");
+      t2 = false;
+      if (_0_0 != null) {
+        t2 = $.$get$_digitRegex();
+        t2 = !t2._nativeRegExp.test(_0_0);
+      }
+      if (t2) {
+        _this.completer.completeError$1(new A.ClientException("Invalid content-length header [" + _0_0 + "].", _this.request.url));
+        return;
+      }
+      body = A.NativeUint8List_NativeUint8List$view(type$.NativeArrayBuffer._as(t1.response), 0, null);
+      responseUrl = A._asString(t1.responseURL);
+      if (responseUrl.length !== 0)
+        A.Uri_parse(responseUrl);
+      t2 = A.Stream_Stream$value(body, type$.List_int);
+      t3 = A._asInt(t1.status);
+      t4 = body.length;
+      t5 = _this.request;
+      t6 = A._extension_0_get_responseHeaders(t1);
+      t1 = A._asString(t1.statusText);
+      t2 = new A.StreamedResponseV2(A.toByteStream(new A.ByteStream(t2)), t5, t3, t1, t4, t6, false, true);
+      t2.BaseResponse$7$contentLength$headers$isRedirect$persistentConnection$reasonPhrase$request(t3, t4, t6, false, true, t1, t5);
+      _this.completer.complete$1(t2);
     },
-    $signature: 4
+    $signature: 8
   };
-  A._readBody_closure0.prototype = {
+  A.BrowserClient_send_closure0.prototype = {
     call$1(_) {
-      A._asObject(_);
-      return this._box_0.isError;
+      A._asJSObject(_);
+      this.completer.completeError$2(new A.ClientException("XMLHttpRequest error.", this.request.url), A.StackTrace_current());
     },
-    $signature: 49
+    $signature: 8
   };
   A.ByteStream.prototype = {
     toBytes$0() {
@@ -25318,7 +24807,7 @@
     call$1(bytes) {
       return this.completer.complete$1(new Uint8Array(A._ensureNativeList(type$.List_int._as(bytes))));
     },
-    $signature: 50
+    $signature: 48
   };
   A.ClientException.prototype = {
     toString$0(_) {
@@ -25406,7 +24895,7 @@
       scanner.expectDone$0();
       return A.MediaType$(t4, t5, parameters);
     },
-    $signature: 51
+    $signature: 49
   };
   A.MediaType_toString_closure.prototype = {
     call$2(attribute, value) {
@@ -25425,13 +24914,13 @@
       } else
         t1._contents = t3 + value;
     },
-    $signature: 52
+    $signature: 35
   };
   A.MediaType_toString__closure.prototype = {
     call$1(match) {
       return "\\" + A.S(match.$index(0, 0));
     },
-    $signature: 28
+    $signature: 29
   };
   A.expectQuotedString_closure.prototype = {
     call$1(match) {
@@ -25439,7 +24928,7 @@
       t1.toString;
       return t1;
     },
-    $signature: 28
+    $signature: 29
   };
   A.Level.prototype = {
     $eq(_, other) {
@@ -25487,7 +24976,7 @@
       var record, _this = this,
         t1 = logLevel.value;
       if (t1 >= _this.get$level().value) {
-        if ((stackTrace == null || stackTrace === B._StringStackTrace_OdL) && t1 >= 2000) {
+        if (stackTrace == null && t1 >= 2000) {
           A.StackTrace_current();
           if (error == null)
             logLevel.toString$0(0);
@@ -25528,7 +25017,7 @@
         $parent._children.$indexSet(0, thisName, t1);
       return t1;
     },
-    $signature: 54
+    $signature: 52
   };
   A.Context.prototype = {
     absolute$15(part1, part2, part3, part4, part5, part6, part7, part8, part9, part10, part11, part12, part13, part14, part15) {
@@ -25762,20 +25251,20 @@
     call$1(part) {
       return A._asString(part) !== "";
     },
-    $signature: 22
+    $signature: 30
   };
   A.Context_split_closure.prototype = {
     call$1(part) {
       return A._asString(part).length !== 0;
     },
-    $signature: 22
+    $signature: 30
   };
   A._validateArgList_closure.prototype = {
     call$1(arg) {
       A._asStringQ(arg);
       return arg == null ? "null" : '"' + arg + '"';
     },
-    $signature: 56
+    $signature: 108
   };
   A.InternalStyle.prototype = {
     getRoot$1(path) {
@@ -26229,7 +25718,7 @@
       var t1 = this.$this;
       t1._onReleaseCompleters.removeFirst$0().complete$1(new A.PoolResource(t1));
     },
-    $signature: 4
+    $signature: 6
   };
   A.Pool__runOnRelease_closure0.prototype = {
     call$2(error, stackTrace) {
@@ -26669,7 +26158,7 @@
     call$0() {
       return this.color;
     },
-    $signature: 57
+    $signature: 55
   };
   A.Highlighter$__closure.prototype = {
     call$1(line) {
@@ -26677,34 +26166,34 @@
         t2 = A._arrayInstanceType(t1);
       return new A.WhereIterable(t1, t2._eval$1("bool(1)")._as(new A.Highlighter$___closure()), t2._eval$1("WhereIterable<1>")).get$length(0);
     },
-    $signature: 33
+    $signature: 56
   };
   A.Highlighter$___closure.prototype = {
     call$1(highlight) {
       var t1 = type$._Highlight._as(highlight).span;
       return t1.get$start().get$line() !== t1.get$end().get$line();
     },
-    $signature: 17
+    $signature: 19
   };
   A.Highlighter$__closure0.prototype = {
     call$1(line) {
       return type$._Line._as(line).url;
     },
-    $signature: 60
+    $signature: 58
   };
   A.Highlighter__collateLines_closure.prototype = {
     call$1(highlight) {
       var t1 = type$._Highlight._as(highlight).span.get$sourceUrl();
       return t1 == null ? new A.Object() : t1;
     },
-    $signature: 61
+    $signature: 59
   };
   A.Highlighter__collateLines_closure0.prototype = {
     call$2(highlight1, highlight2) {
       var t1 = type$._Highlight;
       return t1._as(highlight1).span.compareTo$1(0, t1._as(highlight2).span);
     },
-    $signature: 62
+    $signature: 60
   };
   A.Highlighter__collateLines_closure1.prototype = {
     call$1(entry) {
@@ -26747,20 +26236,20 @@
       }
       return lines;
     },
-    $signature: 63
+    $signature: 61
   };
   A.Highlighter__collateLines__closure.prototype = {
     call$1(highlight) {
       return type$._Highlight._as(highlight).span.get$end().get$line() < this.line.number;
     },
-    $signature: 17
+    $signature: 19
   };
   A.Highlighter_highlight_closure.prototype = {
     call$1(highlight) {
       type$._Highlight._as(highlight);
       return true;
     },
-    $signature: 17
+    $signature: 19
   };
   A.Highlighter__writeFileStart_closure.prototype = {
     call$0() {
@@ -26858,7 +26347,7 @@
       t2._contents = t4;
       return t4.length - t3.length;
     },
-    $signature: 23
+    $signature: 31
   };
   A.Highlighter__writeIndicator_closure0.prototype = {
     call$0() {
@@ -26878,7 +26367,7 @@
         t1._writeArrow$3$beginning(_this.line, Math.max(_this.highlight.span.get$end().get$column() - 1, 0), false);
       return t2._contents.length - t3.length;
     },
-    $signature: 23
+    $signature: 31
   };
   A.Highlighter__writeSidebar_closure.prototype = {
     call$0() {
@@ -26914,7 +26403,7 @@
       }
       return A._Highlight__normalizeEndOfLine(A._Highlight__normalizeTrailingNewline(A._Highlight__normalizeNewlines(newSpan)));
     },
-    $signature: 65
+    $signature: 63
   };
   A._Line.prototype = {
     toString$0(_) {
@@ -27282,16 +26771,34 @@
       });
       return A._asyncStartSync($async$call$0, $async$completer);
     },
-    $signature: 68
+    $signature: 66
+  };
+  A.generateUuidV4_generateBits.prototype = {
+    call$1(bitCount) {
+      return this.random.nextInt$1(B.JSInt_methods._shlPositive$1(1, bitCount));
+    },
+    $signature: 22
+  };
+  A.generateUuidV4_printDigits.prototype = {
+    call$2(value, count) {
+      return B.JSString_methods.padLeft$2(B.JSInt_methods.toRadixString$1(value, 16), count, "0");
+    },
+    $signature: 32
+  };
+  A.generateUuidV4_bitsDigits.prototype = {
+    call$2(bitCount, digitCount) {
+      return this.printDigits.call$2(this.generateBits.call$1(bitCount), digitCount);
+    },
+    $signature: 32
   };
   A.GuaranteeChannel.prototype = {
     GuaranteeChannel$3$allowSinkErrors(innerSink, allowSinkErrors, _box_0, $T) {
       var _this = this,
         t1 = _this.$ti,
-        t2 = t1._eval$1("_GuaranteeSink<1>")._as(new A._GuaranteeSink(innerSink, _this, new A._AsyncCompleter(new A._Future($.Zone__current, type$._Future_void), type$._AsyncCompleter_void), allowSinkErrors, $T._eval$1("_GuaranteeSink<0>")));
+        t2 = t1._eval$1("_GuaranteeSink<1>")._as(new A._GuaranteeSink(innerSink, _this, new A._AsyncCompleter(new A._Future($.Zone__current, type$._Future_dynamic), type$._AsyncCompleter_dynamic), allowSinkErrors, $T._eval$1("_GuaranteeSink<0>")));
       _this.__GuaranteeChannel__sink_F !== $ && A.throwLateFieldAI("_sink");
       _this.__GuaranteeChannel__sink_F = t2;
-      t1 = t1._eval$1("StreamController<1>")._as(A.StreamController_StreamController(null, new A.GuaranteeChannel_closure(_box_0, _this, $T), null, true, $T));
+      t1 = t1._eval$1("StreamController<1>")._as(A.StreamController_StreamController(null, new A.GuaranteeChannel_closure(_box_0, _this, $T), true, $T));
       _this.__GuaranteeChannel__streamController_F !== $ && A.throwLateFieldAI("_streamController");
       _this.__GuaranteeChannel__streamController_F = t1;
     },
@@ -27386,7 +26893,7 @@
   A._GuaranteeSink__addError_closure.prototype = {
     call$1(_) {
     },
-    $signature: 4
+    $signature: 6
   };
   A.StreamChannelController.prototype = {};
   A.StreamChannelMixin.prototype = {$isStreamChannel: 1};
@@ -27469,30 +26976,30 @@
         return uint8list;
     }
   };
-  A.CryptoRNG.prototype = {
+  A.MathRNG.prototype = {
     _generateInternal$0() {
-      var i, k, t1, t2,
+      var t1, i, k, t2, t3,
         b = new Uint8Array(16);
-      for (i = 0; i < 16; i += 4) {
-        k = $.$get$CryptoRNG__secureRandom().nextInt$1(B.JSNumber_methods.toInt$0(Math.pow(2, 32)));
+      for (t1 = this._rnd, i = 0; i < 16; i += 4) {
+        k = t1.nextInt$1(B.JSNumber_methods.toInt$0(Math.pow(2, 32)));
         if (!(i < 16))
           return A.ioore(b, i);
         b[i] = k;
-        t1 = i + 1;
-        t2 = B.JSInt_methods._shrOtherPositive$1(k, 8);
-        if (!(t1 < 16))
-          return A.ioore(b, t1);
-        b[t1] = t2;
-        t2 = i + 2;
-        t1 = B.JSInt_methods._shrOtherPositive$1(k, 16);
+        t2 = i + 1;
+        t3 = B.JSInt_methods._shrOtherPositive$1(k, 8);
         if (!(t2 < 16))
           return A.ioore(b, t2);
-        b[t2] = t1;
-        t1 = i + 3;
-        t2 = B.JSInt_methods._shrOtherPositive$1(k, 24);
-        if (!(t1 < 16))
-          return A.ioore(b, t1);
-        b[t1] = t2;
+        b[t2] = t3;
+        t3 = i + 2;
+        t2 = B.JSInt_methods._shrOtherPositive$1(k, 16);
+        if (!(t3 < 16))
+          return A.ioore(b, t3);
+        b[t3] = t2;
+        t2 = i + 3;
+        t3 = B.JSInt_methods._shrOtherPositive$1(k, 24);
+        if (!(t2 < 16))
+          return A.ioore(b, t2);
+        b[t2] = t3;
       }
       return b;
     }
@@ -27694,7 +27201,7 @@
       A._asJSObject(_);
       this.webSocketConnected.complete$1(this.browserSocket);
     },
-    $signature: 14
+    $signature: 8
   };
   A.BrowserWebSocket_connect_closure0.prototype = {
     call$1(e) {
@@ -27702,11 +27209,11 @@
       A._asJSObject(e);
       t1 = this.webSocketConnected;
       if ((t1.future._state & 30) === 0)
-        t1.completeError$1(new A.WebSocketException("Failed to connect WebSocket"));
+        t1.completeError$1(new A.WebSocketException());
       else
         this.browserSocket._browser_web_socket$_closed$2(1006, "error");
     },
-    $signature: 14
+    $signature: 8
   };
   A.BrowserWebSocket_connect_closure1.prototype = {
     call$1(e) {
@@ -27736,7 +27243,7 @@
         t1.complete$1(this.browserSocket);
       this.browserSocket._browser_web_socket$_closed$2(A._asInt($event.code), A._asString($event.reason));
     },
-    $signature: 14
+    $signature: 8
   };
   A.WebSocketEvent.prototype = {};
   A.TextDataReceived.prototype = {
@@ -27785,25 +27292,8 @@
       return "CloseReceived(" + this.code + ", " + this.reason + ")";
     }
   };
-  A.WebSocketException.prototype = {
-    toString$0(_) {
-      var t1 = this.message;
-      if (t1.length === 0)
-        return "WebSocketException";
-      else
-        return "WebSocketException: " + t1;
-    },
-    $isException: 1
-  };
-  A.WebSocketConnectionClosed.prototype = {
-    toString$0(_) {
-      var t1 = this.message;
-      if (t1.length === 0)
-        return "WebSocketConnectionClosed";
-      else
-        return "WebSocketConnectionClosed: " + t1;
-    }
-  };
+  A.WebSocketException.prototype = {$isException: 1};
+  A.WebSocketConnectionClosed.prototype = {};
   A.AdapterWebSocketChannel.prototype = {
     AdapterWebSocketChannel$1(webSocket) {
       webSocket.then$1$2$onError(new A.AdapterWebSocketChannel_closure(this), new A.AdapterWebSocketChannel_closure0(this), type$.Null);
@@ -27825,7 +27315,7 @@
       A._asString(webSocket._webSocket.protocol);
       t2._readyCompleter.complete$0();
     },
-    $signature: 70
+    $signature: 68
   };
   A.AdapterWebSocketChannel__closure.prototype = {
     call$1($event) {
@@ -27861,7 +27351,7 @@
         }
       }
     },
-    $signature: 71
+    $signature: 69
   };
   A.AdapterWebSocketChannel__closure0.prototype = {
     call$1(obj) {
@@ -27907,7 +27397,7 @@
           throw exception;
       }
     },
-    $signature: 8
+    $signature: 9
   };
   A.AdapterWebSocketChannel__closure1.prototype = {
     call$0() {
@@ -27958,7 +27448,7 @@
       });
       return A._asyncStartSync($async$call$0, $async$completer);
     },
-    $signature: 19
+    $signature: 16
   };
   A.AdapterWebSocketChannel_closure0.prototype = {
     call$1(e) {
@@ -27976,7 +27466,7 @@
       t1 === $ && A.throwLateFieldNI("_sink");
       t1.close$0();
     },
-    $signature: 72
+    $signature: 70
   };
   A._WebSocketSink.prototype = {$isWebSocketSink: 1};
   A.WebSocketChannelException.prototype = {
@@ -28050,8 +27540,8 @@
               t1.$dartReadyToRunMain = A._functionToJS0(new A.main__closure2(_box_0));
               t2 = $.Zone__current;
               t3 = Math.max(100, 1);
-              t4 = A.StreamController_StreamController(null, null, null, false, type$.DebugEvent);
-              t5 = A.StreamController_StreamController(null, null, null, false, type$.List_DebugEvent);
+              t4 = A.StreamController_StreamController(null, null, false, type$.DebugEvent);
+              t5 = A.StreamController_StreamController(null, null, false, type$.List_DebugEvent);
               debugEventController = new A.BatchedStreamController(t3, 1000, t4, t5, new A._AsyncCompleter(new A._Future(t2, type$._Future_bool), type$._AsyncCompleter_bool), type$.BatchedStreamController_DebugEvent);
               t2 = A.List_List$filled(A.QueueList__computeInitialCapacity(null), null, false, type$.nullable_Result_DebugEvent);
               t3 = A.ListQueue$(type$._EventRequest_dynamic);
@@ -28079,7 +27569,7 @@
       });
       return A._asyncStartSync($async$call$0, $async$completer);
     },
-    $signature: 19
+    $signature: 16
   };
   A.main__closure.prototype = {
     call$0() {
@@ -28087,13 +27577,13 @@
       path.toString;
       return A.FutureOfJSAnyToJSPromise_get_toJS(this.manager._restarter.hotReloadStart$1(path), type$.JSArray_nullable_Object);
     },
-    $signature: 10
+    $signature: 11
   };
   A.main__closure0.prototype = {
     call$0() {
       return A.FutureOfVoidToJSPromise_get_toJS(this.manager.hotReloadEnd$0());
     },
-    $signature: 10
+    $signature: 11
   };
   A.main__closure1.prototype = {
     call$2(runId, pauseIsolatesOnStart) {
@@ -28118,7 +27608,7 @@
     $defaultValues() {
       return [null];
     },
-    $signature: 74
+    $signature: 90
   };
   A.main__closure2.prototype = {
     call$0() {
@@ -28145,7 +27635,7 @@
         A._trySendEvent(t1, B.C_JsonCodec.encode$2$toEncodable(t2.serialize$1(t3._debug_event$_build$0()), null), type$.dynamic);
       }
     },
-    $signature: 75
+    $signature: 73
   };
   A.main___closure2.prototype = {
     call$1(b) {
@@ -28154,7 +27644,7 @@
       b.get$_debug_event$_$this().set$_events(t1);
       return t1;
     },
-    $signature: 76
+    $signature: 74
   };
   A.main__closure4.prototype = {
     call$2(kind, eventData) {
@@ -28168,7 +27658,7 @@
         A._trySendEvent(new A._StreamSinkWrapper(t1, A._instanceType(t1)._eval$1("_StreamSinkWrapper<1>")), t2._debug_event$_build$0(), type$.DebugEvent);
       }
     },
-    $signature: 77
+    $signature: 75
   };
   A.main___closure1.prototype = {
     call$1(b) {
@@ -28178,7 +27668,7 @@
       b.get$_debug_event$_$this()._eventData = this.eventData;
       return b;
     },
-    $signature: 78
+    $signature: 76
   };
   A.main__closure5.prototype = {
     call$1(eventData) {
@@ -28190,7 +27680,7 @@
       type$.nullable_void_Function_RegisterEventBuilder._as(new A.main___closure0(eventData)).call$1(t3);
       A._trySendEvent(t1, B.C_JsonCodec.encode$2$toEncodable(t2.serialize$1(t3._register_event$_build$0()), null), type$.dynamic);
     },
-    $signature: 79
+    $signature: 77
   };
   A.main___closure0.prototype = {
     call$1(b) {
@@ -28199,7 +27689,7 @@
       b.get$_register_event$_$this()._register_event$_eventData = this.eventData;
       return b;
     },
-    $signature: 80
+    $signature: 107
   };
   A.main__closure6.prototype = {
     call$0() {
@@ -28225,7 +27715,7 @@
       b.get$_devtools_request$_$this()._devtools_request$_instanceId = t1;
       return b;
     },
-    $signature: 81
+    $signature: 79
   };
   A.main__closure7.prototype = {
     call$1(serialized) {
@@ -28389,12 +27879,12 @@
       });
       return A._asyncStartSync($async$call$1, $async$completer);
     },
-    $signature: 82
+    $signature: 80
   };
   A.main__closure8.prototype = {
     call$1(error) {
     },
-    $signature: 4
+    $signature: 6
   };
   A.main__closure9.prototype = {
     call$1(e) {
@@ -28413,7 +27903,7 @@
       type$.StackTrace._as(stackTrace);
       A.print("Unhandled error detected in the injected client.js script.\n\nYou can disable this script in webdev by passing --no-injected-client if it\nis preventing your app from loading, but note that this will also prevent\nall debugging and hot reload/restart functionality from working.\n\nThe original error is below, please file an issue at\nhttps://github.com/dart-lang/webdev/issues/new and attach this output:\n\n" + A.S(error) + "\n" + stackTrace.toString$0(0) + "\n");
     },
-    $signature: 9
+    $signature: 13
   };
   A._sendConnectRequest_closure.prototype = {
     call$1(b) {
@@ -28426,7 +27916,7 @@
       b.get$_connect_request$_$this()._entrypointPath = t1;
       return b;
     },
-    $signature: 83
+    $signature: 81
   };
   A._launchCommunicationWithDebugExtension_closure.prototype = {
     call$1(b) {
@@ -28455,13 +27945,13 @@
       b.get$_$this()._workspaceName = t1;
       return b;
     },
-    $signature: 110
+    $signature: 82
   };
   A._handleAuthRequest_closure.prototype = {
     call$1(isAuthenticated) {
       return A._dispatchEvent("dart-auth-response", "" + A._asBool(isAuthenticated));
     },
-    $signature: 85
+    $signature: 83
   };
   A._sendResponse_closure.prototype = {
     call$1(b) {
@@ -28725,13 +28215,13 @@
       A._asJSObject(A._asJSObject(init.G.dartDevEmbedder).config).capturedMainHandler = null;
       A.safeUnawaited(this.$this._runMainWhenReady$2(this.readyToRunMain, runMain));
     },
-    $signature: 20
+    $signature: 34
   };
   A.DdcLibraryBundleRestarter_hotReloadStart_closure.prototype = {
     call$1(hotReloadEndCallback) {
       this.$this._capturedHotReloadEndCallback = type$.JavaScriptFunction._as(hotReloadEndCallback);
     },
-    $signature: 20
+    $signature: 34
   };
   A.DdcRestarter.prototype = {
     restart$3$readyToRunMain$reloadedSourcesPath$runId(readyToRunMain, reloadedSourcesPath, runId) {
@@ -28789,7 +28279,7 @@
       this.sub.cancel$0();
       return value;
     },
-    $signature: 87
+    $signature: 85
   };
   A.ReloadingManager.prototype = {
     hotRestart$3$readyToRunMain$reloadedSourcesPath$runId(readyToRunMain, reloadedSourcesPath, runId) {
@@ -29033,12 +28523,12 @@
             case 0:
               // Function start
               $async$goto = 3;
-              return A._asyncAwait(new A.BrowserClient(A._setArrayType([], type$.JSArray_JSObject))._sendUnstreamed$3("GET", A.Uri_parse(A._asString(type$.JavaScriptObject._as(init.G.$requireLoader).digestsPath)), null), $async$_getDigests$0);
+              return A._asyncAwait(new A.BrowserClient(A.LinkedHashSet_LinkedHashSet$_empty(type$.JSObject))._sendUnstreamed$3("GET", A.Uri_parse(A._asString(type$.JavaScriptObject._as(init.G.$requireLoader).digestsPath)), null), $async$_getDigests$0);
             case 3:
               // returning from await.
               response = $async$result;
               t1 = type$.String;
-              $async$returnValue = type$.Map_dynamic_dynamic._as(B.C_JsonCodec.decode$2$reviver(A.encodingForContentTypeHeader(A._contentTypeForHeaders(response.headers)).decode$1(response.bodyBytes), null)).cast$2$0(0, t1, t1);
+              $async$returnValue = type$.Map_dynamic_dynamic._as(B.C_JsonCodec.decode$2$reviver(A.encodingForCharset(A._contentTypeForHeaders(response.headers).parameters._collection$_map.$index(0, "charset")).decode$1(response.bodyBytes), null)).cast$2$0(0, t1, t1);
               // goto return
               $async$goto = 1;
               break;
@@ -29295,7 +28785,7 @@
     call$1(e) {
       this.completer.completeError$2(new A.HotReloadFailedException(A._asString(type$.JavaScriptObject._as(e).message)), this.stackTrace);
     },
-    $signature: 90
+    $signature: 88
   };
   A._createScript_closure.prototype = {
     call$0() {
@@ -29304,13 +28794,13 @@
         return new A._createScript__closure();
       return new A._createScript__closure0(nonce);
     },
-    $signature: 91
+    $signature: 89
   };
   A._createScript__closure.prototype = {
     call$0() {
       return A._asJSObject(A._asJSObject(init.G.document).createElement("script"));
     },
-    $signature: 10
+    $signature: 11
   };
   A._createScript__closure0.prototype = {
     call$0() {
@@ -29318,7 +28808,7 @@
       scriptElement.setAttribute("nonce", this.nonce);
       return scriptElement;
     },
-    $signature: 10
+    $signature: 11
   };
   A.runMain_closure.prototype = {
     call$0() {
@@ -29365,58 +28855,55 @@
       _instance = hunkHelpers.installInstanceTearOff,
       _instance_2_u = hunkHelpers._instance_2u,
       _instance_1_i = hunkHelpers._instance_1i,
-      _instance_1_u = hunkHelpers._instance_1u,
-      _instance_0_u = hunkHelpers._instance_0u;
-    _static_2(J, "_interceptors_JSArray__compareAny$closure", "JSArray__compareAny", 32);
-    _static_1(A, "async__AsyncRun__scheduleImmediateJsOverride$closure", "_AsyncRun__scheduleImmediateJsOverride", 13);
-    _static_1(A, "async__AsyncRun__scheduleImmediateWithSetImmediate$closure", "_AsyncRun__scheduleImmediateWithSetImmediate", 13);
-    _static_1(A, "async__AsyncRun__scheduleImmediateWithTimer$closure", "_AsyncRun__scheduleImmediateWithTimer", 13);
+      _instance_0_u = hunkHelpers._instance_0u,
+      _instance_1_u = hunkHelpers._instance_1u;
+    _static_2(J, "_interceptors_JSArray__compareAny$closure", "JSArray__compareAny", 20);
+    _static_1(A, "async__AsyncRun__scheduleImmediateJsOverride$closure", "_AsyncRun__scheduleImmediateJsOverride", 12);
+    _static_1(A, "async__AsyncRun__scheduleImmediateWithSetImmediate$closure", "_AsyncRun__scheduleImmediateWithSetImmediate", 12);
+    _static_1(A, "async__AsyncRun__scheduleImmediateWithTimer$closure", "_AsyncRun__scheduleImmediateWithTimer", 12);
     _static_0(A, "async___startMicrotaskLoop$closure", "_startMicrotaskLoop", 0);
     _static_1(A, "async___nullDataHandler$closure", "_nullDataHandler", 7);
-    _static_2(A, "async___nullErrorHandler$closure", "_nullErrorHandler", 9);
+    _static_2(A, "async___nullErrorHandler$closure", "_nullErrorHandler", 13);
     _static_0(A, "async___nullDoneHandler$closure", "_nullDoneHandler", 0);
-    _static(A, "async___rootHandleUncaughtError$closure", 5, null, ["call$5"], ["_rootHandleUncaughtError"], 94, 0);
+    _static(A, "async___rootHandleUncaughtError$closure", 5, null, ["call$5"], ["_rootHandleUncaughtError"], 92, 0);
     _static(A, "async___rootRun$closure", 4, null, ["call$1$4", "call$4"], ["_rootRun", function($self, $parent, zone, f) {
       return A._rootRun($self, $parent, zone, f, type$.dynamic);
-    }], 95, 1);
+    }], 93, 1);
     _static(A, "async___rootRunUnary$closure", 5, null, ["call$2$5", "call$5"], ["_rootRunUnary", function($self, $parent, zone, f, arg) {
       var t1 = type$.dynamic;
       return A._rootRunUnary($self, $parent, zone, f, arg, t1, t1);
-    }], 96, 1);
+    }], 94, 1);
     _static(A, "async___rootRunBinary$closure", 6, null, ["call$3$6", "call$6"], ["_rootRunBinary", function($self, $parent, zone, f, arg1, arg2) {
       var t1 = type$.dynamic;
       return A._rootRunBinary($self, $parent, zone, f, arg1, arg2, t1, t1, t1);
-    }], 97, 1);
+    }], 95, 1);
     _static(A, "async___rootRegisterCallback$closure", 4, null, ["call$1$4", "call$4"], ["_rootRegisterCallback", function($self, $parent, zone, f) {
       return A._rootRegisterCallback($self, $parent, zone, f, type$.dynamic);
-    }], 98, 0);
+    }], 96, 0);
     _static(A, "async___rootRegisterUnaryCallback$closure", 4, null, ["call$2$4", "call$4"], ["_rootRegisterUnaryCallback", function($self, $parent, zone, f) {
       var t1 = type$.dynamic;
       return A._rootRegisterUnaryCallback($self, $parent, zone, f, t1, t1);
-    }], 99, 0);
+    }], 97, 0);
     _static(A, "async___rootRegisterBinaryCallback$closure", 4, null, ["call$3$4", "call$4"], ["_rootRegisterBinaryCallback", function($self, $parent, zone, f) {
       var t1 = type$.dynamic;
       return A._rootRegisterBinaryCallback($self, $parent, zone, f, t1, t1, t1);
-    }], 100, 0);
-    _static(A, "async___rootErrorCallback$closure", 5, null, ["call$5"], ["_rootErrorCallback"], 101, 0);
-    _static(A, "async___rootScheduleMicrotask$closure", 4, null, ["call$4"], ["_rootScheduleMicrotask"], 102, 0);
-    _static(A, "async___rootCreateTimer$closure", 5, null, ["call$5"], ["_rootCreateTimer"], 103, 0);
-    _static(A, "async___rootCreatePeriodicTimer$closure", 5, null, ["call$5"], ["_rootCreatePeriodicTimer"], 104, 0);
-    _static(A, "async___rootPrint$closure", 4, null, ["call$4"], ["_rootPrint"], 105, 0);
-    _static_1(A, "async___printToZone$closure", "_printToZone", 106);
-    _static(A, "async___rootFork$closure", 5, null, ["call$5"], ["_rootFork"], 107, 0);
+    }], 98, 0);
+    _static(A, "async___rootErrorCallback$closure", 5, null, ["call$5"], ["_rootErrorCallback"], 99, 0);
+    _static(A, "async___rootScheduleMicrotask$closure", 4, null, ["call$4"], ["_rootScheduleMicrotask"], 100, 0);
+    _static(A, "async___rootCreateTimer$closure", 5, null, ["call$5"], ["_rootCreateTimer"], 101, 0);
+    _static(A, "async___rootCreatePeriodicTimer$closure", 5, null, ["call$5"], ["_rootCreatePeriodicTimer"], 102, 0);
+    _static(A, "async___rootPrint$closure", 4, null, ["call$4"], ["_rootPrint"], 103, 0);
+    _static_1(A, "async___printToZone$closure", "_printToZone", 104);
+    _static(A, "async___rootFork$closure", 5, null, ["call$5"], ["_rootFork"], 105, 0);
     _instance(A._Completer.prototype, "get$completeError", 0, 1, function() {
       return [null];
-    }, ["call$2", "call$1"], ["completeError$2", "completeError$1"], 31, 0, 0);
-    _instance_2_u(A._Future.prototype, "get$_completeError", "_completeError$2", 9);
+    }, ["call$2", "call$1"], ["completeError$2", "completeError$1"], 24, 0, 0);
+    _instance_2_u(A._Future.prototype, "get$_completeError", "_completeError$2", 13);
     var _;
-    _instance_1_i(_ = A._StreamController.prototype, "get$add", "add$1", 8);
+    _instance_1_i(_ = A._StreamController.prototype, "get$add", "add$1", 9);
     _instance(_, "get$addError", 0, 1, function() {
       return [null];
-    }, ["call$2", "call$1"], ["addError$2", "addError$1"], 31, 0, 0);
-    _instance_1_u(_, "get$_add", "_add$1", 8);
-    _instance_2_u(_, "get$_addError", "_addError$2", 9);
-    _instance_0_u(_, "get$_close", "_close$0", 0);
+    }, ["call$2", "call$1"], ["addError$2", "addError$1"], 24, 0, 0);
     _instance_0_u(_ = A._ControllerSubscription.prototype, "get$_onPause", "_onPause$0", 0);
     _instance_0_u(_, "get$_onResume", "_onResume$0", 0);
     _instance_0_u(_ = A._BufferingStreamSubscription.prototype, "get$_onPause", "_onPause$0", 0);
@@ -29424,45 +28911,45 @@
     _instance_0_u(A._DoneStreamSubscription.prototype, "get$_onMicrotask", "_onMicrotask$0", 0);
     _instance_0_u(_ = A._ForwardingStreamSubscription.prototype, "get$_onPause", "_onPause$0", 0);
     _instance_0_u(_, "get$_onResume", "_onResume$0", 0);
-    _instance_1_u(_, "get$_handleData", "_handleData$1", 8);
-    _instance_2_u(_, "get$_handleError", "_handleError$2", 21);
+    _instance_1_u(_, "get$_handleData", "_handleData$1", 9);
+    _instance_2_u(_, "get$_handleError", "_handleError$2", 26);
     _instance_0_u(_, "get$_handleDone", "_handleDone$0", 0);
-    _static_2(A, "collection___defaultEquals$closure", "_defaultEquals0", 18);
-    _static_1(A, "collection___defaultHashCode$closure", "_defaultHashCode", 15);
-    _static_2(A, "collection_ListBase__compareAny$closure", "ListBase__compareAny", 32);
-    _static_1(A, "convert___defaultToEncodable$closure", "_defaultToEncodable", 6);
-    _instance_1_i(_ = A._ByteCallbackSink.prototype, "get$add", "add$1", 8);
+    _static_2(A, "collection___defaultEquals$closure", "_defaultEquals0", 17);
+    _static_1(A, "collection___defaultHashCode$closure", "_defaultHashCode", 18);
+    _static_2(A, "collection_ListBase__compareAny$closure", "ListBase__compareAny", 20);
+    _static_1(A, "convert___defaultToEncodable$closure", "_defaultToEncodable", 4);
+    _instance_1_i(_ = A._ByteCallbackSink.prototype, "get$add", "add$1", 9);
     _instance_0_u(_, "get$close", "close$0", 0);
-    _static_1(A, "core__identityHashCode$closure", "identityHashCode", 15);
-    _static_2(A, "core__identical$closure", "identical", 18);
-    _static_1(A, "core_Uri_decodeComponent$closure", "Uri_decodeComponent", 16);
+    _static_1(A, "core__identityHashCode$closure", "identityHashCode", 18);
+    _static_2(A, "core__identical$closure", "identical", 17);
+    _static_1(A, "core_Uri_decodeComponent$closure", "Uri_decodeComponent", 15);
     _static(A, "math__max$closure", 2, null, ["call$1$2", "call$2"], ["max", function(a, b) {
       return A.max(a, b, type$.num);
-    }], 108, 1);
-    _instance_2_u(_ = A.DeepCollectionEquality.prototype, "get$equals", "equals$2", 18);
-    _instance_1_u(_, "get$hash", "hash$1", 15);
-    _instance_1_u(_, "get$isValidKey", "isValidKey$1", 12);
+    }], 106, 1);
+    _instance_2_u(_ = A.DeepCollectionEquality.prototype, "get$equals", "equals$2", 17);
+    _instance_1_u(_, "get$hash", "hash$1", 18);
+    _instance_1_u(_, "get$isValidKey", "isValidKey$1", 14);
     _static(A, "hot_reload_response_HotReloadResponse___new_tearOff$closure", 0, null, ["call$1", "call$0"], ["HotReloadResponse___new_tearOff", function() {
       return A.HotReloadResponse___new_tearOff(null);
-    }], 109, 0);
+    }], 78, 0);
     _static(A, "hot_restart_response_HotRestartResponse___new_tearOff$closure", 0, null, ["call$1", "call$0"], ["HotRestartResponse___new_tearOff", function() {
       return A.HotRestartResponse___new_tearOff(null);
-    }], 73, 0);
-    _static_1(A, "case_insensitive_map_CaseInsensitiveMap__canonicalizer$closure", "CaseInsensitiveMap__canonicalizer", 16);
+    }], 72, 0);
+    _static_1(A, "case_insensitive_map_CaseInsensitiveMap__canonicalizer$closure", "CaseInsensitiveMap__canonicalizer", 15);
     _instance_1_u(_ = A.SseClient.prototype, "get$_onIncomingControlMessage", "_onIncomingControlMessage$1", 2);
     _instance_1_u(_, "get$_onIncomingMessage", "_onIncomingMessage$1", 2);
     _instance_0_u(_, "get$_onOutgoingDone", "_onOutgoingDone$0", 0);
-    _instance_1_u(_, "get$_onOutgoingMessage", "_onOutgoingMessage$1", 67);
+    _instance_1_u(_, "get$_onOutgoingMessage", "_onOutgoingMessage$1", 65);
     _static_1(A, "client___handleAuthRequest$closure", "_handleAuthRequest", 2);
-    _instance_1_u(_ = A.RequireRestarter.prototype, "get$_moduleParents", "_moduleParents$1", 88);
-    _instance_2_u(_, "get$_moduleTopologicalCompare", "_moduleTopologicalCompare$2", 89);
+    _instance_1_u(_ = A.RequireRestarter.prototype, "get$_moduleParents", "_moduleParents$1", 86);
+    _instance_2_u(_, "get$_moduleTopologicalCompare", "_moduleTopologicalCompare$2", 87);
   })();
   (function inheritance() {
     var _mixin = hunkHelpers.mixin,
       _inherit = hunkHelpers.inherit,
       _inheritMany = hunkHelpers.inheritMany;
     _inherit(A.Object, null);
-    _inheritMany(A.Object, [A.JS_CONST, J.Interceptor, A.SafeToStringHook, J.ArrayIterator, A.Iterable, A.CastIterator, A.Closure, A.MapBase, A.Error, A.ListBase, A.SentinelValue, A.ListIterator, A.MappedIterator, A.WhereIterator, A.ExpandIterator, A.TakeIterator, A.SkipIterator, A.EmptyIterator, A.WhereTypeIterator, A.FixedLengthListMixin, A.UnmodifiableListMixin, A._Record, A.ConstantMap, A._KeysOrValuesOrElementsIterator, A.TypeErrorDecoder, A.NullThrownFromJavaScriptException, A.ExceptionAndStackTrace, A._StackTrace, A.LinkedHashMapCell, A.LinkedHashMapKeyIterator, A.LinkedHashMapValueIterator, A.LinkedHashMapEntryIterator, A.JSSyntaxRegExp, A._MatchImplementation, A._AllMatchesIterator, A.StringMatch, A._StringAllMatchesIterator, A._Cell, A._UnmodifiableNativeByteBufferView, A.Rti, A._FunctionParameters, A._Type, A._TimerImpl, A._AsyncAwaitCompleter, A._AsyncStarStreamController, A._IterationMarker, A.AsyncError, A.TimeoutException, A._Completer, A._FutureListener, A._Future, A._AsyncCallbackEntry, A.Stream, A._StreamController, A._SyncStreamControllerDispatch, A._AsyncStreamControllerDispatch, A._BufferingStreamSubscription, A._StreamSinkWrapper, A._AddStreamState, A._DelayedEvent, A._DelayedDone, A._PendingEvents, A._DoneStreamSubscription, A._StreamIterator, A._ZoneFunction, A._ZoneSpecification, A._ZoneDelegate, A._Zone, A._HashMapKeyIterator, A.SetBase, A._HashSetIterator, A._LinkedHashSetCell, A._LinkedHashSetIterator, A._UnmodifiableMapMixin, A.MapView, A._ListQueueIterator, A._SplayTreeNode, A._SplayTree, A._SplayTreeIterator, A.Codec, A.Converter, A._Base64Encoder, A._Base64Decoder, A.ByteConversionSink, A._JsonStringifier, A._Utf8Encoder, A._Utf8Decoder, A._BigIntImpl, A.DateTime, A.Duration, A.OutOfMemoryError, A.StackOverflowError, A._Exception, A.FormatException, A.IntegerDivisionByZeroException, A.MapEntry, A.Null, A._StringStackTrace, A.StringBuffer, A._Uri, A.UriData, A._SimpleUri, A.NullRejectionException, A._JSRandom, A._JSSecureRandom, A.AsyncMemoizer, A.DelegatingStreamSink, A.ErrorResult, A.ValueResult, A.StreamQueue, A._NextRequest, A._HasNextRequest, A.BuiltList, A.ListBuilder, A.BuiltListMultimap, A.ListMultimapBuilder, A.BuiltMap, A.MapBuilder, A.BuiltSet, A.SetBuilder, A.BuiltSetMultimap, A.SetMultimapBuilder, A.EnumClass, A.IndentingBuiltValueToStringHelper, A.JsonObject, A.FullType, A.BigIntSerializer, A.BoolSerializer, A.BuiltJsonSerializers, A.BuiltJsonSerializersBuilder, A.BuiltListMultimapSerializer, A.BuiltListSerializer, A.BuiltMapSerializer, A.BuiltSetMultimapSerializer, A.BuiltSetSerializer, A.DateTimeSerializer, A.DoubleSerializer, A.DurationSerializer, A.Int32Serializer, A.Int64Serializer, A.IntSerializer, A.JsonObjectSerializer, A.ListSerializer, A.MapSerializer, A.NullSerializer, A.NumSerializer, A.RegExpSerializer, A.SetSerializer, A.StringSerializer, A.Uint8ListSerializer, A.UriSerializer, A.CanonicalizedMap, A.DefaultEquality, A.IterableEquality, A.ListEquality, A._UnorderedEquality, A._MapEntry, A.MapEquality, A.DeepCollectionEquality, A._QueueList_Object_ListMixin, A.BuildResult, A._$BuildStatusSerializer, A._$BuildResultSerializer, A.BuildResultBuilder, A.ConnectRequest, A._$ConnectRequestSerializer, A.ConnectRequestBuilder, A.DebugEvent, A.BatchedDebugEvents, A._$DebugEventSerializer, A._$BatchedDebugEventsSerializer, A.DebugEventBuilder, A.BatchedDebugEventsBuilder, A.DebugInfo, A._$DebugInfoSerializer, A.DebugInfoBuilder, A.DevToolsRequest, A.DevToolsResponse, A._$DevToolsRequestSerializer, A._$DevToolsResponseSerializer, A.DevToolsRequestBuilder, A.DevToolsResponseBuilder, A.ErrorResponse, A._$ErrorResponseSerializer, A.ErrorResponseBuilder, A.ExtensionRequest, A.ExtensionResponse, A.ExtensionEvent, A.BatchedEvents, A._$ExtensionRequestSerializer, A._$ExtensionResponseSerializer, A._$ExtensionEventSerializer, A._$BatchedEventsSerializer, A.ExtensionRequestBuilder, A.ExtensionResponseBuilder, A.ExtensionEventBuilder, A.BatchedEventsBuilder, A.HotReloadRequest, A._$HotReloadRequestSerializer, A.HotReloadRequestBuilder, A.HotReloadResponse, A._$HotReloadResponseSerializer, A.HotReloadResponseBuilder, A.HotRestartRequest, A._$HotRestartRequestSerializer, A.HotRestartRequestBuilder, A.HotRestartResponse, A._$HotRestartResponseSerializer, A.HotRestartResponseBuilder, A.IsolateExit, A.IsolateStart, A._$IsolateExitSerializer, A._$IsolateStartSerializer, A.IsolateExitBuilder, A.IsolateStartBuilder, A.RegisterEvent, A._$RegisterEventSerializer, A.RegisterEventBuilder, A.RunRequest, A._$RunRequestSerializer, A.ServiceExtensionRequest, A._$ServiceExtensionRequestSerializer, A.ServiceExtensionRequestBuilder, A.ServiceExtensionResponse, A._$ServiceExtensionResponseSerializer, A.ServiceExtensionResponseBuilder, A.BatchedStreamController, A.SocketClient, A.Int32, A.Int64, A._StackState, A.ClientException, A.BaseClient, A.BaseRequest, A.BaseResponse, A.MediaType, A.Level, A.LogRecord, A.Logger, A.Context, A.Style, A.ParsedPath, A.PathException, A.Pool, A.PoolResource, A.SourceFile, A.SourceLocationMixin, A.SourceSpanMixin, A.Highlighter, A._Highlight, A._Line, A.SourceLocation, A.SourceSpanException, A.StreamChannelMixin, A._GuaranteeSink, A.StreamChannelController, A.StringScanner, A.RNG, A.UuidV1, A.EventStreamProvider, A._EventStreamSubscription, A.BrowserWebSocket, A.WebSocketEvent, A.WebSocketException, A.WebSocketChannelException, A.DdcLibraryBundleRestarter, A.DdcRestarter, A.ReloadingManager, A.HotReloadFailedException, A.RequireRestarter]);
+    _inheritMany(A.Object, [A.JS_CONST, J.Interceptor, A.SafeToStringHook, J.ArrayIterator, A.Iterable, A.CastIterator, A.Closure, A.MapBase, A.Error, A.ListBase, A.SentinelValue, A.ListIterator, A.MappedIterator, A.WhereIterator, A.ExpandIterator, A.TakeIterator, A.SkipIterator, A.EmptyIterator, A.WhereTypeIterator, A.FixedLengthListMixin, A.UnmodifiableListMixin, A._Record, A.ConstantMap, A._KeysOrValuesOrElementsIterator, A.TypeErrorDecoder, A.NullThrownFromJavaScriptException, A.ExceptionAndStackTrace, A._StackTrace, A.LinkedHashMapCell, A.LinkedHashMapKeyIterator, A.LinkedHashMapValueIterator, A.LinkedHashMapEntryIterator, A.JSSyntaxRegExp, A._MatchImplementation, A._AllMatchesIterator, A.StringMatch, A._StringAllMatchesIterator, A._Cell, A.Rti, A._FunctionParameters, A._Type, A._TimerImpl, A._AsyncAwaitCompleter, A.AsyncError, A.TimeoutException, A._Completer, A._FutureListener, A._Future, A._AsyncCallbackEntry, A.Stream, A._StreamController, A._SyncStreamControllerDispatch, A._AsyncStreamControllerDispatch, A._BufferingStreamSubscription, A._StreamSinkWrapper, A._DelayedEvent, A._DelayedDone, A._PendingEvents, A._DoneStreamSubscription, A._StreamIterator, A._ZoneFunction, A._ZoneSpecification, A._ZoneDelegate, A._Zone, A._HashMapKeyIterator, A.SetBase, A._HashSetIterator, A._LinkedHashSetCell, A._LinkedHashSetIterator, A._UnmodifiableMapMixin, A.MapView, A._ListQueueIterator, A._SplayTreeNode, A._SplayTree, A._SplayTreeIterator, A.Codec, A.Converter, A._Base64Encoder, A._Base64Decoder, A.ByteConversionSink, A._JsonStringifier, A._Utf8Encoder, A._Utf8Decoder, A._BigIntImpl, A.DateTime, A.Duration, A.OutOfMemoryError, A.StackOverflowError, A._Exception, A.FormatException, A.IntegerDivisionByZeroException, A.MapEntry, A.Null, A._StringStackTrace, A.StringBuffer, A._Uri, A.UriData, A._SimpleUri, A.NullRejectionException, A._JSRandom, A.AsyncMemoizer, A.DelegatingStreamSink, A.ErrorResult, A.ValueResult, A.StreamQueue, A._NextRequest, A._HasNextRequest, A.BuiltList, A.ListBuilder, A.BuiltListMultimap, A.ListMultimapBuilder, A.BuiltMap, A.MapBuilder, A.BuiltSet, A.SetBuilder, A.BuiltSetMultimap, A.SetMultimapBuilder, A.EnumClass, A.IndentingBuiltValueToStringHelper, A.JsonObject, A.FullType, A.BigIntSerializer, A.BoolSerializer, A.BuiltJsonSerializers, A.BuiltJsonSerializersBuilder, A.BuiltListMultimapSerializer, A.BuiltListSerializer, A.BuiltMapSerializer, A.BuiltSetMultimapSerializer, A.BuiltSetSerializer, A.DateTimeSerializer, A.DoubleSerializer, A.DurationSerializer, A.Int32Serializer, A.Int64Serializer, A.IntSerializer, A.JsonObjectSerializer, A.ListSerializer, A.MapSerializer, A.NullSerializer, A.NumSerializer, A.RegExpSerializer, A.SetSerializer, A.StringSerializer, A.Uint8ListSerializer, A.UriSerializer, A.CanonicalizedMap, A.DefaultEquality, A.IterableEquality, A.ListEquality, A._UnorderedEquality, A._MapEntry, A.MapEquality, A.DeepCollectionEquality, A._QueueList_Object_ListMixin, A.BuildResult, A._$BuildStatusSerializer, A._$BuildResultSerializer, A.BuildResultBuilder, A.ConnectRequest, A._$ConnectRequestSerializer, A.ConnectRequestBuilder, A.DebugEvent, A.BatchedDebugEvents, A._$DebugEventSerializer, A._$BatchedDebugEventsSerializer, A.DebugEventBuilder, A.BatchedDebugEventsBuilder, A.DebugInfo, A._$DebugInfoSerializer, A.DebugInfoBuilder, A.DevToolsRequest, A.DevToolsResponse, A._$DevToolsRequestSerializer, A._$DevToolsResponseSerializer, A.DevToolsRequestBuilder, A.DevToolsResponseBuilder, A.ErrorResponse, A._$ErrorResponseSerializer, A.ErrorResponseBuilder, A.ExtensionRequest, A.ExtensionResponse, A.ExtensionEvent, A.BatchedEvents, A._$ExtensionRequestSerializer, A._$ExtensionResponseSerializer, A._$ExtensionEventSerializer, A._$BatchedEventsSerializer, A.ExtensionRequestBuilder, A.ExtensionResponseBuilder, A.ExtensionEventBuilder, A.BatchedEventsBuilder, A.HotReloadRequest, A._$HotReloadRequestSerializer, A.HotReloadRequestBuilder, A.HotReloadResponse, A._$HotReloadResponseSerializer, A.HotReloadResponseBuilder, A.HotRestartRequest, A._$HotRestartRequestSerializer, A.HotRestartRequestBuilder, A.HotRestartResponse, A._$HotRestartResponseSerializer, A.HotRestartResponseBuilder, A.IsolateExit, A.IsolateStart, A._$IsolateExitSerializer, A._$IsolateStartSerializer, A.IsolateExitBuilder, A.IsolateStartBuilder, A.RegisterEvent, A._$RegisterEventSerializer, A.RegisterEventBuilder, A.RunRequest, A._$RunRequestSerializer, A.ServiceExtensionRequest, A._$ServiceExtensionRequestSerializer, A.ServiceExtensionRequestBuilder, A.ServiceExtensionResponse, A._$ServiceExtensionResponseSerializer, A.ServiceExtensionResponseBuilder, A.BatchedStreamController, A.SocketClient, A.Int32, A.Int64, A._StackState, A.BaseClient, A.BaseRequest, A.BaseResponse, A.ClientException, A.MediaType, A.Level, A.LogRecord, A.Logger, A.Context, A.Style, A.ParsedPath, A.PathException, A.Pool, A.PoolResource, A.SourceFile, A.SourceLocationMixin, A.SourceSpanMixin, A.Highlighter, A._Highlight, A._Line, A.SourceLocation, A.SourceSpanException, A.StreamChannelMixin, A._GuaranteeSink, A.StreamChannelController, A.StringScanner, A.RNG, A.UuidV1, A.EventStreamProvider, A._EventStreamSubscription, A.BrowserWebSocket, A.WebSocketEvent, A.WebSocketException, A.WebSocketChannelException, A.DdcLibraryBundleRestarter, A.DdcRestarter, A.ReloadingManager, A.HotReloadFailedException, A.RequireRestarter]);
     _inheritMany(J.Interceptor, [J.JSBool, J.JSNull, J.JavaScriptObject, J.JavaScriptBigInt, J.JavaScriptSymbol, J.JSNumber, J.JSString]);
     _inheritMany(J.JavaScriptObject, [J.LegacyJavaScriptObject, J.JSArray, A.NativeByteBuffer, A.NativeTypedData]);
     _inheritMany(J.LegacyJavaScriptObject, [J.PlainJavaScriptObject, J.UnknownJavaScriptObject, J.JavaScriptFunction]);
@@ -29473,14 +28960,14 @@
     _inheritMany(A._CastIterableBase, [A.CastIterable, A.__CastListBase__CastIterableBase_ListMixin]);
     _inherit(A._EfficientLengthCastIterable, A.CastIterable);
     _inherit(A._CastListBase, A.__CastListBase__CastIterableBase_ListMixin);
-    _inheritMany(A.Closure, [A.Closure2Args, A.Closure0Args, A.Instantiation, A.TearOffClosure, A.initHooks_closure, A.initHooks_closure1, A._AsyncRun__initializeScheduleImmediate_internalCallback, A._AsyncRun__initializeScheduleImmediate_closure, A._awaitOnObject_closure, A._asyncStarHelper_closure0, A._Future__propagateToListeners_handleWhenCompleteCallback_closure, A._Future_timeout_closure0, A.Stream_length_closure, A.Stream_first_closure0, A._CustomZone_bindUnaryCallback_closure, A._CustomZone_bindUnaryCallbackGuarded_closure, A._RootZone_bindUnaryCallback_closure, A._RootZone_bindUnaryCallbackGuarded_closure, A.runZonedGuarded_closure, A._CustomHashMap_closure, A._LinkedCustomHashMap_closure, A._BigIntImpl_hashCode_finish, A._Uri__makePath_closure, A.FutureOfJSAnyToJSPromise_get_toJS__closure, A.FutureOfVoidToJSPromise_get_toJS__closure, A.jsify__convert, A.promiseToFuture_closure, A.promiseToFuture_closure0, A.dartify_convert, A.StreamQueue__ensureListening_closure, A.BuiltListMultimap_BuiltListMultimap_closure, A.BuiltListMultimap_hashCode_closure, A.ListMultimapBuilder_replace_closure, A.BuiltMap_BuiltMap_closure, A.BuiltMap_hashCode_closure, A.BuiltSet_hashCode_closure, A.BuiltSetMultimap_hashCode_closure, A.SetMultimapBuilder_replace_closure, A.newBuiltValueToStringHelper_closure, A.BuiltListMultimapSerializer_serialize_closure, A.BuiltListMultimapSerializer_deserialize_closure, A.BuiltListSerializer_serialize_closure, A.BuiltListSerializer_deserialize_closure, A.BuiltSetMultimapSerializer_serialize_closure, A.BuiltSetMultimapSerializer_deserialize_closure, A.BuiltSetSerializer_serialize_closure, A.BuiltSetSerializer_deserialize_closure, A.ListSerializer_serialize_closure, A.SetSerializer_serialize_closure, A.CanonicalizedMap_keys_closure, A.ServiceExtensionResponse_ServiceExtensionResponse$fromResult_closure, A.WebSocketClient_stream_closure, A.BaseRequest_closure0, A.BrowserClient_send_closure, A._readBody_closure, A._readBody_closure0, A.ByteStream_toBytes_closure, A.MediaType_toString__closure, A.expectQuotedString_closure, A.Context_joinAll_closure, A.Context_split_closure, A._validateArgList_closure, A.Pool__runOnRelease_closure, A.Highlighter$__closure, A.Highlighter$___closure, A.Highlighter$__closure0, A.Highlighter__collateLines_closure, A.Highlighter__collateLines_closure1, A.Highlighter__collateLines__closure, A.Highlighter_highlight_closure, A.SseClient_closure0, A.SseClient_closure1, A._GuaranteeSink__addError_closure, A._EventStreamSubscription_closure, A._EventStreamSubscription_onData_closure, A.BrowserWebSocket_connect_closure, A.BrowserWebSocket_connect_closure0, A.BrowserWebSocket_connect_closure1, A.BrowserWebSocket_connect_closure2, A.AdapterWebSocketChannel_closure, A.AdapterWebSocketChannel__closure, A.AdapterWebSocketChannel__closure0, A.AdapterWebSocketChannel_closure0, A.main__closure1, A.main__closure3, A.main___closure2, A.main___closure1, A.main__closure5, A.main___closure0, A.main___closure, A.main__closure7, A.main__closure8, A.main__closure9, A._sendConnectRequest_closure, A._launchCommunicationWithDebugExtension_closure, A._handleAuthRequest_closure, A._sendResponse_closure, A.DdcLibraryBundleRestarter_restart_closure, A.DdcLibraryBundleRestarter_hotReloadStart_closure, A.DdcRestarter_restart_closure0, A.DdcRestarter_restart_closure, A.RequireRestarter__reloadModule_closure0, A.JSArrayExtension_toDartIterable_closure]);
-    _inheritMany(A.Closure2Args, [A._CastListBase_sort_closure, A.CastMap_forEach_closure, A.ConstantMap_map_closure, A.JsLinkedHashMap_addAll_closure, A.initHooks_closure0, A._awaitOnObject_closure0, A._wrapJsFunctionForAsync_closure, A._Future__propagateToListeners_handleWhenCompleteCallback_closure0, A._Future_timeout_closure1, A._AddStreamState_makeErrorHandler_closure, A._BufferingStreamSubscription_asFuture_closure0, A.LinkedHashMap_LinkedHashMap$from_closure, A.MapBase_mapToString_closure, A._JsonStringifier_writeMap_closure, A._BigIntImpl_hashCode_combine, A.Uri__parseIPv4Address_error, A.Uri_parseIPv6Address_error, A.Uri_parseIPv6Address_parseHex, A.FutureOfJSAnyToJSPromise_get_toJS_closure, A.FutureOfJSAnyToJSPromise_get_toJS__closure0, A.FutureOfVoidToJSPromise_get_toJS_closure, A.FutureOfVoidToJSPromise_get_toJS__closure0, A.StreamQueue__ensureListening_closure1, A.hashObjects_closure, A.MapBuilder_replace_closure, A.CanonicalizedMap_addAll_closure, A.CanonicalizedMap_forEach_closure, A.CanonicalizedMap_map_closure, A.safeUnawaited_closure, A.BaseRequest_closure, A.MediaType_toString_closure, A.Pool__runOnRelease_closure0, A.Highlighter__collateLines_closure0, A.main__closure4, A.main_closure0]);
+    _inheritMany(A.Closure, [A.Closure2Args, A.Closure0Args, A.Instantiation, A.TearOffClosure, A.initHooks_closure, A.initHooks_closure1, A._AsyncRun__initializeScheduleImmediate_internalCallback, A._AsyncRun__initializeScheduleImmediate_closure, A._awaitOnObject_closure, A._Future__propagateToListeners_handleWhenCompleteCallback_closure, A._Future_timeout_closure0, A.Stream_length_closure, A.Stream_first_closure0, A._CustomZone_bindUnaryCallback_closure, A._CustomZone_bindUnaryCallbackGuarded_closure, A._RootZone_bindUnaryCallback_closure, A._RootZone_bindUnaryCallbackGuarded_closure, A.runZonedGuarded_closure, A._CustomHashMap_closure, A._LinkedCustomHashMap_closure, A._BigIntImpl_hashCode_finish, A._Uri__makePath_closure, A.FutureOfJSAnyToJSPromise_get_toJS__closure, A.FutureOfVoidToJSPromise_get_toJS__closure, A.jsify__convert, A.promiseToFuture_closure, A.promiseToFuture_closure0, A.dartify_convert, A.StreamQueue__ensureListening_closure, A.BuiltListMultimap_BuiltListMultimap_closure, A.BuiltListMultimap_hashCode_closure, A.ListMultimapBuilder_replace_closure, A.BuiltMap_BuiltMap_closure, A.BuiltMap_hashCode_closure, A.BuiltSet_hashCode_closure, A.BuiltSetMultimap_hashCode_closure, A.SetMultimapBuilder_replace_closure, A.newBuiltValueToStringHelper_closure, A.BuiltListMultimapSerializer_serialize_closure, A.BuiltListMultimapSerializer_deserialize_closure, A.BuiltListSerializer_serialize_closure, A.BuiltListSerializer_deserialize_closure, A.BuiltSetMultimapSerializer_serialize_closure, A.BuiltSetMultimapSerializer_deserialize_closure, A.BuiltSetSerializer_serialize_closure, A.BuiltSetSerializer_deserialize_closure, A.ListSerializer_serialize_closure, A.SetSerializer_serialize_closure, A.CanonicalizedMap_keys_closure, A.ServiceExtensionResponse_ServiceExtensionResponse$fromResult_closure, A.WebSocketClient_stream_closure, A.BaseRequest_closure0, A.BrowserClient_send_closure, A.BrowserClient_send_closure0, A.ByteStream_toBytes_closure, A.MediaType_toString__closure, A.expectQuotedString_closure, A.Context_joinAll_closure, A.Context_split_closure, A._validateArgList_closure, A.Pool__runOnRelease_closure, A.Highlighter$__closure, A.Highlighter$___closure, A.Highlighter$__closure0, A.Highlighter__collateLines_closure, A.Highlighter__collateLines_closure1, A.Highlighter__collateLines__closure, A.Highlighter_highlight_closure, A.SseClient_closure0, A.SseClient_closure1, A.generateUuidV4_generateBits, A._GuaranteeSink__addError_closure, A._EventStreamSubscription_closure, A._EventStreamSubscription_onData_closure, A.BrowserWebSocket_connect_closure, A.BrowserWebSocket_connect_closure0, A.BrowserWebSocket_connect_closure1, A.BrowserWebSocket_connect_closure2, A.AdapterWebSocketChannel_closure, A.AdapterWebSocketChannel__closure, A.AdapterWebSocketChannel__closure0, A.AdapterWebSocketChannel_closure0, A.main__closure1, A.main__closure3, A.main___closure2, A.main___closure1, A.main__closure5, A.main___closure0, A.main___closure, A.main__closure7, A.main__closure8, A.main__closure9, A._sendConnectRequest_closure, A._launchCommunicationWithDebugExtension_closure, A._handleAuthRequest_closure, A._sendResponse_closure, A.DdcLibraryBundleRestarter_restart_closure, A.DdcLibraryBundleRestarter_hotReloadStart_closure, A.DdcRestarter_restart_closure0, A.DdcRestarter_restart_closure, A.RequireRestarter__reloadModule_closure0, A.JSArrayExtension_toDartIterable_closure]);
+    _inheritMany(A.Closure2Args, [A._CastListBase_sort_closure, A.CastMap_forEach_closure, A.ConstantMap_map_closure, A.JsLinkedHashMap_addAll_closure, A.initHooks_closure0, A._awaitOnObject_closure0, A._wrapJsFunctionForAsync_closure, A._Future__propagateToListeners_handleWhenCompleteCallback_closure0, A._Future_timeout_closure1, A._BufferingStreamSubscription_asFuture_closure0, A.LinkedHashMap_LinkedHashMap$from_closure, A.MapBase_mapToString_closure, A._JsonStringifier_writeMap_closure, A._BigIntImpl_hashCode_combine, A.Uri__parseIPv4Address_error, A.Uri_parseIPv6Address_error, A.Uri_parseIPv6Address_parseHex, A.FutureOfJSAnyToJSPromise_get_toJS_closure, A.FutureOfJSAnyToJSPromise_get_toJS__closure0, A.FutureOfVoidToJSPromise_get_toJS_closure, A.FutureOfVoidToJSPromise_get_toJS__closure0, A.StreamQueue__ensureListening_closure1, A.hashObjects_closure, A.MapBuilder_replace_closure, A.CanonicalizedMap_addAll_closure, A.CanonicalizedMap_forEach_closure, A.CanonicalizedMap_map_closure, A.safeUnawaited_closure, A.BaseRequest_closure, A.MediaType_toString_closure, A.Pool__runOnRelease_closure0, A.Highlighter__collateLines_closure0, A.generateUuidV4_printDigits, A.generateUuidV4_bitsDigits, A.main__closure4, A.main_closure0]);
     _inherit(A.CastList, A._CastListBase);
     _inheritMany(A.MapBase, [A.CastMap, A.JsLinkedHashMap, A._HashMap, A._JsonMap]);
     _inheritMany(A.Error, [A.LateError, A.TypeError, A.JsNoSuchMethodError, A.UnknownJsTypeError, A.RuntimeError, A._Error, A.JsonUnsupportedObjectError, A.AssertionError, A.ArgumentError, A.UnsupportedError, A.UnimplementedError, A.StateError, A.ConcurrentModificationError, A.BuiltValueNullFieldError, A.BuiltValueNestedFieldError, A.DeserializationError]);
     _inherit(A.UnmodifiableListBase, A.ListBase);
     _inheritMany(A.UnmodifiableListBase, [A.CodeUnits, A.UnmodifiableListView]);
-    _inheritMany(A.Closure0Args, [A.nullFuture_closure, A._AsyncRun__scheduleImmediateJsOverride_internalCallback, A._AsyncRun__scheduleImmediateWithSetImmediate_internalCallback, A._TimerImpl_internalCallback, A._TimerImpl$periodic_closure, A._asyncStarHelper_closure, A._AsyncStarStreamController__resumeBody, A._AsyncStarStreamController__resumeBody_closure, A._AsyncStarStreamController_closure0, A._AsyncStarStreamController_closure1, A._AsyncStarStreamController_closure, A._AsyncStarStreamController__closure, A.Future_Future$microtask_closure, A._Future__addListener_closure, A._Future__prependListeners_closure, A._Future__chainCoreFuture_closure, A._Future__asyncCompleteWithValue_closure, A._Future__asyncCompleteErrorObject_closure, A._Future__propagateToListeners_handleWhenCompleteCallback, A._Future__propagateToListeners_handleValueCallback, A._Future__propagateToListeners_handleError, A._Future_timeout_closure, A.Stream_length_closure0, A.Stream_first_closure, A._StreamController__subscribe_closure, A._StreamController__recordCancel_complete, A._AddStreamState_cancel_closure, A._BufferingStreamSubscription_asFuture_closure, A._BufferingStreamSubscription_asFuture__closure, A._BufferingStreamSubscription__sendError_sendError, A._BufferingStreamSubscription__sendDone_sendDone, A._PendingEvents_schedule_closure, A._cancelAndValue_closure, A._CustomZone_bindCallback_closure, A._CustomZone_bindCallbackGuarded_closure, A._rootHandleError_closure, A._RootZone_bindCallback_closure, A._RootZone_bindCallbackGuarded_closure, A._Utf8Decoder__decoder_closure, A._Utf8Decoder__decoderNonfatal_closure, A.StreamQueue__ensureListening_closure0, A.Serializers_Serializers_closure, A.Serializers_Serializers_closure0, A.Serializers_Serializers_closure1, A.Serializers_Serializers_closure2, A.Serializers_Serializers_closure3, A._$serializers_closure, A._$serializers_closure0, A.BatchedStreamController__hasEventOrTimeOut_closure, A.BatchedStreamController__hasEventDuring_closure, A.MediaType_MediaType$parse_closure, A.Logger_Logger_closure, A.Highlighter_closure, A.Highlighter__writeFileStart_closure, A.Highlighter__writeMultilineHighlights_closure, A.Highlighter__writeMultilineHighlights_closure0, A.Highlighter__writeMultilineHighlights_closure1, A.Highlighter__writeMultilineHighlights_closure2, A.Highlighter__writeMultilineHighlights__closure, A.Highlighter__writeMultilineHighlights__closure0, A.Highlighter__writeHighlightedText_closure, A.Highlighter__writeIndicator_closure, A.Highlighter__writeIndicator_closure0, A.Highlighter__writeIndicator_closure1, A.Highlighter__writeSidebar_closure, A._Highlight_closure, A.SseClient_closure, A.SseClient__closure, A.SseClient__onOutgoingMessage_closure, A.GuaranteeChannel_closure, A.GuaranteeChannel__closure, A.AdapterWebSocketChannel__closure1, A.main_closure, A.main__closure, A.main__closure0, A.main__closure2, A.main__closure6, A.DdcLibraryBundleRestarter__getSrcModuleLibraries_closure, A.RequireRestarter__reload_closure, A.RequireRestarter__reloadModule_closure, A._createScript_closure, A._createScript__closure, A._createScript__closure0, A.runMain_closure]);
+    _inheritMany(A.Closure0Args, [A.nullFuture_closure, A._AsyncRun__scheduleImmediateJsOverride_internalCallback, A._AsyncRun__scheduleImmediateWithSetImmediate_internalCallback, A._TimerImpl_internalCallback, A._TimerImpl$periodic_closure, A.Future_Future$microtask_closure, A._Future__addListener_closure, A._Future__prependListeners_closure, A._Future__chainCoreFuture_closure, A._Future__asyncCompleteWithValue_closure, A._Future__asyncCompleteErrorObject_closure, A._Future__propagateToListeners_handleWhenCompleteCallback, A._Future__propagateToListeners_handleValueCallback, A._Future__propagateToListeners_handleError, A._Future_timeout_closure, A.Stream_length_closure0, A.Stream_first_closure, A._StreamController__subscribe_closure, A._StreamController__recordCancel_complete, A._BufferingStreamSubscription_asFuture_closure, A._BufferingStreamSubscription_asFuture__closure, A._BufferingStreamSubscription__sendError_sendError, A._BufferingStreamSubscription__sendDone_sendDone, A._PendingEvents_schedule_closure, A._cancelAndValue_closure, A._CustomZone_bindCallback_closure, A._CustomZone_bindCallbackGuarded_closure, A._rootHandleError_closure, A._RootZone_bindCallback_closure, A._RootZone_bindCallbackGuarded_closure, A._Utf8Decoder__decoder_closure, A._Utf8Decoder__decoderNonfatal_closure, A.StreamQueue__ensureListening_closure0, A.Serializers_Serializers_closure, A.Serializers_Serializers_closure0, A.Serializers_Serializers_closure1, A.Serializers_Serializers_closure2, A.Serializers_Serializers_closure3, A._$serializers_closure, A._$serializers_closure0, A.BatchedStreamController__hasEventOrTimeOut_closure, A.BatchedStreamController__hasEventDuring_closure, A.MediaType_MediaType$parse_closure, A.Logger_Logger_closure, A.Highlighter_closure, A.Highlighter__writeFileStart_closure, A.Highlighter__writeMultilineHighlights_closure, A.Highlighter__writeMultilineHighlights_closure0, A.Highlighter__writeMultilineHighlights_closure1, A.Highlighter__writeMultilineHighlights_closure2, A.Highlighter__writeMultilineHighlights__closure, A.Highlighter__writeMultilineHighlights__closure0, A.Highlighter__writeHighlightedText_closure, A.Highlighter__writeIndicator_closure, A.Highlighter__writeIndicator_closure0, A.Highlighter__writeIndicator_closure1, A.Highlighter__writeSidebar_closure, A._Highlight_closure, A.SseClient_closure, A.SseClient__closure, A.SseClient__onOutgoingMessage_closure, A.GuaranteeChannel_closure, A.GuaranteeChannel__closure, A.AdapterWebSocketChannel__closure1, A.main_closure, A.main__closure, A.main__closure0, A.main__closure2, A.main__closure6, A.DdcLibraryBundleRestarter__getSrcModuleLibraries_closure, A.RequireRestarter__reload_closure, A.RequireRestarter__reloadModule_closure, A._createScript_closure, A._createScript__closure, A._createScript__closure0, A.runMain_closure]);
     _inheritMany(A.EfficientLengthIterable, [A.ListIterable, A.EmptyIterable, A.LinkedHashMapKeysIterable, A.LinkedHashMapValuesIterable, A.LinkedHashMapEntriesIterable, A._HashMapKeyIterable]);
     _inheritMany(A.ListIterable, [A.SubListIterable, A.MappedListIterable, A.ReversedListIterable, A.ListQueue, A._JsonMapKeyIterable]);
     _inherit(A.EfficientLengthMappedIterable, A.MappedIterable);
@@ -29508,7 +28995,6 @@
     _inheritMany(A._StreamController, [A._AsyncStreamController, A._SyncStreamController]);
     _inherit(A._ControllerStream, A._StreamImpl);
     _inheritMany(A._BufferingStreamSubscription, [A._ControllerSubscription, A._ForwardingStreamSubscription]);
-    _inherit(A._StreamControllerAddStreamState, A._AddStreamState);
     _inheritMany(A._DelayedEvent, [A._DelayedData, A._DelayedError]);
     _inherit(A._MapStream, A._ForwardingStream);
     _inheritMany(A._Zone, [A._CustomZone, A._RootZone]);
@@ -29565,7 +29051,6 @@
     _inherit(A._$ServiceExtensionRequest, A.ServiceExtensionRequest);
     _inherit(A._$ServiceExtensionResponse, A.ServiceExtensionResponse);
     _inheritMany(A.SocketClient, [A.SseSocketClient, A.WebSocketClient]);
-    _inherit(A.RequestAbortedException, A.ClientException);
     _inherit(A.BrowserClient, A.BaseClient);
     _inherit(A.ByteStream, A.StreamView);
     _inherit(A.Request, A.BaseRequest);
@@ -29580,7 +29065,7 @@
     _inherit(A.SourceSpanWithContext, A.SourceSpanBase);
     _inheritMany(A.StreamChannelMixin, [A.SseClient, A.GuaranteeChannel, A.AdapterWebSocketChannel]);
     _inherit(A.StringScannerException, A.SourceSpanFormatException);
-    _inherit(A.CryptoRNG, A.RNG);
+    _inherit(A.MathRNG, A.RNG);
     _inheritMany(A.WebSocketEvent, [A.TextDataReceived, A.BinaryDataReceived, A.CloseReceived]);
     _inherit(A.WebSocketConnectionClosed, A.WebSocketException);
     _inherit(A._WebSocketSink, A.DelegatingStreamSink);
@@ -29602,7 +29087,7 @@
     typeUniverse: {eC: new Map(), tR: {}, eT: {}, tPV: {}, sEA: []},
     mangledGlobalNames: {int: "int", double: "double", num: "num", String: "String", bool: "bool", Null: "Null", List: "List", Object: "Object", Map: "Map", JSObject: "JSObject"},
     mangledNames: {},
-    types: ["~()", "Null()", "~(JSObject)", "Object?(@)", "Null(@)", "Null(Object,StackTrace)", "@(@)", "~(@)", "~(Object?)", "~(Object,StackTrace)", "JSObject()", "Object?(Object?)", "bool(Object?)", "~(~())", "Null(JSObject)", "int(Object?)", "String(String)", "bool(_Highlight)", "bool(Object?,Object?)", "Future<~>()", "Null(JavaScriptFunction)", "~(@,StackTrace)", "bool(String)", "int()", "~(@,@)", "~(Object?,Object?)", "@()", "int(int,int)", "String(Match)", "bool()", "Null(JavaScriptFunction,JavaScriptFunction)", "~(Object[StackTrace?])", "int(@,@)", "int(_Line)", "ListMultimapBuilder<Object,Object>()", "MapBuilder<Object,Object>()", "SetBuilder<Object>()", "int(int,@)", "Object?(~)", "JSObject(Object,StackTrace)", "~(String,int?)", "ListBuilder<DebugEvent>()", "ListBuilder<ExtensionEvent>()", "~(ServiceExtensionResponseBuilder)", "~(String,int)", "String(@)", "bool(String,String)", "int(String)", "Null(String,String[Object?])", "bool(Object)", "~(List<int>)", "MediaType()", "~(String,String)", "int(int)", "Logger()", "~(Zone,ZoneDelegate,Zone,Object,StackTrace)", "String(String?)", "String?()", "ListBuilder<Object>()", "_Future<@>?()", "Object(_Line)", "Object(_Highlight)", "int(_Highlight,_Highlight)", "List<_Line>(MapEntry<Object,List<_Highlight>>)", "~(int,@)", "SourceSpanWithContext()", "Null(@,StackTrace)", "~(String?)", "Future<Null>()", "Null(~())", "Null(WebSocket)", "~(WebSocketEvent)", "Null(Object)", "HotRestartResponse([~(HotRestartResponseBuilder)])", "JSObject(String[bool?])", "~(List<DebugEvent>)", "ListBuilder<DebugEvent>(BatchedDebugEventsBuilder)", "Null(String,String)", "DebugEventBuilder(DebugEventBuilder)", "Null(String)", "RegisterEventBuilder(RegisterEventBuilder)", "DevToolsRequestBuilder(DevToolsRequestBuilder)", "Future<~>(String)", "ConnectRequestBuilder(ConnectRequestBuilder)", "IndentingBuiltValueToStringHelper(String)", "~(bool)", "@(String)", "bool(bool)", "List<String>(String)", "int(String,String)", "Null(JavaScriptObject)", "JSObject()()", "SetMultimapBuilder<Object,Object>()", "@(@,String)", "~(Zone?,ZoneDelegate?,Zone,Object,StackTrace)", "0^(Zone?,ZoneDelegate?,Zone,0^())<Object?>", "0^(Zone?,ZoneDelegate?,Zone,0^(1^),1^)<Object?,Object?>", "0^(Zone?,ZoneDelegate?,Zone,0^(1^,2^),1^,2^)<Object?,Object?,Object?>", "0^()(Zone,ZoneDelegate,Zone,0^())<Object?>", "0^(1^)(Zone,ZoneDelegate,Zone,0^(1^))<Object?,Object?>", "0^(1^,2^)(Zone,ZoneDelegate,Zone,0^(1^,2^))<Object?,Object?,Object?>", "AsyncError?(Zone,ZoneDelegate,Zone,Object,StackTrace?)", "~(Zone?,ZoneDelegate?,Zone,~())", "Timer(Zone,ZoneDelegate,Zone,Duration,~())", "Timer(Zone,ZoneDelegate,Zone,Duration,~(Timer))", "~(Zone,ZoneDelegate,Zone,String)", "~(String)", "Zone(Zone?,ZoneDelegate?,Zone,ZoneSpecification?,Map<Object?,Object?>?)", "0^(0^,0^)<num>", "HotReloadResponse([~(HotReloadResponseBuilder)])", "DebugInfoBuilder(DebugInfoBuilder)"],
+    types: ["~()", "Null()", "~(JSObject)", "Object?(@)", "@(@)", "Null(Object,StackTrace)", "Null(@)", "~(@)", "Null(JSObject)", "~(Object?)", "Object?(Object?)", "JSObject()", "~(~())", "~(Object,StackTrace)", "bool(Object?)", "String(String)", "Future<~>()", "bool(Object?,Object?)", "int(Object?)", "bool(_Highlight)", "int(@,@)", "@()", "int(int)", "Null(JavaScriptFunction,JavaScriptFunction)", "~(Object[StackTrace?])", "~(@,@)", "~(@,StackTrace)", "bool()", "int(int,int)", "String(Match)", "bool(String)", "int()", "String(int,int)", "~(Object?,Object?)", "Null(JavaScriptFunction)", "~(String,String)", "@(String)", "@(@,String)", "Null(~())", "~(String,int)", "ListBuilder<DebugEvent>()", "ListBuilder<ExtensionEvent>()", "~(ServiceExtensionResponseBuilder)", "~(String,int?)", "String(@)", "bool(String,String)", "int(String)", "~(Zone,ZoneDelegate,Zone,Object,StackTrace)", "~(List<int>)", "MediaType()", "JSObject(Object,StackTrace)", "Object?(~)", "Logger()", "int(int,@)", "SetMultimapBuilder<Object,Object>()", "String?()", "int(_Line)", "Null(@,StackTrace)", "Object(_Line)", "Object(_Highlight)", "int(_Highlight,_Highlight)", "List<_Line>(MapEntry<Object,List<_Highlight>>)", "IndentingBuiltValueToStringHelper(String)", "SourceSpanWithContext()", "SetBuilder<Object>()", "~(String?)", "Future<Null>()", "ListBuilder<Object>()", "Null(WebSocket)", "~(WebSocketEvent)", "Null(Object)", "ListMultimapBuilder<Object,Object>()", "HotRestartResponse([~(HotRestartResponseBuilder)])", "~(List<DebugEvent>)", "ListBuilder<DebugEvent>(BatchedDebugEventsBuilder)", "Null(String,String)", "DebugEventBuilder(DebugEventBuilder)", "Null(String)", "HotReloadResponse([~(HotReloadResponseBuilder)])", "DevToolsRequestBuilder(DevToolsRequestBuilder)", "Future<~>(String)", "ConnectRequestBuilder(ConnectRequestBuilder)", "DebugInfoBuilder(DebugInfoBuilder)", "~(bool)", "MapBuilder<Object,Object>()", "bool(bool)", "List<String>(String)", "int(String,String)", "Null(JavaScriptObject)", "JSObject()()", "JSObject(String[bool?])", "~(int,@)", "~(Zone?,ZoneDelegate?,Zone,Object,StackTrace)", "0^(Zone?,ZoneDelegate?,Zone,0^())<Object?>", "0^(Zone?,ZoneDelegate?,Zone,0^(1^),1^)<Object?,Object?>", "0^(Zone?,ZoneDelegate?,Zone,0^(1^,2^),1^,2^)<Object?,Object?,Object?>", "0^()(Zone,ZoneDelegate,Zone,0^())<Object?>", "0^(1^)(Zone,ZoneDelegate,Zone,0^(1^))<Object?,Object?>", "0^(1^,2^)(Zone,ZoneDelegate,Zone,0^(1^,2^))<Object?,Object?,Object?>", "AsyncError?(Zone,ZoneDelegate,Zone,Object,StackTrace?)", "~(Zone?,ZoneDelegate?,Zone,~())", "Timer(Zone,ZoneDelegate,Zone,Duration,~())", "Timer(Zone,ZoneDelegate,Zone,Duration,~(Timer))", "~(Zone,ZoneDelegate,Zone,String)", "~(String)", "Zone(Zone?,ZoneDelegate?,Zone,ZoneSpecification?,Map<Object?,Object?>?)", "0^(0^,0^)<num>", "RegisterEventBuilder(RegisterEventBuilder)", "String(String?)"],
     interceptorsByTag: null,
     leafTags: null,
     arrayRti: Symbol("$ti"),
@@ -29610,7 +29095,7 @@
       "2;": (t1, t2) => o => o instanceof A._Record_2 && t1._is(o._0) && t2._is(o._1)
     }
   };
-  A._Universe_addRules(init.typeUniverse, JSON.parse('{"JavaScriptFunction":"LegacyJavaScriptObject","PlainJavaScriptObject":"LegacyJavaScriptObject","UnknownJavaScriptObject":"LegacyJavaScriptObject","NativeSharedArrayBuffer":"NativeByteBuffer","JavaScriptObject":{"JSObject":[]},"JSArray":{"List":["1"],"JavaScriptObject":[],"EfficientLengthIterable":["1"],"JSObject":[],"Iterable":["1"],"JSIndexable":["1"],"Iterable.E":"1"},"JSBool":{"bool":[],"TrustedGetRuntimeType":[]},"JSNull":{"Null":[],"TrustedGetRuntimeType":[]},"LegacyJavaScriptObject":{"JavaScriptObject":[],"JSObject":[]},"JSArraySafeToStringHook":{"SafeToStringHook":[]},"JSUnmodifiableArray":{"JSArray":["1"],"List":["1"],"JavaScriptObject":[],"EfficientLengthIterable":["1"],"JSObject":[],"Iterable":["1"],"JSIndexable":["1"],"Iterable.E":"1"},"ArrayIterator":{"Iterator":["1"]},"JSNumber":{"double":[],"num":[],"Comparable":["num"]},"JSInt":{"double":[],"int":[],"num":[],"Comparable":["num"],"TrustedGetRuntimeType":[]},"JSNumNotInt":{"double":[],"num":[],"Comparable":["num"],"TrustedGetRuntimeType":[]},"JSString":{"String":[],"Comparable":["String"],"Pattern":[],"JSIndexable":["@"],"TrustedGetRuntimeType":[]},"_CastIterableBase":{"Iterable":["2"]},"CastIterator":{"Iterator":["2"]},"CastIterable":{"_CastIterableBase":["1","2"],"Iterable":["2"],"Iterable.E":"2"},"_EfficientLengthCastIterable":{"CastIterable":["1","2"],"_CastIterableBase":["1","2"],"EfficientLengthIterable":["2"],"Iterable":["2"],"Iterable.E":"2"},"_CastListBase":{"ListBase":["2"],"List":["2"],"_CastIterableBase":["1","2"],"EfficientLengthIterable":["2"],"Iterable":["2"]},"CastList":{"_CastListBase":["1","2"],"ListBase":["2"],"List":["2"],"_CastIterableBase":["1","2"],"EfficientLengthIterable":["2"],"Iterable":["2"],"ListBase.E":"2","Iterable.E":"2"},"CastMap":{"MapBase":["3","4"],"Map":["3","4"],"MapBase.K":"3","MapBase.V":"4"},"LateError":{"Error":[]},"CodeUnits":{"ListBase":["int"],"UnmodifiableListMixin":["int"],"List":["int"],"EfficientLengthIterable":["int"],"Iterable":["int"],"ListBase.E":"int","Iterable.E":"int","UnmodifiableListMixin.E":"int"},"EfficientLengthIterable":{"Iterable":["1"]},"ListIterable":{"EfficientLengthIterable":["1"],"Iterable":["1"]},"SubListIterable":{"ListIterable":["1"],"EfficientLengthIterable":["1"],"Iterable":["1"],"ListIterable.E":"1","Iterable.E":"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"},"WhereIterable":{"Iterable":["1"],"Iterable.E":"1"},"WhereIterator":{"Iterator":["1"]},"ExpandIterable":{"Iterable":["2"],"Iterable.E":"2"},"ExpandIterator":{"Iterator":["2"]},"TakeIterable":{"Iterable":["1"],"Iterable.E":"1"},"EfficientLengthTakeIterable":{"TakeIterable":["1"],"EfficientLengthIterable":["1"],"Iterable":["1"],"Iterable.E":"1"},"TakeIterator":{"Iterator":["1"]},"SkipIterable":{"Iterable":["1"],"Iterable.E":"1"},"EfficientLengthSkipIterable":{"SkipIterable":["1"],"EfficientLengthIterable":["1"],"Iterable":["1"],"Iterable.E":"1"},"SkipIterator":{"Iterator":["1"]},"EmptyIterable":{"EfficientLengthIterable":["1"],"Iterable":["1"],"Iterable.E":"1"},"EmptyIterator":{"Iterator":["1"]},"WhereTypeIterable":{"Iterable":["1"],"Iterable.E":"1"},"WhereTypeIterator":{"Iterator":["1"]},"UnmodifiableListBase":{"ListBase":["1"],"UnmodifiableListMixin":["1"],"List":["1"],"EfficientLengthIterable":["1"],"Iterable":["1"]},"ReversedListIterable":{"ListIterable":["1"],"EfficientLengthIterable":["1"],"Iterable":["1"],"ListIterable.E":"1","Iterable.E":"1"},"_Record_2":{"_Record2":[],"_Record":[]},"ConstantMap":{"Map":["1","2"]},"ConstantStringMap":{"ConstantMap":["1","2"],"Map":["1","2"]},"_KeysOrValues":{"Iterable":["1"],"Iterable.E":"1"},"_KeysOrValuesOrElementsIterator":{"Iterator":["1"]},"Instantiation":{"Closure":[],"Function":[]},"Instantiation1":{"Closure":[],"Function":[]},"NullError":{"TypeError":[],"Error":[]},"JsNoSuchMethodError":{"Error":[]},"UnknownJsTypeError":{"Error":[]},"NullThrownFromJavaScriptException":{"Exception":[]},"_StackTrace":{"StackTrace":[]},"Closure":{"Function":[]},"Closure0Args":{"Closure":[],"Function":[]},"Closure2Args":{"Closure":[],"Function":[]},"TearOffClosure":{"Closure":[],"Function":[]},"StaticClosure":{"Closure":[],"Function":[]},"BoundClosure":{"Closure":[],"Function":[]},"RuntimeError":{"Error":[]},"JsLinkedHashMap":{"MapBase":["1","2"],"LinkedHashMap":["1","2"],"Map":["1","2"],"MapBase.K":"1","MapBase.V":"2"},"LinkedHashMapKeysIterable":{"EfficientLengthIterable":["1"],"Iterable":["1"],"Iterable.E":"1"},"LinkedHashMapKeyIterator":{"Iterator":["1"]},"LinkedHashMapValuesIterable":{"EfficientLengthIterable":["1"],"Iterable":["1"],"Iterable.E":"1"},"LinkedHashMapValueIterator":{"Iterator":["1"]},"LinkedHashMapEntriesIterable":{"EfficientLengthIterable":["MapEntry<1,2>"],"Iterable":["MapEntry<1,2>"],"Iterable.E":"MapEntry<1,2>"},"LinkedHashMapEntryIterator":{"Iterator":["MapEntry<1,2>"]},"JsIdentityLinkedHashMap":{"JsLinkedHashMap":["1","2"],"MapBase":["1","2"],"LinkedHashMap":["1","2"],"Map":["1","2"],"MapBase.K":"1","MapBase.V":"2"},"_Record2":{"_Record":[]},"JSSyntaxRegExp":{"RegExp":[],"Pattern":[]},"_MatchImplementation":{"RegExpMatch":[],"Match":[]},"_AllMatchesIterable":{"Iterable":["RegExpMatch"],"Iterable.E":"RegExpMatch"},"_AllMatchesIterator":{"Iterator":["RegExpMatch"]},"StringMatch":{"Match":[]},"_StringAllMatchesIterable":{"Iterable":["Match"],"Iterable.E":"Match"},"_StringAllMatchesIterator":{"Iterator":["Match"]},"NativeByteBuffer":{"JavaScriptObject":[],"JSObject":[],"ByteBuffer":[],"TrustedGetRuntimeType":[]},"NativeArrayBuffer":{"NativeByteBuffer":[],"JavaScriptObject":[],"JSObject":[],"ByteBuffer":[],"TrustedGetRuntimeType":[]},"NativeTypedData":{"JavaScriptObject":[],"JSObject":[]},"_UnmodifiableNativeByteBufferView":{"ByteBuffer":[]},"NativeByteData":{"JavaScriptObject":[],"ByteData":[],"JSObject":[],"TrustedGetRuntimeType":[]},"NativeTypedArray":{"JavaScriptIndexingBehavior":["1"],"JavaScriptObject":[],"JSObject":[],"JSIndexable":["1"]},"NativeTypedArrayOfDouble":{"ListBase":["double"],"NativeTypedArray":["double"],"List":["double"],"JavaScriptIndexingBehavior":["double"],"JavaScriptObject":[],"EfficientLengthIterable":["double"],"JSObject":[],"JSIndexable":["double"],"Iterable":["double"],"FixedLengthListMixin":["double"]},"NativeTypedArrayOfInt":{"ListBase":["int"],"NativeTypedArray":["int"],"List":["int"],"JavaScriptIndexingBehavior":["int"],"JavaScriptObject":[],"EfficientLengthIterable":["int"],"JSObject":[],"JSIndexable":["int"],"Iterable":["int"],"FixedLengthListMixin":["int"]},"NativeFloat32List":{"Float32List":[],"ListBase":["double"],"NativeTypedArray":["double"],"List":["double"],"JavaScriptIndexingBehavior":["double"],"JavaScriptObject":[],"EfficientLengthIterable":["double"],"JSObject":[],"JSIndexable":["double"],"Iterable":["double"],"FixedLengthListMixin":["double"],"TrustedGetRuntimeType":[],"ListBase.E":"double","Iterable.E":"double","FixedLengthListMixin.E":"double"},"NativeFloat64List":{"Float64List":[],"ListBase":["double"],"NativeTypedArray":["double"],"List":["double"],"JavaScriptIndexingBehavior":["double"],"JavaScriptObject":[],"EfficientLengthIterable":["double"],"JSObject":[],"JSIndexable":["double"],"Iterable":["double"],"FixedLengthListMixin":["double"],"TrustedGetRuntimeType":[],"ListBase.E":"double","Iterable.E":"double","FixedLengthListMixin.E":"double"},"NativeInt16List":{"NativeTypedArrayOfInt":[],"Int16List":[],"ListBase":["int"],"NativeTypedArray":["int"],"List":["int"],"JavaScriptIndexingBehavior":["int"],"JavaScriptObject":[],"EfficientLengthIterable":["int"],"JSObject":[],"JSIndexable":["int"],"Iterable":["int"],"FixedLengthListMixin":["int"],"TrustedGetRuntimeType":[],"ListBase.E":"int","Iterable.E":"int","FixedLengthListMixin.E":"int"},"NativeInt32List":{"NativeTypedArrayOfInt":[],"Int32List":[],"ListBase":["int"],"NativeTypedArray":["int"],"List":["int"],"JavaScriptIndexingBehavior":["int"],"JavaScriptObject":[],"EfficientLengthIterable":["int"],"JSObject":[],"JSIndexable":["int"],"Iterable":["int"],"FixedLengthListMixin":["int"],"TrustedGetRuntimeType":[],"ListBase.E":"int","Iterable.E":"int","FixedLengthListMixin.E":"int"},"NativeInt8List":{"NativeTypedArrayOfInt":[],"Int8List":[],"ListBase":["int"],"NativeTypedArray":["int"],"List":["int"],"JavaScriptIndexingBehavior":["int"],"JavaScriptObject":[],"EfficientLengthIterable":["int"],"JSObject":[],"JSIndexable":["int"],"Iterable":["int"],"FixedLengthListMixin":["int"],"TrustedGetRuntimeType":[],"ListBase.E":"int","Iterable.E":"int","FixedLengthListMixin.E":"int"},"NativeUint16List":{"NativeTypedArrayOfInt":[],"Uint16List":[],"ListBase":["int"],"NativeTypedArray":["int"],"List":["int"],"JavaScriptIndexingBehavior":["int"],"JavaScriptObject":[],"EfficientLengthIterable":["int"],"JSObject":[],"JSIndexable":["int"],"Iterable":["int"],"FixedLengthListMixin":["int"],"TrustedGetRuntimeType":[],"ListBase.E":"int","Iterable.E":"int","FixedLengthListMixin.E":"int"},"NativeUint32List":{"NativeTypedArrayOfInt":[],"Uint32List":[],"ListBase":["int"],"NativeTypedArray":["int"],"List":["int"],"JavaScriptIndexingBehavior":["int"],"JavaScriptObject":[],"EfficientLengthIterable":["int"],"JSObject":[],"JSIndexable":["int"],"Iterable":["int"],"FixedLengthListMixin":["int"],"TrustedGetRuntimeType":[],"ListBase.E":"int","Iterable.E":"int","FixedLengthListMixin.E":"int"},"NativeUint8ClampedList":{"NativeTypedArrayOfInt":[],"Uint8ClampedList":[],"ListBase":["int"],"NativeTypedArray":["int"],"List":["int"],"JavaScriptIndexingBehavior":["int"],"JavaScriptObject":[],"EfficientLengthIterable":["int"],"JSObject":[],"JSIndexable":["int"],"Iterable":["int"],"FixedLengthListMixin":["int"],"TrustedGetRuntimeType":[],"ListBase.E":"int","Iterable.E":"int","FixedLengthListMixin.E":"int"},"NativeUint8List":{"NativeTypedArrayOfInt":[],"Uint8List":[],"ListBase":["int"],"NativeTypedArray":["int"],"List":["int"],"JavaScriptIndexingBehavior":["int"],"JavaScriptObject":[],"EfficientLengthIterable":["int"],"JSObject":[],"JSIndexable":["int"],"Iterable":["int"],"FixedLengthListMixin":["int"],"TrustedGetRuntimeType":[],"ListBase.E":"int","Iterable.E":"int","FixedLengthListMixin.E":"int"},"_Type":{"Type":[]},"_Error":{"Error":[]},"_TypeError":{"TypeError":[],"Error":[]},"AsyncError":{"Error":[]},"_Future":{"Future":["1"]},"_TimerImpl":{"Timer":[]},"_AsyncAwaitCompleter":{"Completer":["1"]},"_Completer":{"Completer":["1"]},"_AsyncCompleter":{"_Completer":["1"],"Completer":["1"]},"_SyncCompleter":{"_Completer":["1"],"Completer":["1"]},"StreamView":{"Stream":["1"]},"_StreamController":{"StreamController":["1"],"StreamSink":["1"],"_StreamControllerLifecycle":["1"],"_EventSink":["1"],"_EventDispatch":["1"]},"_AsyncStreamController":{"_AsyncStreamControllerDispatch":["1"],"_StreamController":["1"],"StreamController":["1"],"StreamSink":["1"],"_StreamControllerLifecycle":["1"],"_EventSink":["1"],"_EventDispatch":["1"]},"_SyncStreamController":{"_SyncStreamControllerDispatch":["1"],"_StreamController":["1"],"StreamController":["1"],"StreamSink":["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"},"_StreamSinkWrapper":{"StreamSink":["1"]},"_StreamControllerAddStreamState":{"_AddStreamState":["1"]},"_BufferingStreamSubscription":{"StreamSubscription":["1"],"_EventSink":["1"],"_EventDispatch":["1"],"_BufferingStreamSubscription.T":"1"},"_StreamImpl":{"Stream":["1"]},"_DelayedData":{"_DelayedEvent":["1"]},"_DelayedError":{"_DelayedEvent":["@"]},"_DelayedDone":{"_DelayedEvent":["@"]},"_DoneStreamSubscription":{"StreamSubscription":["1"]},"_EmptyStream":{"Stream":["1"],"Stream.T":"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"},"_ZoneSpecification":{"ZoneSpecification":[]},"_ZoneDelegate":{"ZoneDelegate":[]},"_Zone":{"Zone":[]},"_CustomZone":{"_Zone":[],"Zone":[]},"_RootZone":{"_Zone":[],"Zone":[]},"_SplayTreeSetNode":{"_SplayTreeNode":["1","_SplayTreeSetNode<1>"],"_SplayTreeNode.K":"1","_SplayTreeNode.1":"_SplayTreeSetNode<1>"},"_HashMap":{"MapBase":["1","2"],"HashMap":["1","2"],"Map":["1","2"],"MapBase.K":"1","MapBase.V":"2"},"_IdentityHashMap":{"_HashMap":["1","2"],"MapBase":["1","2"],"HashMap":["1","2"],"Map":["1","2"],"MapBase.K":"1","MapBase.V":"2"},"_CustomHashMap":{"_HashMap":["1","2"],"MapBase":["1","2"],"HashMap":["1","2"],"Map":["1","2"],"MapBase.K":"1","MapBase.V":"2"},"_HashMapKeyIterable":{"EfficientLengthIterable":["1"],"Iterable":["1"],"Iterable.E":"1"},"_HashMapKeyIterator":{"Iterator":["1"]},"_LinkedCustomHashMap":{"JsLinkedHashMap":["1","2"],"MapBase":["1","2"],"LinkedHashMap":["1","2"],"Map":["1","2"],"MapBase.K":"1","MapBase.V":"2"},"_HashSet":{"_SetBase":["1"],"SetBase":["1"],"Set":["1"],"EfficientLengthIterable":["1"],"Iterable":["1"],"Iterable.E":"1"},"_HashSetIterator":{"Iterator":["1"]},"_LinkedHashSet":{"_SetBase":["1"],"SetBase":["1"],"Set":["1"],"EfficientLengthIterable":["1"],"Iterable":["1"],"Iterable.E":"1"},"_LinkedHashSetIterator":{"Iterator":["1"]},"UnmodifiableListView":{"ListBase":["1"],"UnmodifiableListMixin":["1"],"List":["1"],"EfficientLengthIterable":["1"],"Iterable":["1"],"ListBase.E":"1","Iterable.E":"1","UnmodifiableListMixin.E":"1"},"ListBase":{"List":["1"],"EfficientLengthIterable":["1"],"Iterable":["1"]},"MapBase":{"Map":["1","2"]},"MapView":{"Map":["1","2"]},"UnmodifiableMapView":{"_UnmodifiableMapView_MapView__UnmodifiableMapMixin":["1","2"],"MapView":["1","2"],"_UnmodifiableMapMixin":["1","2"],"Map":["1","2"]},"ListQueue":{"Queue":["1"],"ListIterable":["1"],"EfficientLengthIterable":["1"],"Iterable":["1"],"ListIterable.E":"1","Iterable.E":"1"},"_ListQueueIterator":{"Iterator":["1"]},"SetBase":{"Set":["1"],"EfficientLengthIterable":["1"],"Iterable":["1"]},"_SetBase":{"SetBase":["1"],"Set":["1"],"EfficientLengthIterable":["1"],"Iterable":["1"]},"_SplayTreeIterator":{"Iterator":["3"]},"_SplayTreeKeyIterator":{"_SplayTreeIterator":["1","2","1"],"Iterator":["1"],"_SplayTreeIterator.K":"1","_SplayTreeIterator.T":"1","_SplayTreeIterator.1":"2"},"SplayTreeSet":{"SetBase":["1"],"Set":["1"],"EfficientLengthIterable":["1"],"_SplayTree":["1","_SplayTreeSetNode<1>"],"Iterable":["1"],"Iterable.E":"1","_SplayTree.1":"_SplayTreeSetNode<1>","_SplayTree.K":"1"},"Encoding":{"Codec":["String","List<int>"]},"_JsonMap":{"MapBase":["String","@"],"Map":["String","@"],"MapBase.K":"String","MapBase.V":"@"},"_JsonMapKeyIterable":{"ListIterable":["String"],"EfficientLengthIterable":["String"],"Iterable":["String"],"ListIterable.E":"String","Iterable.E":"String"},"AsciiCodec":{"Encoding":[],"Codec":["String","List<int>"],"Codec.S":"String"},"_UnicodeSubsetEncoder":{"Converter":["String","List<int>"],"StreamTransformer":["String","List<int>"]},"AsciiEncoder":{"Converter":["String","List<int>"],"StreamTransformer":["String","List<int>"]},"_UnicodeSubsetDecoder":{"Converter":["List<int>","String"],"StreamTransformer":["List<int>","String"]},"AsciiDecoder":{"Converter":["List<int>","String"],"StreamTransformer":["List<int>","String"]},"Base64Codec":{"Codec":["List<int>","String"],"Codec.S":"List<int>"},"Base64Encoder":{"Converter":["List<int>","String"],"StreamTransformer":["List<int>","String"]},"Base64Decoder":{"Converter":["String","List<int>"],"StreamTransformer":["String","List<int>"]},"Converter":{"StreamTransformer":["1","2"]},"JsonUnsupportedObjectError":{"Error":[]},"JsonCyclicError":{"Error":[]},"JsonCodec":{"Codec":["Object?","String"],"Codec.S":"Object?"},"JsonEncoder":{"Converter":["Object?","String"],"StreamTransformer":["Object?","String"]},"JsonDecoder":{"Converter":["String","Object?"],"StreamTransformer":["String","Object?"]},"Latin1Codec":{"Encoding":[],"Codec":["String","List<int>"],"Codec.S":"String"},"Latin1Encoder":{"Converter":["String","List<int>"],"StreamTransformer":["String","List<int>"]},"Latin1Decoder":{"Converter":["List<int>","String"],"StreamTransformer":["List<int>","String"]},"Utf8Codec":{"Encoding":[],"Codec":["String","List<int>"],"Codec.S":"String"},"Utf8Encoder":{"Converter":["String","List<int>"],"StreamTransformer":["String","List<int>"]},"Utf8Decoder":{"Converter":["List<int>","String"],"StreamTransformer":["List<int>","String"]},"BigInt":{"Comparable":["BigInt"]},"DateTime":{"Comparable":["DateTime"]},"double":{"num":[],"Comparable":["num"]},"Duration":{"Comparable":["Duration"]},"int":{"num":[],"Comparable":["num"]},"List":{"EfficientLengthIterable":["1"],"Iterable":["1"]},"num":{"Comparable":["num"]},"RegExp":{"Pattern":[]},"RegExpMatch":{"Match":[]},"Set":{"EfficientLengthIterable":["1"],"Iterable":["1"]},"String":{"Comparable":["String"],"Pattern":[]},"_BigIntImpl":{"BigInt":[],"Comparable":["BigInt"]},"AssertionError":{"Error":[]},"TypeError":{"Error":[]},"ArgumentError":{"Error":[]},"RangeError":{"Error":[]},"IndexError":{"Error":[]},"UnsupportedError":{"Error":[]},"UnimplementedError":{"Error":[]},"StateError":{"Error":[]},"ConcurrentModificationError":{"Error":[]},"OutOfMemoryError":{"Error":[]},"StackOverflowError":{"Error":[]},"_Exception":{"Exception":[]},"FormatException":{"Exception":[]},"IntegerDivisionByZeroException":{"Exception":[],"Error":[]},"_StringStackTrace":{"StackTrace":[]},"StringBuffer":{"StringSink":[]},"_Uri":{"Uri":[]},"_SimpleUri":{"Uri":[]},"_DataUri":{"Uri":[]},"NullRejectionException":{"Exception":[]},"DelegatingStreamSink":{"StreamSink":["1"]},"ErrorResult":{"Result":["0&"]},"ValueResult":{"Result":["1"]},"_NextRequest":{"_EventRequest":["1"]},"_HasNextRequest":{"_EventRequest":["1"]},"BuiltList":{"Iterable":["1"]},"_BuiltList":{"BuiltList":["1"],"Iterable":["1"],"Iterable.E":"1"},"_BuiltListMultimap":{"BuiltListMultimap":["1","2"]},"_BuiltMap":{"BuiltMap":["1","2"]},"BuiltSet":{"Iterable":["1"]},"_BuiltSet":{"BuiltSet":["1"],"Iterable":["1"],"Iterable.E":"1"},"_BuiltSetMultimap":{"BuiltSetMultimap":["1","2"]},"BuiltValueNullFieldError":{"Error":[]},"BuiltValueNestedFieldError":{"Error":[]},"BoolJsonObject":{"JsonObject":[]},"ListJsonObject":{"JsonObject":[]},"MapJsonObject":{"JsonObject":[]},"NumJsonObject":{"JsonObject":[]},"StringJsonObject":{"JsonObject":[]},"DeserializationError":{"Error":[]},"BigIntSerializer":{"PrimitiveSerializer":["BigInt"],"Serializer":["BigInt"]},"BoolSerializer":{"PrimitiveSerializer":["bool"],"Serializer":["bool"]},"BuiltJsonSerializers":{"Serializers":[]},"BuiltListMultimapSerializer":{"StructuredSerializer":["BuiltListMultimap<@,@>"],"Serializer":["BuiltListMultimap<@,@>"]},"BuiltListSerializer":{"StructuredSerializer":["BuiltList<@>"],"Serializer":["BuiltList<@>"]},"BuiltMapSerializer":{"StructuredSerializer":["BuiltMap<@,@>"],"Serializer":["BuiltMap<@,@>"]},"BuiltSetMultimapSerializer":{"StructuredSerializer":["BuiltSetMultimap<@,@>"],"Serializer":["BuiltSetMultimap<@,@>"]},"BuiltSetSerializer":{"StructuredSerializer":["BuiltSet<@>"],"Serializer":["BuiltSet<@>"]},"DateTimeSerializer":{"PrimitiveSerializer":["DateTime"],"Serializer":["DateTime"]},"DoubleSerializer":{"PrimitiveSerializer":["double"],"Serializer":["double"]},"DurationSerializer":{"PrimitiveSerializer":["Duration"],"Serializer":["Duration"]},"Int32Serializer":{"PrimitiveSerializer":["Int32"],"Serializer":["Int32"]},"Int64Serializer":{"PrimitiveSerializer":["Int64"],"Serializer":["Int64"]},"IntSerializer":{"PrimitiveSerializer":["int"],"Serializer":["int"]},"JsonObjectSerializer":{"PrimitiveSerializer":["JsonObject"],"Serializer":["JsonObject"]},"ListSerializer":{"StructuredSerializer":["List<@>"],"Serializer":["List<@>"]},"MapSerializer":{"StructuredSerializer":["Map<@,@>"],"Serializer":["Map<@,@>"]},"NullSerializer":{"PrimitiveSerializer":["Null"],"Serializer":["Null"]},"NumSerializer":{"PrimitiveSerializer":["num"],"Serializer":["num"]},"RegExpSerializer":{"PrimitiveSerializer":["RegExp"],"Serializer":["RegExp"]},"SetSerializer":{"StructuredSerializer":["Set<@>"],"Serializer":["Set<@>"]},"StringSerializer":{"PrimitiveSerializer":["String"],"Serializer":["String"]},"Uint8ListSerializer":{"PrimitiveSerializer":["Uint8List"],"Serializer":["Uint8List"]},"UriSerializer":{"PrimitiveSerializer":["Uri"],"Serializer":["Uri"]},"CanonicalizedMap":{"Map":["2","3"]},"DefaultEquality":{"Equality":["1"]},"IterableEquality":{"Equality":["Iterable<1>"]},"ListEquality":{"Equality":["List<1>"]},"_UnorderedEquality":{"Equality":["2"]},"SetEquality":{"_UnorderedEquality":["1","Set<1>"],"Equality":["Set<1>"],"_UnorderedEquality.E":"1","_UnorderedEquality.T":"Set<1>"},"MapEquality":{"Equality":["Map<1,2>"]},"DeepCollectionEquality":{"Equality":["@"]},"QueueList":{"ListBase":["1"],"List":["1"],"Queue":["1"],"EfficientLengthIterable":["1"],"Iterable":["1"],"ListBase.E":"1","QueueList.E":"1","Iterable.E":"1"},"_CastQueueList":{"QueueList":["2"],"ListBase":["2"],"List":["2"],"Queue":["2"],"EfficientLengthIterable":["2"],"Iterable":["2"],"ListBase.E":"2","QueueList.E":"2","Iterable.E":"2"},"_$BuildStatusSerializer":{"PrimitiveSerializer":["BuildStatus"],"Serializer":["BuildStatus"]},"_$BuildResultSerializer":{"StructuredSerializer":["BuildResult"],"Serializer":["BuildResult"]},"_$BuildResult":{"BuildResult":[]},"_$ConnectRequestSerializer":{"StructuredSerializer":["ConnectRequest"],"Serializer":["ConnectRequest"]},"_$ConnectRequest":{"ConnectRequest":[]},"_$DebugEventSerializer":{"StructuredSerializer":["DebugEvent"],"Serializer":["DebugEvent"]},"_$BatchedDebugEventsSerializer":{"StructuredSerializer":["BatchedDebugEvents"],"Serializer":["BatchedDebugEvents"]},"_$DebugEvent":{"DebugEvent":[]},"_$BatchedDebugEvents":{"BatchedDebugEvents":[]},"_$DebugInfoSerializer":{"StructuredSerializer":["DebugInfo"],"Serializer":["DebugInfo"]},"_$DebugInfo":{"DebugInfo":[]},"_$DevToolsRequestSerializer":{"StructuredSerializer":["DevToolsRequest"],"Serializer":["DevToolsRequest"]},"_$DevToolsResponseSerializer":{"StructuredSerializer":["DevToolsResponse"],"Serializer":["DevToolsResponse"]},"_$DevToolsRequest":{"DevToolsRequest":[]},"_$DevToolsResponse":{"DevToolsResponse":[]},"_$ErrorResponseSerializer":{"StructuredSerializer":["ErrorResponse"],"Serializer":["ErrorResponse"]},"_$ErrorResponse":{"ErrorResponse":[]},"_$ExtensionRequestSerializer":{"StructuredSerializer":["ExtensionRequest"],"Serializer":["ExtensionRequest"]},"_$ExtensionResponseSerializer":{"StructuredSerializer":["ExtensionResponse"],"Serializer":["ExtensionResponse"]},"_$ExtensionEventSerializer":{"StructuredSerializer":["ExtensionEvent"],"Serializer":["ExtensionEvent"]},"_$BatchedEventsSerializer":{"StructuredSerializer":["BatchedEvents"],"Serializer":["BatchedEvents"]},"_$ExtensionRequest":{"ExtensionRequest":[]},"_$ExtensionResponse":{"ExtensionResponse":[]},"_$ExtensionEvent":{"ExtensionEvent":[]},"_$BatchedEvents":{"BatchedEvents":[]},"_$HotReloadRequestSerializer":{"StructuredSerializer":["HotReloadRequest"],"Serializer":["HotReloadRequest"]},"_$HotReloadRequest":{"HotReloadRequest":[]},"_$HotReloadResponseSerializer":{"StructuredSerializer":["HotReloadResponse"],"Serializer":["HotReloadResponse"]},"_$HotReloadResponse":{"HotReloadResponse":[]},"_$HotRestartRequestSerializer":{"StructuredSerializer":["HotRestartRequest"],"Serializer":["HotRestartRequest"]},"_$HotRestartRequest":{"HotRestartRequest":[]},"_$HotRestartResponseSerializer":{"StructuredSerializer":["HotRestartResponse"],"Serializer":["HotRestartResponse"]},"_$HotRestartResponse":{"HotRestartResponse":[]},"_$IsolateExitSerializer":{"StructuredSerializer":["IsolateExit"],"Serializer":["IsolateExit"]},"_$IsolateStartSerializer":{"StructuredSerializer":["IsolateStart"],"Serializer":["IsolateStart"]},"_$IsolateExit":{"IsolateExit":[]},"_$IsolateStart":{"IsolateStart":[]},"_$RegisterEventSerializer":{"StructuredSerializer":["RegisterEvent"],"Serializer":["RegisterEvent"]},"_$RegisterEvent":{"RegisterEvent":[]},"_$RunRequestSerializer":{"StructuredSerializer":["RunRequest"],"Serializer":["RunRequest"]},"_$RunRequest":{"RunRequest":[]},"_$ServiceExtensionRequestSerializer":{"StructuredSerializer":["ServiceExtensionRequest"],"Serializer":["ServiceExtensionRequest"]},"_$ServiceExtensionRequest":{"ServiceExtensionRequest":[]},"_$ServiceExtensionResponseSerializer":{"StructuredSerializer":["ServiceExtensionResponse"],"Serializer":["ServiceExtensionResponse"]},"_$ServiceExtensionResponse":{"ServiceExtensionResponse":[]},"SseSocketClient":{"SocketClient":[]},"WebSocketClient":{"SocketClient":[]},"Int32":{"Comparable":["Object"]},"Int64":{"Comparable":["Object"]},"RequestAbortedException":{"Exception":[]},"ByteStream":{"StreamView":["List<int>"],"Stream":["List<int>"],"Stream.T":"List<int>","StreamView.T":"List<int>"},"ClientException":{"Exception":[]},"Request":{"BaseRequest":[]},"StreamedResponseV2":{"StreamedResponse":[]},"CaseInsensitiveMap":{"CanonicalizedMap":["String","String","1"],"Map":["String","1"],"CanonicalizedMap.K":"String","CanonicalizedMap.V":"1","CanonicalizedMap.C":"String"},"Level":{"Comparable":["Level"]},"PathException":{"Exception":[]},"PosixStyle":{"InternalStyle":[]},"UrlStyle":{"InternalStyle":[]},"WindowsStyle":{"InternalStyle":[]},"FileLocation":{"SourceLocation":[],"Comparable":["SourceLocation"]},"_FileSpan":{"SourceSpanWithContext":[],"SourceSpan":[],"Comparable":["SourceSpan"]},"SourceLocation":{"Comparable":["SourceLocation"]},"SourceLocationMixin":{"SourceLocation":[],"Comparable":["SourceLocation"]},"SourceSpan":{"Comparable":["SourceSpan"]},"SourceSpanBase":{"SourceSpan":[],"Comparable":["SourceSpan"]},"SourceSpanException":{"Exception":[]},"SourceSpanFormatException":{"FormatException":[],"Exception":[]},"SourceSpanMixin":{"SourceSpan":[],"Comparable":["SourceSpan"]},"SourceSpanWithContext":{"SourceSpan":[],"Comparable":["SourceSpan"]},"SseClient":{"StreamChannel":["String?"]},"GuaranteeChannel":{"StreamChannel":["1"]},"_GuaranteeSink":{"StreamSink":["1"]},"StreamChannelMixin":{"StreamChannel":["1"]},"StringScannerException":{"FormatException":[],"Exception":[]},"_EventStream":{"Stream":["1"],"Stream.T":"1"},"_EventStreamSubscription":{"StreamSubscription":["1"]},"BrowserWebSocket":{"WebSocket":[]},"TextDataReceived":{"WebSocketEvent":[]},"BinaryDataReceived":{"WebSocketEvent":[]},"CloseReceived":{"WebSocketEvent":[]},"WebSocketException":{"Exception":[]},"WebSocketConnectionClosed":{"Exception":[]},"AdapterWebSocketChannel":{"WebSocketChannel":[],"StreamChannel":["@"]},"_WebSocketSink":{"WebSocketSink":[],"DelegatingStreamSink":["@"],"StreamSink":["@"],"DelegatingStreamSink.T":"@"},"WebSocketChannelException":{"Exception":[]},"DdcLibraryBundleRestarter":{"Restarter":[]},"DdcRestarter":{"Restarter":[]},"RequireRestarter":{"Restarter":[]},"HotReloadFailedException":{"Exception":[]},"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"]}}'));
+  A._Universe_addRules(init.typeUniverse, JSON.parse('{"JavaScriptFunction":"LegacyJavaScriptObject","PlainJavaScriptObject":"LegacyJavaScriptObject","UnknownJavaScriptObject":"LegacyJavaScriptObject","NativeSharedArrayBuffer":"NativeByteBuffer","JavaScriptObject":{"JSObject":[]},"JSArray":{"List":["1"],"JavaScriptObject":[],"EfficientLengthIterable":["1"],"JSObject":[],"Iterable":["1"],"JSIndexable":["1"],"Iterable.E":"1"},"JSBool":{"bool":[],"TrustedGetRuntimeType":[]},"JSNull":{"Null":[],"TrustedGetRuntimeType":[]},"LegacyJavaScriptObject":{"JavaScriptObject":[],"JSObject":[]},"JSArraySafeToStringHook":{"SafeToStringHook":[]},"JSUnmodifiableArray":{"JSArray":["1"],"List":["1"],"JavaScriptObject":[],"EfficientLengthIterable":["1"],"JSObject":[],"Iterable":["1"],"JSIndexable":["1"],"Iterable.E":"1"},"ArrayIterator":{"Iterator":["1"]},"JSNumber":{"double":[],"num":[],"Comparable":["num"]},"JSInt":{"double":[],"int":[],"num":[],"Comparable":["num"],"TrustedGetRuntimeType":[]},"JSNumNotInt":{"double":[],"num":[],"Comparable":["num"],"TrustedGetRuntimeType":[]},"JSString":{"String":[],"Comparable":["String"],"Pattern":[],"JSIndexable":["@"],"TrustedGetRuntimeType":[]},"_CastIterableBase":{"Iterable":["2"]},"CastIterator":{"Iterator":["2"]},"CastIterable":{"_CastIterableBase":["1","2"],"Iterable":["2"],"Iterable.E":"2"},"_EfficientLengthCastIterable":{"CastIterable":["1","2"],"_CastIterableBase":["1","2"],"EfficientLengthIterable":["2"],"Iterable":["2"],"Iterable.E":"2"},"_CastListBase":{"ListBase":["2"],"List":["2"],"_CastIterableBase":["1","2"],"EfficientLengthIterable":["2"],"Iterable":["2"]},"CastList":{"_CastListBase":["1","2"],"ListBase":["2"],"List":["2"],"_CastIterableBase":["1","2"],"EfficientLengthIterable":["2"],"Iterable":["2"],"ListBase.E":"2","Iterable.E":"2"},"CastMap":{"MapBase":["3","4"],"Map":["3","4"],"MapBase.K":"3","MapBase.V":"4"},"LateError":{"Error":[]},"CodeUnits":{"ListBase":["int"],"UnmodifiableListMixin":["int"],"List":["int"],"EfficientLengthIterable":["int"],"Iterable":["int"],"ListBase.E":"int","Iterable.E":"int","UnmodifiableListMixin.E":"int"},"EfficientLengthIterable":{"Iterable":["1"]},"ListIterable":{"EfficientLengthIterable":["1"],"Iterable":["1"]},"SubListIterable":{"ListIterable":["1"],"EfficientLengthIterable":["1"],"Iterable":["1"],"ListIterable.E":"1","Iterable.E":"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"},"WhereIterable":{"Iterable":["1"],"Iterable.E":"1"},"WhereIterator":{"Iterator":["1"]},"ExpandIterable":{"Iterable":["2"],"Iterable.E":"2"},"ExpandIterator":{"Iterator":["2"]},"TakeIterable":{"Iterable":["1"],"Iterable.E":"1"},"EfficientLengthTakeIterable":{"TakeIterable":["1"],"EfficientLengthIterable":["1"],"Iterable":["1"],"Iterable.E":"1"},"TakeIterator":{"Iterator":["1"]},"SkipIterable":{"Iterable":["1"],"Iterable.E":"1"},"EfficientLengthSkipIterable":{"SkipIterable":["1"],"EfficientLengthIterable":["1"],"Iterable":["1"],"Iterable.E":"1"},"SkipIterator":{"Iterator":["1"]},"EmptyIterable":{"EfficientLengthIterable":["1"],"Iterable":["1"],"Iterable.E":"1"},"EmptyIterator":{"Iterator":["1"]},"WhereTypeIterable":{"Iterable":["1"],"Iterable.E":"1"},"WhereTypeIterator":{"Iterator":["1"]},"UnmodifiableListBase":{"ListBase":["1"],"UnmodifiableListMixin":["1"],"List":["1"],"EfficientLengthIterable":["1"],"Iterable":["1"]},"ReversedListIterable":{"ListIterable":["1"],"EfficientLengthIterable":["1"],"Iterable":["1"],"ListIterable.E":"1","Iterable.E":"1"},"_Record_2":{"_Record2":[],"_Record":[]},"ConstantMap":{"Map":["1","2"]},"ConstantStringMap":{"ConstantMap":["1","2"],"Map":["1","2"]},"_KeysOrValues":{"Iterable":["1"],"Iterable.E":"1"},"_KeysOrValuesOrElementsIterator":{"Iterator":["1"]},"Instantiation":{"Closure":[],"Function":[]},"Instantiation1":{"Closure":[],"Function":[]},"NullError":{"TypeError":[],"Error":[]},"JsNoSuchMethodError":{"Error":[]},"UnknownJsTypeError":{"Error":[]},"NullThrownFromJavaScriptException":{"Exception":[]},"_StackTrace":{"StackTrace":[]},"Closure":{"Function":[]},"Closure0Args":{"Closure":[],"Function":[]},"Closure2Args":{"Closure":[],"Function":[]},"TearOffClosure":{"Closure":[],"Function":[]},"StaticClosure":{"Closure":[],"Function":[]},"BoundClosure":{"Closure":[],"Function":[]},"RuntimeError":{"Error":[]},"JsLinkedHashMap":{"MapBase":["1","2"],"LinkedHashMap":["1","2"],"Map":["1","2"],"MapBase.K":"1","MapBase.V":"2"},"LinkedHashMapKeysIterable":{"EfficientLengthIterable":["1"],"Iterable":["1"],"Iterable.E":"1"},"LinkedHashMapKeyIterator":{"Iterator":["1"]},"LinkedHashMapValuesIterable":{"EfficientLengthIterable":["1"],"Iterable":["1"],"Iterable.E":"1"},"LinkedHashMapValueIterator":{"Iterator":["1"]},"LinkedHashMapEntriesIterable":{"EfficientLengthIterable":["MapEntry<1,2>"],"Iterable":["MapEntry<1,2>"],"Iterable.E":"MapEntry<1,2>"},"LinkedHashMapEntryIterator":{"Iterator":["MapEntry<1,2>"]},"JsIdentityLinkedHashMap":{"JsLinkedHashMap":["1","2"],"MapBase":["1","2"],"LinkedHashMap":["1","2"],"Map":["1","2"],"MapBase.K":"1","MapBase.V":"2"},"_Record2":{"_Record":[]},"JSSyntaxRegExp":{"RegExp":[],"Pattern":[]},"_MatchImplementation":{"RegExpMatch":[],"Match":[]},"_AllMatchesIterable":{"Iterable":["RegExpMatch"],"Iterable.E":"RegExpMatch"},"_AllMatchesIterator":{"Iterator":["RegExpMatch"]},"StringMatch":{"Match":[]},"_StringAllMatchesIterable":{"Iterable":["Match"],"Iterable.E":"Match"},"_StringAllMatchesIterator":{"Iterator":["Match"]},"NativeByteBuffer":{"JavaScriptObject":[],"JSObject":[],"ByteBuffer":[],"TrustedGetRuntimeType":[]},"NativeArrayBuffer":{"JavaScriptObject":[],"JSObject":[],"ByteBuffer":[],"TrustedGetRuntimeType":[]},"NativeTypedData":{"JavaScriptObject":[],"JSObject":[]},"NativeByteData":{"JavaScriptObject":[],"ByteData":[],"JSObject":[],"TrustedGetRuntimeType":[]},"NativeTypedArray":{"JavaScriptIndexingBehavior":["1"],"JavaScriptObject":[],"JSObject":[],"JSIndexable":["1"]},"NativeTypedArrayOfDouble":{"ListBase":["double"],"NativeTypedArray":["double"],"List":["double"],"JavaScriptIndexingBehavior":["double"],"JavaScriptObject":[],"EfficientLengthIterable":["double"],"JSObject":[],"JSIndexable":["double"],"Iterable":["double"],"FixedLengthListMixin":["double"]},"NativeTypedArrayOfInt":{"ListBase":["int"],"NativeTypedArray":["int"],"List":["int"],"JavaScriptIndexingBehavior":["int"],"JavaScriptObject":[],"EfficientLengthIterable":["int"],"JSObject":[],"JSIndexable":["int"],"Iterable":["int"],"FixedLengthListMixin":["int"]},"NativeFloat32List":{"Float32List":[],"ListBase":["double"],"NativeTypedArray":["double"],"List":["double"],"JavaScriptIndexingBehavior":["double"],"JavaScriptObject":[],"EfficientLengthIterable":["double"],"JSObject":[],"JSIndexable":["double"],"Iterable":["double"],"FixedLengthListMixin":["double"],"TrustedGetRuntimeType":[],"ListBase.E":"double","Iterable.E":"double","FixedLengthListMixin.E":"double"},"NativeFloat64List":{"Float64List":[],"ListBase":["double"],"NativeTypedArray":["double"],"List":["double"],"JavaScriptIndexingBehavior":["double"],"JavaScriptObject":[],"EfficientLengthIterable":["double"],"JSObject":[],"JSIndexable":["double"],"Iterable":["double"],"FixedLengthListMixin":["double"],"TrustedGetRuntimeType":[],"ListBase.E":"double","Iterable.E":"double","FixedLengthListMixin.E":"double"},"NativeInt16List":{"NativeTypedArrayOfInt":[],"Int16List":[],"ListBase":["int"],"NativeTypedArray":["int"],"List":["int"],"JavaScriptIndexingBehavior":["int"],"JavaScriptObject":[],"EfficientLengthIterable":["int"],"JSObject":[],"JSIndexable":["int"],"Iterable":["int"],"FixedLengthListMixin":["int"],"TrustedGetRuntimeType":[],"ListBase.E":"int","Iterable.E":"int","FixedLengthListMixin.E":"int"},"NativeInt32List":{"NativeTypedArrayOfInt":[],"Int32List":[],"ListBase":["int"],"NativeTypedArray":["int"],"List":["int"],"JavaScriptIndexingBehavior":["int"],"JavaScriptObject":[],"EfficientLengthIterable":["int"],"JSObject":[],"JSIndexable":["int"],"Iterable":["int"],"FixedLengthListMixin":["int"],"TrustedGetRuntimeType":[],"ListBase.E":"int","Iterable.E":"int","FixedLengthListMixin.E":"int"},"NativeInt8List":{"NativeTypedArrayOfInt":[],"Int8List":[],"ListBase":["int"],"NativeTypedArray":["int"],"List":["int"],"JavaScriptIndexingBehavior":["int"],"JavaScriptObject":[],"EfficientLengthIterable":["int"],"JSObject":[],"JSIndexable":["int"],"Iterable":["int"],"FixedLengthListMixin":["int"],"TrustedGetRuntimeType":[],"ListBase.E":"int","Iterable.E":"int","FixedLengthListMixin.E":"int"},"NativeUint16List":{"NativeTypedArrayOfInt":[],"Uint16List":[],"ListBase":["int"],"NativeTypedArray":["int"],"List":["int"],"JavaScriptIndexingBehavior":["int"],"JavaScriptObject":[],"EfficientLengthIterable":["int"],"JSObject":[],"JSIndexable":["int"],"Iterable":["int"],"FixedLengthListMixin":["int"],"TrustedGetRuntimeType":[],"ListBase.E":"int","Iterable.E":"int","FixedLengthListMixin.E":"int"},"NativeUint32List":{"NativeTypedArrayOfInt":[],"Uint32List":[],"ListBase":["int"],"NativeTypedArray":["int"],"List":["int"],"JavaScriptIndexingBehavior":["int"],"JavaScriptObject":[],"EfficientLengthIterable":["int"],"JSObject":[],"JSIndexable":["int"],"Iterable":["int"],"FixedLengthListMixin":["int"],"TrustedGetRuntimeType":[],"ListBase.E":"int","Iterable.E":"int","FixedLengthListMixin.E":"int"},"NativeUint8ClampedList":{"NativeTypedArrayOfInt":[],"Uint8ClampedList":[],"ListBase":["int"],"NativeTypedArray":["int"],"List":["int"],"JavaScriptIndexingBehavior":["int"],"JavaScriptObject":[],"EfficientLengthIterable":["int"],"JSObject":[],"JSIndexable":["int"],"Iterable":["int"],"FixedLengthListMixin":["int"],"TrustedGetRuntimeType":[],"ListBase.E":"int","Iterable.E":"int","FixedLengthListMixin.E":"int"},"NativeUint8List":{"NativeTypedArrayOfInt":[],"Uint8List":[],"ListBase":["int"],"NativeTypedArray":["int"],"List":["int"],"JavaScriptIndexingBehavior":["int"],"JavaScriptObject":[],"EfficientLengthIterable":["int"],"JSObject":[],"JSIndexable":["int"],"Iterable":["int"],"FixedLengthListMixin":["int"],"TrustedGetRuntimeType":[],"ListBase.E":"int","Iterable.E":"int","FixedLengthListMixin.E":"int"},"_Type":{"Type":[]},"_Error":{"Error":[]},"_TypeError":{"TypeError":[],"Error":[]},"AsyncError":{"Error":[]},"_TimerImpl":{"Timer":[]},"_AsyncAwaitCompleter":{"Completer":["1"]},"_Completer":{"Completer":["1"]},"_AsyncCompleter":{"_Completer":["1"],"Completer":["1"]},"_SyncCompleter":{"_Completer":["1"],"Completer":["1"]},"_Future":{"Future":["1"]},"StreamView":{"Stream":["1"]},"_StreamController":{"StreamController":["1"],"StreamSink":["1"],"_StreamControllerLifecycle":["1"],"_EventSink":["1"],"_EventDispatch":["1"]},"_AsyncStreamController":{"_AsyncStreamControllerDispatch":["1"],"_StreamController":["1"],"StreamController":["1"],"StreamSink":["1"],"_StreamControllerLifecycle":["1"],"_EventSink":["1"],"_EventDispatch":["1"]},"_SyncStreamController":{"_SyncStreamControllerDispatch":["1"],"_StreamController":["1"],"StreamController":["1"],"StreamSink":["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"},"_StreamSinkWrapper":{"StreamSink":["1"]},"_BufferingStreamSubscription":{"StreamSubscription":["1"],"_EventSink":["1"],"_EventDispatch":["1"],"_BufferingStreamSubscription.T":"1"},"_StreamImpl":{"Stream":["1"]},"_DelayedData":{"_DelayedEvent":["1"]},"_DelayedError":{"_DelayedEvent":["@"]},"_DelayedDone":{"_DelayedEvent":["@"]},"_DoneStreamSubscription":{"StreamSubscription":["1"]},"_EmptyStream":{"Stream":["1"],"Stream.T":"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"},"_ZoneSpecification":{"ZoneSpecification":[]},"_ZoneDelegate":{"ZoneDelegate":[]},"_Zone":{"Zone":[]},"_CustomZone":{"_Zone":[],"Zone":[]},"_RootZone":{"_Zone":[],"Zone":[]},"_SplayTreeSetNode":{"_SplayTreeNode":["1","_SplayTreeSetNode<1>"],"_SplayTreeNode.K":"1","_SplayTreeNode.1":"_SplayTreeSetNode<1>"},"_HashMap":{"MapBase":["1","2"],"HashMap":["1","2"],"Map":["1","2"],"MapBase.K":"1","MapBase.V":"2"},"_IdentityHashMap":{"_HashMap":["1","2"],"MapBase":["1","2"],"HashMap":["1","2"],"Map":["1","2"],"MapBase.K":"1","MapBase.V":"2"},"_CustomHashMap":{"_HashMap":["1","2"],"MapBase":["1","2"],"HashMap":["1","2"],"Map":["1","2"],"MapBase.K":"1","MapBase.V":"2"},"_HashMapKeyIterable":{"EfficientLengthIterable":["1"],"Iterable":["1"],"Iterable.E":"1"},"_HashMapKeyIterator":{"Iterator":["1"]},"_LinkedCustomHashMap":{"JsLinkedHashMap":["1","2"],"MapBase":["1","2"],"LinkedHashMap":["1","2"],"Map":["1","2"],"MapBase.K":"1","MapBase.V":"2"},"_HashSet":{"_SetBase":["1"],"SetBase":["1"],"Set":["1"],"EfficientLengthIterable":["1"],"Iterable":["1"],"Iterable.E":"1"},"_HashSetIterator":{"Iterator":["1"]},"_LinkedHashSet":{"_SetBase":["1"],"SetBase":["1"],"Set":["1"],"EfficientLengthIterable":["1"],"Iterable":["1"],"Iterable.E":"1"},"_LinkedHashSetIterator":{"Iterator":["1"]},"UnmodifiableListView":{"ListBase":["1"],"UnmodifiableListMixin":["1"],"List":["1"],"EfficientLengthIterable":["1"],"Iterable":["1"],"ListBase.E":"1","Iterable.E":"1","UnmodifiableListMixin.E":"1"},"ListBase":{"List":["1"],"EfficientLengthIterable":["1"],"Iterable":["1"]},"MapBase":{"Map":["1","2"]},"MapView":{"Map":["1","2"]},"UnmodifiableMapView":{"_UnmodifiableMapView_MapView__UnmodifiableMapMixin":["1","2"],"MapView":["1","2"],"_UnmodifiableMapMixin":["1","2"],"Map":["1","2"]},"ListQueue":{"Queue":["1"],"ListIterable":["1"],"EfficientLengthIterable":["1"],"Iterable":["1"],"ListIterable.E":"1","Iterable.E":"1"},"_ListQueueIterator":{"Iterator":["1"]},"SetBase":{"Set":["1"],"EfficientLengthIterable":["1"],"Iterable":["1"]},"_SetBase":{"SetBase":["1"],"Set":["1"],"EfficientLengthIterable":["1"],"Iterable":["1"]},"_SplayTreeIterator":{"Iterator":["3"]},"_SplayTreeKeyIterator":{"_SplayTreeIterator":["1","2","1"],"Iterator":["1"],"_SplayTreeIterator.K":"1","_SplayTreeIterator.T":"1","_SplayTreeIterator.1":"2"},"SplayTreeSet":{"SetBase":["1"],"Set":["1"],"EfficientLengthIterable":["1"],"_SplayTree":["1","_SplayTreeSetNode<1>"],"Iterable":["1"],"Iterable.E":"1","_SplayTree.1":"_SplayTreeSetNode<1>","_SplayTree.K":"1"},"Encoding":{"Codec":["String","List<int>"]},"_JsonMap":{"MapBase":["String","@"],"Map":["String","@"],"MapBase.K":"String","MapBase.V":"@"},"_JsonMapKeyIterable":{"ListIterable":["String"],"EfficientLengthIterable":["String"],"Iterable":["String"],"ListIterable.E":"String","Iterable.E":"String"},"AsciiCodec":{"Encoding":[],"Codec":["String","List<int>"],"Codec.S":"String"},"_UnicodeSubsetEncoder":{"Converter":["String","List<int>"],"StreamTransformer":["String","List<int>"]},"AsciiEncoder":{"Converter":["String","List<int>"],"StreamTransformer":["String","List<int>"]},"_UnicodeSubsetDecoder":{"Converter":["List<int>","String"],"StreamTransformer":["List<int>","String"]},"AsciiDecoder":{"Converter":["List<int>","String"],"StreamTransformer":["List<int>","String"]},"Base64Codec":{"Codec":["List<int>","String"],"Codec.S":"List<int>"},"Base64Encoder":{"Converter":["List<int>","String"],"StreamTransformer":["List<int>","String"]},"Base64Decoder":{"Converter":["String","List<int>"],"StreamTransformer":["String","List<int>"]},"Converter":{"StreamTransformer":["1","2"]},"JsonUnsupportedObjectError":{"Error":[]},"JsonCyclicError":{"Error":[]},"JsonCodec":{"Codec":["Object?","String"],"Codec.S":"Object?"},"JsonEncoder":{"Converter":["Object?","String"],"StreamTransformer":["Object?","String"]},"JsonDecoder":{"Converter":["String","Object?"],"StreamTransformer":["String","Object?"]},"Latin1Codec":{"Encoding":[],"Codec":["String","List<int>"],"Codec.S":"String"},"Latin1Encoder":{"Converter":["String","List<int>"],"StreamTransformer":["String","List<int>"]},"Latin1Decoder":{"Converter":["List<int>","String"],"StreamTransformer":["List<int>","String"]},"Utf8Codec":{"Encoding":[],"Codec":["String","List<int>"],"Codec.S":"String"},"Utf8Encoder":{"Converter":["String","List<int>"],"StreamTransformer":["String","List<int>"]},"Utf8Decoder":{"Converter":["List<int>","String"],"StreamTransformer":["List<int>","String"]},"BigInt":{"Comparable":["BigInt"]},"DateTime":{"Comparable":["DateTime"]},"double":{"num":[],"Comparable":["num"]},"Duration":{"Comparable":["Duration"]},"int":{"num":[],"Comparable":["num"]},"List":{"EfficientLengthIterable":["1"],"Iterable":["1"]},"num":{"Comparable":["num"]},"RegExp":{"Pattern":[]},"RegExpMatch":{"Match":[]},"Set":{"EfficientLengthIterable":["1"],"Iterable":["1"]},"String":{"Comparable":["String"],"Pattern":[]},"_BigIntImpl":{"BigInt":[],"Comparable":["BigInt"]},"AssertionError":{"Error":[]},"TypeError":{"Error":[]},"ArgumentError":{"Error":[]},"RangeError":{"Error":[]},"IndexError":{"Error":[]},"UnsupportedError":{"Error":[]},"UnimplementedError":{"Error":[]},"StateError":{"Error":[]},"ConcurrentModificationError":{"Error":[]},"OutOfMemoryError":{"Error":[]},"StackOverflowError":{"Error":[]},"_Exception":{"Exception":[]},"FormatException":{"Exception":[]},"IntegerDivisionByZeroException":{"Exception":[],"Error":[]},"_StringStackTrace":{"StackTrace":[]},"StringBuffer":{"StringSink":[]},"_Uri":{"Uri":[]},"_SimpleUri":{"Uri":[]},"_DataUri":{"Uri":[]},"NullRejectionException":{"Exception":[]},"_JSRandom":{"Random":[]},"DelegatingStreamSink":{"StreamSink":["1"]},"ErrorResult":{"Result":["0&"]},"ValueResult":{"Result":["1"]},"_NextRequest":{"_EventRequest":["1"]},"_HasNextRequest":{"_EventRequest":["1"]},"BuiltList":{"Iterable":["1"]},"_BuiltList":{"BuiltList":["1"],"Iterable":["1"],"Iterable.E":"1"},"_BuiltListMultimap":{"BuiltListMultimap":["1","2"]},"_BuiltMap":{"BuiltMap":["1","2"]},"BuiltSet":{"Iterable":["1"]},"_BuiltSet":{"BuiltSet":["1"],"Iterable":["1"],"Iterable.E":"1"},"_BuiltSetMultimap":{"BuiltSetMultimap":["1","2"]},"BuiltValueNullFieldError":{"Error":[]},"BuiltValueNestedFieldError":{"Error":[]},"BoolJsonObject":{"JsonObject":[]},"ListJsonObject":{"JsonObject":[]},"MapJsonObject":{"JsonObject":[]},"NumJsonObject":{"JsonObject":[]},"StringJsonObject":{"JsonObject":[]},"DeserializationError":{"Error":[]},"BigIntSerializer":{"PrimitiveSerializer":["BigInt"],"Serializer":["BigInt"]},"BoolSerializer":{"PrimitiveSerializer":["bool"],"Serializer":["bool"]},"BuiltJsonSerializers":{"Serializers":[]},"BuiltListMultimapSerializer":{"StructuredSerializer":["BuiltListMultimap<@,@>"],"Serializer":["BuiltListMultimap<@,@>"]},"BuiltListSerializer":{"StructuredSerializer":["BuiltList<@>"],"Serializer":["BuiltList<@>"]},"BuiltMapSerializer":{"StructuredSerializer":["BuiltMap<@,@>"],"Serializer":["BuiltMap<@,@>"]},"BuiltSetMultimapSerializer":{"StructuredSerializer":["BuiltSetMultimap<@,@>"],"Serializer":["BuiltSetMultimap<@,@>"]},"BuiltSetSerializer":{"StructuredSerializer":["BuiltSet<@>"],"Serializer":["BuiltSet<@>"]},"DateTimeSerializer":{"PrimitiveSerializer":["DateTime"],"Serializer":["DateTime"]},"DoubleSerializer":{"PrimitiveSerializer":["double"],"Serializer":["double"]},"DurationSerializer":{"PrimitiveSerializer":["Duration"],"Serializer":["Duration"]},"Int32Serializer":{"PrimitiveSerializer":["Int32"],"Serializer":["Int32"]},"Int64Serializer":{"PrimitiveSerializer":["Int64"],"Serializer":["Int64"]},"IntSerializer":{"PrimitiveSerializer":["int"],"Serializer":["int"]},"JsonObjectSerializer":{"PrimitiveSerializer":["JsonObject"],"Serializer":["JsonObject"]},"ListSerializer":{"StructuredSerializer":["List<@>"],"Serializer":["List<@>"]},"MapSerializer":{"StructuredSerializer":["Map<@,@>"],"Serializer":["Map<@,@>"]},"NullSerializer":{"PrimitiveSerializer":["Null"],"Serializer":["Null"]},"NumSerializer":{"PrimitiveSerializer":["num"],"Serializer":["num"]},"RegExpSerializer":{"PrimitiveSerializer":["RegExp"],"Serializer":["RegExp"]},"SetSerializer":{"StructuredSerializer":["Set<@>"],"Serializer":["Set<@>"]},"StringSerializer":{"PrimitiveSerializer":["String"],"Serializer":["String"]},"Uint8ListSerializer":{"PrimitiveSerializer":["Uint8List"],"Serializer":["Uint8List"]},"UriSerializer":{"PrimitiveSerializer":["Uri"],"Serializer":["Uri"]},"CanonicalizedMap":{"Map":["2","3"]},"DefaultEquality":{"Equality":["1"]},"IterableEquality":{"Equality":["Iterable<1>"]},"ListEquality":{"Equality":["List<1>"]},"_UnorderedEquality":{"Equality":["2"]},"SetEquality":{"_UnorderedEquality":["1","Set<1>"],"Equality":["Set<1>"],"_UnorderedEquality.E":"1","_UnorderedEquality.T":"Set<1>"},"MapEquality":{"Equality":["Map<1,2>"]},"DeepCollectionEquality":{"Equality":["@"]},"QueueList":{"ListBase":["1"],"List":["1"],"Queue":["1"],"EfficientLengthIterable":["1"],"Iterable":["1"],"ListBase.E":"1","QueueList.E":"1","Iterable.E":"1"},"_CastQueueList":{"QueueList":["2"],"ListBase":["2"],"List":["2"],"Queue":["2"],"EfficientLengthIterable":["2"],"Iterable":["2"],"ListBase.E":"2","QueueList.E":"2","Iterable.E":"2"},"_$BuildStatusSerializer":{"PrimitiveSerializer":["BuildStatus"],"Serializer":["BuildStatus"]},"_$BuildResultSerializer":{"StructuredSerializer":["BuildResult"],"Serializer":["BuildResult"]},"_$BuildResult":{"BuildResult":[]},"_$ConnectRequestSerializer":{"StructuredSerializer":["ConnectRequest"],"Serializer":["ConnectRequest"]},"_$ConnectRequest":{"ConnectRequest":[]},"_$DebugEventSerializer":{"StructuredSerializer":["DebugEvent"],"Serializer":["DebugEvent"]},"_$BatchedDebugEventsSerializer":{"StructuredSerializer":["BatchedDebugEvents"],"Serializer":["BatchedDebugEvents"]},"_$DebugEvent":{"DebugEvent":[]},"_$BatchedDebugEvents":{"BatchedDebugEvents":[]},"_$DebugInfoSerializer":{"StructuredSerializer":["DebugInfo"],"Serializer":["DebugInfo"]},"_$DebugInfo":{"DebugInfo":[]},"_$DevToolsRequestSerializer":{"StructuredSerializer":["DevToolsRequest"],"Serializer":["DevToolsRequest"]},"_$DevToolsResponseSerializer":{"StructuredSerializer":["DevToolsResponse"],"Serializer":["DevToolsResponse"]},"_$DevToolsRequest":{"DevToolsRequest":[]},"_$DevToolsResponse":{"DevToolsResponse":[]},"_$ErrorResponseSerializer":{"StructuredSerializer":["ErrorResponse"],"Serializer":["ErrorResponse"]},"_$ErrorResponse":{"ErrorResponse":[]},"_$ExtensionRequestSerializer":{"StructuredSerializer":["ExtensionRequest"],"Serializer":["ExtensionRequest"]},"_$ExtensionResponseSerializer":{"StructuredSerializer":["ExtensionResponse"],"Serializer":["ExtensionResponse"]},"_$ExtensionEventSerializer":{"StructuredSerializer":["ExtensionEvent"],"Serializer":["ExtensionEvent"]},"_$BatchedEventsSerializer":{"StructuredSerializer":["BatchedEvents"],"Serializer":["BatchedEvents"]},"_$ExtensionRequest":{"ExtensionRequest":[]},"_$ExtensionResponse":{"ExtensionResponse":[]},"_$ExtensionEvent":{"ExtensionEvent":[]},"_$BatchedEvents":{"BatchedEvents":[]},"_$HotReloadRequestSerializer":{"StructuredSerializer":["HotReloadRequest"],"Serializer":["HotReloadRequest"]},"_$HotReloadRequest":{"HotReloadRequest":[]},"_$HotReloadResponseSerializer":{"StructuredSerializer":["HotReloadResponse"],"Serializer":["HotReloadResponse"]},"_$HotReloadResponse":{"HotReloadResponse":[]},"_$HotRestartRequestSerializer":{"StructuredSerializer":["HotRestartRequest"],"Serializer":["HotRestartRequest"]},"_$HotRestartRequest":{"HotRestartRequest":[]},"_$HotRestartResponseSerializer":{"StructuredSerializer":["HotRestartResponse"],"Serializer":["HotRestartResponse"]},"_$HotRestartResponse":{"HotRestartResponse":[]},"_$IsolateExitSerializer":{"StructuredSerializer":["IsolateExit"],"Serializer":["IsolateExit"]},"_$IsolateStartSerializer":{"StructuredSerializer":["IsolateStart"],"Serializer":["IsolateStart"]},"_$IsolateExit":{"IsolateExit":[]},"_$IsolateStart":{"IsolateStart":[]},"_$RegisterEventSerializer":{"StructuredSerializer":["RegisterEvent"],"Serializer":["RegisterEvent"]},"_$RegisterEvent":{"RegisterEvent":[]},"_$RunRequestSerializer":{"StructuredSerializer":["RunRequest"],"Serializer":["RunRequest"]},"_$RunRequest":{"RunRequest":[]},"_$ServiceExtensionRequestSerializer":{"StructuredSerializer":["ServiceExtensionRequest"],"Serializer":["ServiceExtensionRequest"]},"_$ServiceExtensionRequest":{"ServiceExtensionRequest":[]},"_$ServiceExtensionResponseSerializer":{"StructuredSerializer":["ServiceExtensionResponse"],"Serializer":["ServiceExtensionResponse"]},"_$ServiceExtensionResponse":{"ServiceExtensionResponse":[]},"SseSocketClient":{"SocketClient":[]},"WebSocketClient":{"SocketClient":[]},"Int32":{"Comparable":["Object"]},"Int64":{"Comparable":["Object"]},"ByteStream":{"StreamView":["List<int>"],"Stream":["List<int>"],"Stream.T":"List<int>","StreamView.T":"List<int>"},"ClientException":{"Exception":[]},"Request":{"BaseRequest":[]},"StreamedResponseV2":{"StreamedResponse":[]},"CaseInsensitiveMap":{"CanonicalizedMap":["String","String","1"],"Map":["String","1"],"CanonicalizedMap.K":"String","CanonicalizedMap.V":"1","CanonicalizedMap.C":"String"},"Level":{"Comparable":["Level"]},"PathException":{"Exception":[]},"PosixStyle":{"InternalStyle":[]},"UrlStyle":{"InternalStyle":[]},"WindowsStyle":{"InternalStyle":[]},"FileLocation":{"SourceLocation":[],"Comparable":["SourceLocation"]},"_FileSpan":{"SourceSpanWithContext":[],"SourceSpan":[],"Comparable":["SourceSpan"]},"SourceLocation":{"Comparable":["SourceLocation"]},"SourceLocationMixin":{"SourceLocation":[],"Comparable":["SourceLocation"]},"SourceSpan":{"Comparable":["SourceSpan"]},"SourceSpanBase":{"SourceSpan":[],"Comparable":["SourceSpan"]},"SourceSpanException":{"Exception":[]},"SourceSpanFormatException":{"FormatException":[],"Exception":[]},"SourceSpanMixin":{"SourceSpan":[],"Comparable":["SourceSpan"]},"SourceSpanWithContext":{"SourceSpan":[],"Comparable":["SourceSpan"]},"SseClient":{"StreamChannel":["String?"]},"GuaranteeChannel":{"StreamChannel":["1"]},"_GuaranteeSink":{"StreamSink":["1"]},"StreamChannelMixin":{"StreamChannel":["1"]},"StringScannerException":{"FormatException":[],"Exception":[]},"_EventStream":{"Stream":["1"],"Stream.T":"1"},"_EventStreamSubscription":{"StreamSubscription":["1"]},"BrowserWebSocket":{"WebSocket":[]},"TextDataReceived":{"WebSocketEvent":[]},"BinaryDataReceived":{"WebSocketEvent":[]},"CloseReceived":{"WebSocketEvent":[]},"WebSocketException":{"Exception":[]},"WebSocketConnectionClosed":{"Exception":[]},"AdapterWebSocketChannel":{"WebSocketChannel":[],"StreamChannel":["@"]},"_WebSocketSink":{"WebSocketSink":[],"DelegatingStreamSink":["@"],"StreamSink":["@"],"DelegatingStreamSink.T":"@"},"WebSocketChannelException":{"Exception":[]},"DdcLibraryBundleRestarter":{"Restarter":[]},"DdcRestarter":{"Restarter":[]},"RequireRestarter":{"Restarter":[]},"HotReloadFailedException":{"Exception":[]},"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"]}}'));
   A._Universe_addErasedTypes(init.typeUniverse, JSON.parse('{"UnmodifiableListBase":1,"__CastListBase__CastIterableBase_ListMixin":2,"NativeTypedArray":1,"_DelayedEvent":1,"_SplayTreeSet__SplayTree_Iterable":1,"_SplayTreeSet__SplayTree_Iterable_SetMixin":1,"_QueueList_Object_ListMixin":1,"StreamChannelMixin":1}'));
   var string$ = {
     x00_____: "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\u03f6\x00\u0404\u03f4 \u03f4\u03f6\u01f6\u01f6\u03f6\u03fc\u01f4\u03ff\u03ff\u0584\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u05d4\u01f4\x00\u01f4\x00\u0504\u05c4\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u0400\x00\u0400\u0200\u03f7\u0200\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u0200\u0200\u0200\u03f7\x00",
@@ -29623,7 +29108,6 @@
     Error_: "Error handler must accept one Object or one Object and a StackTrace as arguments, and return a value of the returned future's type",
     Hot_reA: "Hot reload is not supported for the AMD module format.",
     Hot_reD: "Hot reload is not supported for the DDC module format.",
-    max_mu: "max must be in range 0 < max \u2264 2^32, was ",
     serial: "serializer must be StructuredSerializer or PrimitiveSerializer"
   };
   var type$ = (function rtii() {
@@ -29686,7 +29170,6 @@
       Iterable_int: findType("Iterable<int>"),
       Iterable_nullable_Object: findType("Iterable<Object?>"),
       JSArray_FullType: findType("JSArray<FullType>"),
-      JSArray_JSObject: findType("JSArray<JSObject>"),
       JSArray_Object: findType("JSArray<Object>"),
       JSArray_String: findType("JSArray<String>"),
       JSArray_Type: findType("JSArray<Type>"),
@@ -29761,7 +29244,6 @@
       StackTrace: findType("StackTrace"),
       StreamChannelController_nullable_Object: findType("StreamChannelController<Object?>"),
       StreamQueue_DebugEvent: findType("StreamQueue<DebugEvent>"),
-      Stream_dynamic: findType("Stream<@>"),
       StreamedResponse: findType("StreamedResponse"),
       String: findType("String"),
       String_Function_Match: findType("String(Match)"),
@@ -29785,18 +29267,19 @@
       Zone: findType("Zone"),
       _AsyncCompleter_BrowserWebSocket: findType("_AsyncCompleter<BrowserWebSocket>"),
       _AsyncCompleter_PoolResource: findType("_AsyncCompleter<PoolResource>"),
+      _AsyncCompleter_StreamedResponse: findType("_AsyncCompleter<StreamedResponse>"),
       _AsyncCompleter_String: findType("_AsyncCompleter<String>"),
       _AsyncCompleter_Uint8List: findType("_AsyncCompleter<Uint8List>"),
       _AsyncCompleter_bool: findType("_AsyncCompleter<bool>"),
       _AsyncCompleter_dynamic: findType("_AsyncCompleter<@>"),
       _AsyncCompleter_void: findType("_AsyncCompleter<~>"),
-      _AsyncStreamController_List_int: findType("_AsyncStreamController<List<int>>"),
       _BigIntImpl: findType("_BigIntImpl"),
       _BuiltMap_dynamic_dynamic: findType("_BuiltMap<@,@>"),
       _EventRequest_dynamic: findType("_EventRequest<@>"),
       _EventStream_JSObject: findType("_EventStream<JSObject>"),
       _Future_BrowserWebSocket: findType("_Future<BrowserWebSocket>"),
       _Future_PoolResource: findType("_Future<PoolResource>"),
+      _Future_StreamedResponse: findType("_Future<StreamedResponse>"),
       _Future_String: findType("_Future<String>"),
       _Future_Uint8List: findType("_Future<Uint8List>"),
       _Future_bool: findType("_Future<bool>"),
@@ -29841,7 +29324,6 @@
       nullable__Highlight: findType("_Highlight?"),
       nullable__LinkedHashSetCell: findType("_LinkedHashSetCell?"),
       nullable_bool: findType("bool?"),
-      nullable_bool_Function_Object: findType("bool(Object)?"),
       nullable_double: findType("double?"),
       nullable_int: findType("int?"),
       nullable_num: findType("num?"),
@@ -29865,8 +29347,7 @@
       void_Function_Object: findType("~(Object)"),
       void_Function_Object_StackTrace: findType("~(Object,StackTrace)"),
       void_Function_String_dynamic: findType("~(String,@)"),
-      void_Function_Timer: findType("~(Timer)"),
-      void_Function_int_dynamic: findType("~(int,@)")
+      void_Function_Timer: findType("~(Timer)")
     };
   })();
   (function constants() {
@@ -29879,7 +29360,6 @@
     B.JSString_methods = J.JSString.prototype;
     B.JavaScriptFunction_methods = J.JavaScriptFunction.prototype;
     B.JavaScriptObject_methods = J.JavaScriptObject.prototype;
-    B.NativeByteData_methods = A.NativeByteData.prototype;
     B.NativeUint32List_methods = A.NativeUint32List.prototype;
     B.NativeUint8List_methods = A.NativeUint8List.prototype;
     B.PlainJavaScriptObject_methods = J.PlainJavaScriptObject.prototype;
@@ -30306,11 +29786,6 @@
     _lazyFinal($, "_Uri__needsNoEncoding", "$get$_Uri__needsNoEncoding", () => A.RegExp_RegExp("^[\\-\\.0-9A-Z_a-z~]*$", true, false));
     _lazyFinal($, "_hashSeed", "$get$_hashSeed", () => A.objectHashCode(B.Type_Object_A4p));
     _lazyFinal($, "_jsBoxedDartObjectProperty", "$get$_jsBoxedDartObjectProperty", () => Symbol("jsBoxedDartObjectProperty"));
-    _lazyFinal($, "Random__secureRandom", "$get$Random__secureRandom", () => {
-      var t1 = new A._JSSecureRandom(new DataView(new ArrayBuffer(A._checkLength(8))));
-      t1._JSSecureRandom$0();
-      return t1;
-    });
     _lazyFinal($, "isSoundMode", "$get$isSoundMode", () => !type$.List_int._is(A._setArrayType([], A.findType("JSArray<int?>"))));
     _lazy($, "newBuiltValueToStringHelper", "$get$newBuiltValueToStringHelper", () => new A.newBuiltValueToStringHelper_closure());
     _lazyFinal($, "_runtimeType", "$get$_runtimeType", () => A.getRuntimeTypeOfDartObject(A.RegExp_RegExp("", true, false)));
@@ -30370,10 +29845,11 @@
     _lazy($, "_$serviceExtensionResponseSerializer", "$get$_$serviceExtensionResponseSerializer", () => new A._$ServiceExtensionResponseSerializer());
     _lazyFinal($, "_logger", "$get$_logger", () => A.Logger_Logger("Utilities"));
     _lazyFinal($, "BaseRequest__tokenRE", "$get$BaseRequest__tokenRE", () => A.RegExp_RegExp("^[\\w!#%&'*+\\-.^`|~]+$", true, false));
+    _lazyFinal($, "_digitRegex", "$get$_digitRegex", () => A.RegExp_RegExp("^\\d+$", true, false));
     _lazyFinal($, "_escapedChar", "$get$_escapedChar", () => A.RegExp_RegExp('["\\x00-\\x1F\\x7F]', true, false));
     _lazyFinal($, "token", "$get$token", () => A.RegExp_RegExp('[^()<>@,;:"\\\\/[\\]?={} \\t\\x00-\\x1F\\x7F]+', true, false));
     _lazyFinal($, "_lws", "$get$_lws", () => A.RegExp_RegExp("(?:\\r\\n)?[ \\t]+", true, false));
-    _lazyFinal($, "_quotedString", "$get$_quotedString", () => A.RegExp_RegExp('"(?:[^"\\x00-\\x1F\\x7F\\\\]|\\\\.)*"', true, false));
+    _lazyFinal($, "_quotedString", "$get$_quotedString", () => A.RegExp_RegExp('"(?:[^"\\x00-\\x1F\\x7F]|\\\\.)*"', true, false));
     _lazyFinal($, "_quotedPair", "$get$_quotedPair", () => A.RegExp_RegExp("\\\\(.)", true, false));
     _lazyFinal($, "nonToken", "$get$nonToken", () => A.RegExp_RegExp('[()<>@,;:"\\\\/\\[\\]?={} \\t\\x00-\\x1F\\x7F]', true, false));
     _lazyFinal($, "whitespace", "$get$whitespace", () => A.RegExp_RegExp("(?:" + $.$get$_lws().pattern + ")*", true, false));
@@ -30392,8 +29868,8 @@
       t4 = A.Completer_Completer(type$.dynamic);
       return new A.Pool(t2, t3, t1, 1000, new A.AsyncMemoizer(t4, A.findType("AsyncMemoizer<@>")));
     });
-    _lazy($, "V1State_random", "$get$V1State_random", () => new A.CryptoRNG());
-    _lazy($, "V4State_random", "$get$V4State_random", () => new A.CryptoRNG());
+    _lazy($, "V1State_random", "$get$V1State_random", () => A.MathRNG$());
+    _lazy($, "V4State_random", "$get$V4State_random", () => A.MathRNG$());
     _lazyFinal($, "UuidParsing__byteToHex", "$get$UuidParsing__byteToHex", () => {
       var i,
         _list = J.JSArray_JSArray$allocateGrowable(256, type$.String);
@@ -30401,7 +29877,6 @@
         _list[i] = B.JSString_methods.padLeft$2(B.JSInt_methods.toRadixString$1(i, 16), 2, "0");
       return _list;
     });
-    _lazyFinal($, "CryptoRNG__secureRandom", "$get$CryptoRNG__secureRandom", () => $.$get$Random__secureRandom());
     _lazyFinal($, "_noncePattern", "$get$_noncePattern", () => A.RegExp_RegExp("^[\\w+/_-]+[=]{0,2}$", true, false));
     _lazyFinal($, "_createScript", "$get$_createScript", () => new A._createScript_closure().call$0());
   })();
diff --git a/dwds/lib/src/version.dart b/dwds/lib/src/version.dart
index f4414db..9c88b04 100644
--- a/dwds/lib/src/version.dart
+++ b/dwds/lib/src/version.dart
@@ -1,2 +1,2 @@
 // Generated code. Do not modify.
-const packageVersion = '25.0.3';
+const packageVersion = '25.1.0-wip';
diff --git a/dwds/pubspec.yaml b/dwds/pubspec.yaml
index bdaf630..987f5e2 100644
--- a/dwds/pubspec.yaml
+++ b/dwds/pubspec.yaml
@@ -1,6 +1,6 @@
 name: dwds
 # Every time this changes you need to run `dart run build_runner build`.
-version: 25.0.3
+version: 25.1.0-wip
 
 description: >-
   A service that proxies between the Chrome debug protocol and the Dart VM
diff --git a/dwds/test/common/hot_restart_common.dart b/dwds/test/common/hot_restart_common.dart
index 5cea54d..de546ba 100644
--- a/dwds/test/common/hot_restart_common.dart
+++ b/dwds/test/common/hot_restart_common.dart
@@ -47,30 +47,37 @@
   }
 
   Future<void> makeEditAndRecompile() async {
-    context.makeEditToDartEntryFile(
-      toReplace: originalString,
-      replaceWith: newString,
-    );
+    await context.makeEdits([
+      (
+        file: context.project.dartEntryFileName,
+        originalString: originalString,
+        newString: newString,
+      ),
+    ]);
     await recompile(hasEdits: true);
   }
 
-  /// Wait for main to finish executing before checking expectations by checking
-  /// for a log output.
-  ///
-  /// If [debuggingEnabled] is false, we can't check for Chrome logs and instead
-  /// wait 1 second.
-  // TODO(srujzs): We should do something less prone to race conditions when
-  // debugging is disabled.
-  Future<void> waitForMainToExecute({bool debuggingEnabled = true}) async {
-    if (!debuggingEnabled) return Future.delayed(const Duration(seconds: 1));
+  // Wait for `expectedStrings` to be printed to the console.
+  Future<void> waitForLogs(List<String> expectedStrings) async {
+    final expectations = List<String>.from(expectedStrings);
     final completer = Completer<void>();
-    final expectedString = 'main executed';
     final subscription = context.webkitDebugger.onConsoleAPICalled.listen((e) {
-      if (e.args.first.value == expectedString) {
-        completer.complete();
+      final value = e.args.first.value;
+      if (expectations.contains(value)) {
+        expectations.remove(value);
+        if (expectations.isEmpty) {
+          completer.complete();
+        }
       }
     });
-    await completer.future;
+    await completer.future.timeout(
+      const Duration(minutes: 1),
+      onTimeout: () {
+        throw TimeoutException(
+          'Failed to find logs: $expectedStrings in console.',
+        );
+      },
+    );
     await subscription.cancel();
   }
 
@@ -95,14 +102,10 @@
         });
 
         test('can live reload changes ', () async {
-          final mainDone = waitForMainToExecute();
-          await makeEditAndRecompile();
-          await mainDone;
-          final source = await context.webDriver.pageSource;
-
           // A full reload should clear the state.
-          expect(source.contains(originalString), isFalse);
-          expect(source.contains(newString), isTrue);
+          final logFuture = waitForLogs([newString]);
+          await makeEditAndRecompile();
+          await logFuture;
         });
       });
 
@@ -127,14 +130,10 @@
         });
 
         test('can live reload changes ', () async {
-          final mainDone = waitForMainToExecute(debuggingEnabled: false);
-          await makeEditAndRecompile();
-          await mainDone;
-          final source = await context.webDriver.pageSource;
-
           // A full reload should clear the state.
-          expect(source.contains(originalString), isFalse);
-          expect(source.contains(newString), isTrue);
+          final logFuture = waitForLogs([newString]);
+          await makeEditAndRecompile();
+          await logFuture;
         });
       });
 
@@ -160,14 +159,10 @@
         });
 
         test('can live reload changes ', () async {
-          final mainDone = waitForMainToExecute(debuggingEnabled: false);
-          await makeEditAndRecompile();
-          await mainDone;
-          final source = await context.webDriver.pageSource;
-
           // A full reload should clear the state.
-          expect(source.contains(originalString), isFalse);
-          expect(source.contains(newString), isTrue);
+          final logFuture = waitForLogs([newString]);
+          await makeEditAndRecompile();
+          await logFuture;
         });
       });
     },
@@ -303,7 +298,8 @@
           ]),
         ),
       );
-      final mainDone = waitForMainToExecute();
+      // Main is re-invoked which shouldn't clear the state.
+      final logFuture = waitForLogs(['$originalString $newString']);
       final hotRestart = context.getRegisteredServiceExtension('hotRestart');
       expect(
         await fakeClient.callServiceExtension(hotRestart!),
@@ -311,12 +307,7 @@
       );
 
       await eventsDone;
-      await mainDone;
-
-      final source = await context.webDriver.pageSource;
-      // Main is re-invoked which shouldn't clear the state.
-      expect(source, contains(originalString));
-      expect(source, contains(newString));
+      await logFuture;
     });
 
     test('can send events before and after hot restart', () async {
@@ -349,7 +340,8 @@
       );
 
       await recompile();
-      final mainDone = waitForMainToExecute();
+      // Main is re-invoked which shouldn't clear the state.
+      final logFuture = waitForLogs(['$originalString $originalString']);
       final hotRestart = context.getRegisteredServiceExtension('hotRestart');
       expect(
         await fakeClient.callServiceExtension(hotRestart!),
@@ -368,11 +360,7 @@
       );
 
       await eventsDone;
-      await mainDone;
-
-      final source = await context.webDriver.pageSource;
-      // Main is re-invoked which shouldn't clear the state.
-      expect(source, contains('Hello World!'));
+      await logFuture;
     });
 
     test('can refresh the page via the fullReload service extension', () async {
@@ -390,7 +378,8 @@
           ]),
         ),
       );
-      final mainDone = waitForMainToExecute();
+      // Should see only the new text.
+      final logFuture = waitForLogs([newString]);
       final fullReload = context.getRegisteredServiceExtension('fullReload');
       expect(
         await fakeClient.callServiceExtension(fullReload!),
@@ -398,12 +387,7 @@
       );
 
       await eventsDone;
-      await mainDone;
-
-      final source = await context.webDriver.pageSource;
-      // Should see only the new text
-      expect(source.contains(originalString), isFalse);
-      expect(source.contains(newString), isTrue);
+      await logFuture;
     });
 
     test('can hot restart while paused', () async {
@@ -427,17 +411,11 @@
       );
 
       await makeEditAndRecompile();
-      final mainDone = waitForMainToExecute();
+      // Main is re-invoked which shouldn't clear the state.
+      final logFuture = waitForLogs(['$originalString $newString']);
       final hotRestart = context.getRegisteredServiceExtension('hotRestart');
       await fakeClient.callServiceExtension(hotRestart!);
-
-      await mainDone;
-
-      final source = await context.webDriver.pageSource;
-
-      // Main is re-invoked which shouldn't clear the state.
-      expect(source.contains(originalString), isTrue);
-      expect(source.contains(newString), isTrue);
+      await logFuture;
 
       vm = await client.getVM();
       isolateId = vm.isolates!.first.id!;
@@ -474,37 +452,25 @@
     test('can hot restart with no changes, hot restart with changes, and '
         'hot restart again with no changes', () async {
       // Empty hot restart.
-      var mainDone = waitForMainToExecute();
+      var logFuture = waitForLogs(['$originalString $originalString']);
       await recompile();
       final hotRestart = context.getRegisteredServiceExtension('hotRestart');
       await fakeClient.callServiceExtension(hotRestart!);
-
-      await mainDone;
-      var source = await context.webDriver.pageSource;
-      expect(source.contains(originalString), isTrue);
-      expect(source.contains(newString), isFalse);
+      await logFuture;
 
       // Hot restart.
-      mainDone = waitForMainToExecute();
+      logFuture = waitForLogs(['$originalString $originalString $newString']);
       await makeEditAndRecompile();
       await fakeClient.callServiceExtension(hotRestart);
-
-      await mainDone;
-      source = await context.webDriver.pageSource;
-      // Main is re-invoked which shouldn't clear the state.
-      expect(source.contains(originalString), isTrue);
-      expect(source.contains(newString), isTrue);
+      await logFuture;
 
       // Empty hot restart.
-      mainDone = waitForMainToExecute();
+      logFuture = waitForLogs([
+        '$originalString $originalString $newString $newString',
+      ]);
       await recompile();
       await fakeClient.callServiceExtension(hotRestart);
-
-      await mainDone;
-      source = await context.webDriver.pageSource;
-      expect(source.contains(originalString), isTrue);
-      // `newString` should now exist twice in the source.
-      expect(source.contains(RegExp('$newString.*$newString')), isTrue);
+      await logFuture;
     });
   }, timeout: Timeout.factor(2));
 
@@ -529,19 +495,15 @@
         });
 
         test('can hot restart changes ', () async {
-          final mainDone = waitForMainToExecute();
-          await makeEditAndRecompile();
-          await mainDone;
-          final source = await context.webDriver.pageSource;
-
           // Main is re-invoked which shouldn't clear the state.
-          expect(source.contains(originalString), isTrue);
-          expect(source.contains(newString), isTrue);
-          // The ext.flutter.disassemble callback is invoked and waited for.
-          expect(
-            source,
-            contains('start disassemble end disassemble $newString'),
-          );
+          final logFutures = waitForLogs([
+            '$originalString $newString',
+            // The ext.flutter.disassemble callback is invoked and waited for.
+            'start disassemble',
+            'end disassemble',
+          ]);
+          await makeEditAndRecompile();
+          await logFutures;
         });
 
         test(
@@ -589,19 +551,15 @@
         });
 
         test('can hot restart changes ', () async {
-          final mainDone = waitForMainToExecute(debuggingEnabled: false);
-          await makeEditAndRecompile();
-          await mainDone;
-          final source = await context.webDriver.pageSource;
-
           // Main is re-invoked which shouldn't clear the state.
-          expect(source.contains(originalString), isTrue);
-          expect(source.contains(newString), isTrue);
-          // The ext.flutter.disassemble callback is invoked and waited for.
-          expect(
-            source,
-            contains('start disassemble end disassemble $newString'),
-          );
+          final logFutures = waitForLogs([
+            '$originalString $newString',
+            // The ext.flutter.disassemble callback is invoked and waited for.
+            'start disassemble',
+            'end disassemble',
+          ]);
+          await makeEditAndRecompile();
+          await logFutures;
         });
       });
     },
@@ -650,7 +608,8 @@
           ),
         );
 
-        final mainDone = waitForMainToExecute();
+        // Main is re-invoked which shouldn't clear the state.
+        final logFuture = waitForLogs(['$originalString $newString']);
         final hotRestart = context.getRegisteredServiceExtension('hotRestart');
         expect(
           await fakeClient.callServiceExtension(hotRestart!),
@@ -659,24 +618,18 @@
 
         await eventsDone;
 
-        final sourceBeforeResume = await context.webDriver.pageSource;
-        expect(sourceBeforeResume.contains(newString), isFalse);
-
         final vm = await client.getVM();
         final isolateId = vm.isolates!.first.id!;
         await client.resume(isolateId);
 
-        await mainDone;
-
-        final sourceAfterResume = await context.webDriver.pageSource;
-        expect(sourceAfterResume.contains(newString), isTrue);
+        await logFuture;
       },
     );
 
     test(
       'after page refresh, does not run app until there is a resume event',
       () async {
-        final mainDone = waitForMainToExecute();
+        final logFuture = waitForLogs([newString]);
         await makeEditAndRecompile();
         await context.webDriver.driver.refresh();
 
@@ -693,17 +646,11 @@
 
         await eventsDone;
 
-        final sourceBeforeResume = await context.webDriver.pageSource;
-        expect(sourceBeforeResume.contains(newString), isFalse);
-
         final vm = await client.getVM();
         final isolateId = vm.isolates!.first.id!;
         await client.resume(isolateId);
 
-        await mainDone;
-
-        final sourceAfterResume = await context.webDriver.pageSource;
-        expect(sourceAfterResume.contains(newString), isTrue);
+        await logFuture;
       },
     );
   });
diff --git a/dwds/test/common/hot_restart_correctness_common.dart b/dwds/test/common/hot_restart_correctness_common.dart
index 381c41a..36ac8e9 100644
--- a/dwds/test/common/hot_restart_correctness_common.dart
+++ b/dwds/test/common/hot_restart_correctness_common.dart
@@ -7,12 +7,13 @@
 @Timeout(Duration(minutes: 5))
 library;
 
+import 'dart:async';
+
 import 'package:dwds/dwds.dart';
 import 'package:dwds/expression_compiler.dart';
 import 'package:test/test.dart';
 import 'package:test_common/logging.dart';
 import 'package:test_common/test_sdk_configuration.dart';
-import 'package:test_common/utilities.dart';
 import 'package:vm_service/vm_service.dart';
 
 import '../fixtures/context.dart';
@@ -38,11 +39,13 @@
   final context = TestContext(testHotRestart2, provider);
 
   Future<void> makeEditAndRecompile() async {
-    context.makeEditToDartLibFile(
-      libFileName: 'library2.dart',
-      toReplace: originalString,
-      replaceWith: newString,
-    );
+    await context.makeEdits([
+      (
+        file: 'library2.dart',
+        originalString: originalString,
+        newString: newString,
+      ),
+    ]);
     if (compilationMode == CompilationMode.frontendServer) {
       await context.recompile(fullRestart: true);
     } else {
@@ -51,6 +54,25 @@
     }
   }
 
+  // Wait for `expectedString` to be printed to the console.
+  Future<void> waitForLog(String expectedString) async {
+    final completer = Completer<void>();
+    final subscription = context.webkitDebugger.onConsoleAPICalled.listen((e) {
+      if (e.args.first.value == expectedString) {
+        completer.complete();
+      }
+    });
+    await completer.future.timeout(
+      const Duration(minutes: 1),
+      onTimeout: () {
+        throw TimeoutException(
+          "Failed to find log: '$expectedString' in console.",
+        );
+      },
+    );
+    await subscription.cancel();
+  }
+
   group('Injected client', () {
     VmService? fakeClient;
 
@@ -72,18 +94,25 @@
       await context.tearDown();
     });
 
+    test('initial state prints the right log', () async {
+      final client = context.debugConnection.vmService;
+
+      final logFuture = waitForLog(
+        'ConstObject(reloadVariable: 23, ConstantEqualitySuccess)',
+      );
+      final vm = await client.getVM();
+      final isolate = await client.getIsolate(vm.isolates!.first.id!);
+      final rootLib = isolate.rootLib;
+      await client.evaluate(isolate.id!, rootLib!.id!, 'printConst()');
+      await logFuture;
+    });
+
     test(
       'properly compares constants after hot restart via the service extension',
       () async {
         final client = context.debugConnection.vmService;
         await client.streamListen('Isolate');
 
-        var source = await context.webDriver.pageSource;
-        expect(
-          source,
-          contains('ConstObject(reloadVariable: 23, ConstantEqualitySuccess)'),
-        );
-
         await makeEditAndRecompile();
 
         final eventsDone = expectLater(
@@ -97,6 +126,9 @@
           ),
         );
 
+        final logFuture = waitForLog(
+          'ConstObject(reloadVariable: 45, ConstantEqualitySuccess)',
+        );
         final hotRestart = context.getRegisteredServiceExtension('hotRestart');
         expect(
           await fakeClient!.callServiceExtension(hotRestart!),
@@ -104,16 +136,7 @@
         );
 
         await eventsDone;
-
-        source = await context.webDriver.pageSource;
-        if (dartSdkIsAtLeast('3.4.0-61.0.dev')) {
-          expect(
-            source,
-            contains(
-              'ConstObject(reloadVariable: 45, ConstantEqualitySuccess)',
-            ),
-          );
-        }
+        await logFuture;
       },
     );
   }, timeout: Timeout.factor(2));
@@ -139,25 +162,11 @@
         });
 
         test('properly compares constants after hot restart', () async {
-          var source = await context.webDriver.pageSource;
-          expect(
-            source,
-            contains(
-              'ConstObject(reloadVariable: 23, ConstantEqualitySuccess)',
-            ),
+          final logFuture = waitForLog(
+            'ConstObject(reloadVariable: 45, ConstantEqualitySuccess)',
           );
-
           await makeEditAndRecompile();
-
-          source = await context.webDriver.pageSource;
-          if (dartSdkIsAtLeast('3.4.0-61.0.dev')) {
-            expect(
-              source,
-              contains(
-                'ConstObject(reloadVariable: 45, ConstantEqualitySuccess)',
-              ),
-            );
-          }
+          await logFuture;
         });
       });
 
@@ -182,25 +191,11 @@
         });
 
         test('properly compares constants after hot restart', () async {
-          var source = await context.webDriver.pageSource;
-          expect(
-            source,
-            contains(
-              'ConstObject(reloadVariable: 23, ConstantEqualitySuccess)',
-            ),
+          final logFuture = waitForLog(
+            'ConstObject(reloadVariable: 45, ConstantEqualitySuccess)',
           );
-
           await makeEditAndRecompile();
-
-          source = await context.webDriver.pageSource;
-          if (dartSdkIsAtLeast('3.4.0-61.0.dev')) {
-            expect(
-              source,
-              contains(
-                'ConstObject(reloadVariable: 45, ConstantEqualitySuccess)',
-              ),
-            );
-          }
+          await logFuture;
         });
       });
     },
diff --git a/dwds/test/devtools_test.dart b/dwds/test/devtools_test.dart
index 3c246fe..94eeb70 100644
--- a/dwds/test/devtools_test.dart
+++ b/dwds/test/devtools_test.dart
@@ -112,10 +112,13 @@
         // https://github.com/dart-lang/webdev/pull/901#issuecomment-586438132
         final client = context.debugConnection.vmService;
         await client.streamListen('Isolate');
-        context.makeEditToDartEntryFile(
-          toReplace: 'Hello World!',
-          replaceWith: 'Bonjour le monde!',
-        );
+        await context.makeEdits([
+          (
+            file: context.project.dartEntryFileName,
+            originalString: 'Hello World!',
+            newString: 'Bonjour le monde!',
+          ),
+        ]);
         await context.waitForSuccessfulBuild(propagateToBrowser: true);
 
         final eventsDone = expectLater(
diff --git a/dwds/test/fixtures/context.dart b/dwds/test/fixtures/context.dart
index 6a40c8f..e515f27 100644
--- a/dwds/test/fixtures/context.dart
+++ b/dwds/test/fixtures/context.dart
@@ -492,8 +492,9 @@
         if (debugSettings.enableDebugging && !testSettings.waitToDebug) {
           await startDebugging();
         }
+        _webkitDebugger = WebkitDebugger(WipDebugger(tabConnection));
       } else {
-        // No tab needs to be dicovered, so fulfill the relevant completer.
+        // No tab needs to be discovered, so fulfill the relevant completer.
         tabConnectionCompleter.complete();
       }
     } catch (e, s) {
@@ -538,7 +539,6 @@
 
   Future<void> startDebugging() async {
     debugConnection = await testServer.dwds.debugConnection(appConnection);
-    _webkitDebugger = WebkitDebugger(WipDebugger(tabConnection));
   }
 
   Future<void> tearDown() async {
@@ -565,23 +565,30 @@
     _outputDir = null;
   }
 
-  void makeEditToDartEntryFile({
-    required String toReplace,
-    required String replaceWith,
-  }) {
-    final file = File(project.dartEntryFilePath);
-    final fileContents = file.readAsStringSync();
-    file.writeAsStringSync(fileContents.replaceAll(toReplace, replaceWith));
-  }
-
-  void makeEditToDartLibFile({
-    required String libFileName,
-    required String toReplace,
-    required String replaceWith,
-  }) {
-    final file = File(project.dartLibFilePath(libFileName));
-    final fileContents = file.readAsStringSync();
-    file.writeAsStringSync(fileContents.replaceAll(toReplace, replaceWith));
+  /// Given a list of edits, use file IO to write them to the file system.
+  ///
+  /// If `file` has the same name as the project's entry file name, that file
+  /// will be edited. Otherwise, it's assumed to be a library file.
+  // TODO(srujzs): It's possible we may want a library file with the same name
+  // as the entry file, but this function doesn't allow that. Potentially
+  // support that.
+  Future<void> makeEdits(List<Edit> edits) async {
+    // `dart:io`'s `stat` on Windows does not have millisecond precision so we
+    // need to make sure we wait long enough that modifications result in a
+    // timestamp that is guaranteed to be after the previous compile.
+    // TODO(https://github.com/dart-lang/sdk/issues/51937): Remove once this bug
+    // is fixed.
+    if (Platform.isWindows) await Future.delayed(Duration(seconds: 1));
+    for (var (:file, :originalString, :newString) in edits) {
+      if (file == project.dartEntryFileName) {
+        file = project.dartEntryFilePath;
+      } else {
+        file = project.dartLibFilePath(file);
+      }
+      final f = File(project.dartLibFilePath(file));
+      final fileContents = f.readAsStringSync();
+      f.writeAsStringSync(fileContents.replaceAll(originalString, newString));
+    }
   }
 
   void addLibraryFile({required String libFileName, required String contents}) {
@@ -677,3 +684,5 @@
     return lineNumber + 1;
   }
 }
+
+typedef Edit = ({String file, String originalString, String newString});
diff --git a/dwds/test/hot_reload_breakpoints_test.dart b/dwds/test/hot_reload_breakpoints_test.dart
index 7849005..7bcb781 100644
--- a/dwds/test/hot_reload_breakpoints_test.dart
+++ b/dwds/test/hot_reload_breakpoints_test.dart
@@ -35,28 +35,9 @@
 
   tearDownAll(provider.dispose);
 
-  void makeEdit(String file, String originalString, String newString) {
-    if (file == project.dartEntryFileName) {
-      context.makeEditToDartEntryFile(
-        toReplace: originalString,
-        replaceWith: newString,
-      );
-    } else {
-      context.makeEditToDartLibFile(
-        libFileName: file,
-        toReplace: originalString,
-        replaceWith: newString,
-      );
-    }
-  }
-
-  Future<void> makeEditAndRecompile(
-    String file,
-    String originalString,
-    String newString,
-  ) async {
-    makeEdit(file, originalString, newString);
-    await context.recompile(fullRestart: false);
+  Future<void> makeEditsAndRecompile(List<Edit> edits) async {
+    await context.makeEdits(edits);
+    await context.recompile(fullRestart: true);
   }
 
   group('when pause_isolates_on_start is true', () {
@@ -128,9 +109,9 @@
       await client.resume(isolate.id!);
     }
 
-    // When the program is executing, we want to check that at some point it
-    // will execute code that will emit [expectedString].
-    Future<void> resumeAndExpectLog(String expectedString) async {
+    // Resume the program, and check that at some point it will execute code
+    // that will print `expectedString` to the console.
+    Future<void> resumeAndWaitForLog(String expectedString) async {
       final completer = Completer<void>();
       final subscription = context.webkitDebugger.onConsoleAPICalled.listen((
         e,
@@ -140,7 +121,14 @@
         }
       });
       await resume();
-      await completer.future;
+      await completer.future.timeout(
+        const Duration(minutes: 1),
+        onTimeout: () {
+          throw TimeoutException(
+            "Failed to find log: '$expectedString' in console.",
+          );
+        },
+      );
       await subscription.cancel();
     }
 
@@ -184,9 +172,9 @@
       await client.evaluate(isolate.id!, rootLib!.id!, 'evaluate()');
     }
 
-    // Much like `resumeAndExpectLog`, we need a completer to ensure the log
-    // will eventually occur when code is executing.
-    Future<void> callEvaluateAndExpectLog(String expectedString) async {
+    // Call the method `evaluate` in the program and wait for `expectedString`
+    // to be printed to the console.
+    Future<void> callEvaluateAndWaitForLog(String expectedString) async {
       final completer = Completer<void>();
       final subscription = context.webkitDebugger.onConsoleAPICalled.listen((
         e,
@@ -199,7 +187,14 @@
       final isolate = await client.getIsolate(vm.isolates!.first.id!);
       final rootLib = isolate.rootLib;
       await client.evaluate(isolate.id!, rootLib!.id!, 'evaluate()');
-      await completer.future;
+      await completer.future.timeout(
+        const Duration(minutes: 1),
+        onTimeout: () {
+          throw TimeoutException(
+            "Failed to find log: '$expectedString' in console.",
+          );
+        },
+      );
       await subscription.cancel();
     }
 
@@ -220,7 +215,7 @@
 
       // Should break at `callLog`.
       await breakpointFuture;
-      await resumeAndExpectLog(genString);
+      await resumeAndWaitForLog(genString);
 
       await context.recompile(fullRestart: false);
 
@@ -234,7 +229,7 @@
 
       // Should break at `callLog`.
       await breakpointFuture;
-      await resumeAndExpectLog(genString);
+      await resumeAndWaitForLog(genString);
     });
 
     test('after edit and hot reload, breakpoint is in new file', () async {
@@ -252,10 +247,12 @@
 
       // Should break at `callLog`.
       await breakpointFuture;
-      await resumeAndExpectLog(oldString);
+      await resumeAndWaitForLog(oldString);
 
       // Modify the string that gets printed.
-      await makeEditAndRecompile(mainFile, oldString, newString);
+      await makeEditsAndRecompile([
+        (file: mainFile, originalString: oldString, newString: newString),
+      ]);
 
       await hotReloadAndHandlePausePost([
         (file: mainFile, breakpointMarker: callLogMarker, bp: bp),
@@ -267,7 +264,7 @@
 
       // Should break at `callLog`.
       await breakpointFuture;
-      await resumeAndExpectLog(newString);
+      await resumeAndWaitForLog(newString);
     });
 
     test('after adding line, hot reload, removing line, and hot reload, '
@@ -285,13 +282,15 @@
 
       // Should break at `callLog`.
       await breakpointFuture;
-      await resumeAndExpectLog(genLog);
+      await resumeAndWaitForLog(genLog);
 
       // Add an extra log before the existing log.
       final extraLog = 'hot reload';
       final oldString = "log('";
       final newString = "log('$extraLog');\n$oldString";
-      await makeEditAndRecompile(mainFile, oldString, newString);
+      await makeEditsAndRecompile([
+        (file: mainFile, originalString: oldString, newString: newString),
+      ]);
 
       bp =
           (await hotReloadAndHandlePausePost([
@@ -300,14 +299,16 @@
 
       breakpointFuture = waitForBreakpoint();
 
-      await callEvaluateAndExpectLog(extraLog);
+      await callEvaluateAndWaitForLog(extraLog);
 
       // Should break at `callLog`.
       await breakpointFuture;
-      await resumeAndExpectLog(genLog);
+      await resumeAndWaitForLog(genLog);
 
       // Remove the line we just added.
-      await makeEditAndRecompile(mainFile, newString, oldString);
+      await makeEditsAndRecompile([
+        (file: mainFile, originalString: newString, newString: oldString),
+      ]);
 
       await hotReloadAndHandlePausePost([
         (file: mainFile, breakpointMarker: callLogMarker, bp: bp),
@@ -326,7 +327,7 @@
       // Should break at `callLog`.
       await breakpointFuture;
       expect(consoleLogs.contains(extraLog), false);
-      await resumeAndExpectLog(genLog);
+      await resumeAndWaitForLog(genLog);
       await consoleSubscription.cancel();
     });
 
@@ -347,7 +348,7 @@
 
         // Should break at `callLog`.
         await breakpointFuture;
-        await resumeAndExpectLog(genLog);
+        await resumeAndWaitForLog(genLog);
 
         // Add a library file, import it, and then refer to it in the log.
         final libFile = 'library.dart';
@@ -363,10 +364,13 @@
         final newImports =
             '$oldImports\n'
             "import 'package:_test_hot_reload_breakpoints/library.dart';";
-        makeEdit(mainFile, oldImports, newImports);
+        final edits = [
+          (file: mainFile, originalString: oldImports, newString: newImports),
+        ];
         final oldLog = "log('\$mainValue');";
         final newLog = "log('\$libraryValue');";
-        await makeEditAndRecompile(mainFile, oldLog, newLog);
+        edits.add((file: mainFile, originalString: oldLog, newString: newLog));
+        await makeEditsAndRecompile(edits);
 
         await hotReloadAndHandlePausePost([
           (file: mainFile, breakpointMarker: callLogMarker, bp: bp),
@@ -385,7 +389,7 @@
         await resume();
         // Should break at `libValue`.
         await breakpointFuture;
-        await resumeAndExpectLog(libGenLog);
+        await resumeAndWaitForLog(libGenLog);
       },
     );
 
@@ -406,10 +410,11 @@
 
       // Should break at `callLog`.
       await breakpointFuture;
-      await resumeAndExpectLog(genLog);
+      await resumeAndWaitForLog(genLog);
 
       // Add library files, import them, but only refer to the last one in main.
       final numFiles = 50;
+      final edits = <Edit>[];
       for (var i = 1; i <= numFiles; i++) {
         final libFile = 'library$i.dart';
         context.addLibraryFile(
@@ -422,11 +427,16 @@
         final newImports =
             '$oldImports\n'
             "import 'package:_test_hot_reload_breakpoints/$libFile';";
-        makeEdit(mainFile, oldImports, newImports);
+        edits.add((
+          file: mainFile,
+          originalString: oldImports,
+          newString: newImports,
+        ));
       }
       final oldLog = "log('\$mainValue');";
       final newLog = "log('\$libraryValue$numFiles');";
-      await makeEditAndRecompile(mainFile, oldLog, newLog);
+      edits.add((file: mainFile, originalString: oldLog, newString: newLog));
+      await makeEditsAndRecompile(edits);
 
       await hotReloadAndHandlePausePost([
         (file: mainFile, breakpointMarker: callLogMarker, bp: bp),
@@ -449,7 +459,7 @@
       await resume();
       // Should break at the breakpoint in the last file.
       await breakpointFuture;
-      await resumeAndExpectLog('library$numFiles gen1');
+      await resumeAndWaitForLog('library$numFiles gen1');
     });
 
     test('breakpoint in captured code is deleted', () async {
@@ -460,7 +470,9 @@
 
       final oldLog = "log('\$mainValue');";
       final newLog = "log('\${closure()}');";
-      await makeEditAndRecompile(mainFile, oldLog, newLog);
+      await makeEditsAndRecompile([
+        (file: mainFile, originalString: oldLog, newString: newLog),
+      ]);
 
       bp =
           (await hotReloadAndHandlePausePost([
@@ -475,14 +487,16 @@
       await breakpointFuture;
       final oldCapturedString = 'captured closure gen0';
       // Closure gets evaluated for the first time.
-      await resumeAndExpectLog(oldCapturedString);
+      await resumeAndWaitForLog(oldCapturedString);
 
       final newCapturedString = 'captured closure gen1';
-      await makeEditAndRecompile(
-        mainFile,
-        oldCapturedString,
-        newCapturedString,
-      );
+      await makeEditsAndRecompile([
+        (
+          file: mainFile,
+          originalString: oldCapturedString,
+          newString: newCapturedString,
+        ),
+      ]);
 
       await hotReloadAndHandlePausePost([
         (file: mainFile, breakpointMarker: capturedStringMarker, bp: bp),
@@ -490,7 +504,7 @@
 
       // Breakpoint should not be hit as it's now deleted. We should also see
       // the old string still as the closure has not been reevaluated.
-      await callEvaluateAndExpectLog(oldCapturedString);
+      await callEvaluateAndWaitForLog(oldCapturedString);
     });
   }, timeout: Timeout.factor(2));
 
@@ -515,7 +529,9 @@
       await context.tearDown();
     });
 
-    Future<void> callEvaluateAndExpectLog(String expectedString) async {
+    // Call the method `evaluate` in the program and wait for `expectedString`
+    // to be printed to the console.
+    Future<void> callEvaluateAndWaitForLog(String expectedString) async {
       final completer = Completer<void>();
       final subscription = context.webkitDebugger.onConsoleAPICalled.listen((
         e,
@@ -528,7 +544,14 @@
       final isolate = await client.getIsolate(vm.isolates!.first.id!);
       final rootLib = isolate.rootLib;
       await client.evaluate(isolate.id!, rootLib!.id!, 'evaluate()');
-      await completer.future;
+      await completer.future.timeout(
+        const Duration(minutes: 1),
+        onTimeout: () {
+          throw TimeoutException(
+            "Failed to find log: '$expectedString' in console.",
+          );
+        },
+      );
       await subscription.cancel();
     }
 
@@ -536,17 +559,19 @@
       final oldString = 'main gen0';
       final newString = 'main gen1';
 
-      await callEvaluateAndExpectLog(oldString);
+      await callEvaluateAndWaitForLog(oldString);
 
       // Modify the string that gets printed and hot reload.
-      await makeEditAndRecompile(mainFile, oldString, newString);
+      await makeEditsAndRecompile([
+        (file: mainFile, originalString: oldString, newString: newString),
+      ]);
       final vm = await client.getVM();
       final isolate = await client.getIsolate(vm.isolates!.first.id!);
       final report = await client.reloadSources(isolate.id!);
       expect(report.success, true);
 
       // Program should not be paused, so this should execute.
-      await callEvaluateAndExpectLog(newString);
+      await callEvaluateAndWaitForLog(newString);
     });
   }, timeout: Timeout.factor(2));
 }
diff --git a/dwds/test/hot_reload_test.dart b/dwds/test/hot_reload_test.dart
index 27c48fa..41080f7 100644
--- a/dwds/test/hot_reload_test.dart
+++ b/dwds/test/hot_reload_test.dart
@@ -40,25 +40,38 @@
   }
 
   Future<void> makeEditAndRecompile() async {
-    context.makeEditToDartLibFile(
-      libFileName: 'library1.dart',
-      toReplace: originalString,
-      replaceWith: newString,
-    );
+    await context.makeEdits([
+      (
+        file: 'library1.dart',
+        originalString: originalString,
+        newString: newString,
+      ),
+    ]);
     await recompile();
   }
 
-  /// Wait for `evaluate` to finish executing before checking expectations by
-  /// checking for a log output.
-  Future<void> waitForEvaluateToExecute() async {
+  // Call the method `evaluate` in the program and wait for `expectedString` to
+  // be printed to the console.
+  Future<void> callEvaluateAndWaitForLog(String expectedString) async {
+    final client = context.debugConnection.vmService;
     final completer = Completer<void>();
-    final expectedString = 'evaluate executed';
     final subscription = context.webkitDebugger.onConsoleAPICalled.listen((e) {
       if (e.args.first.value == expectedString) {
         completer.complete();
       }
     });
-    await completer.future;
+    final vm = await client.getVM();
+    final isolate = await client.getIsolate(vm.isolates!.first.id!);
+    final rootLib = isolate.rootLib;
+    await client.evaluate(isolate.id!, rootLib!.id!, 'evaluate()');
+    await completer.future.timeout(
+      const Duration(minutes: 1),
+      onTimeout: () {
+        throw TimeoutException(
+          "Failed to find log: '$expectedString' in console.",
+        );
+      },
+    );
     await subscription.cancel();
   }
 
@@ -91,63 +104,35 @@
       final report = await fakeClient.reloadSources(isolate.id!);
       expect(report.success, true);
 
-      var source = await context.webDriver.pageSource;
-      // Should not contain the change until the function that updates the page
-      // is evaluated in a hot reload.
-      expect(source, contains(originalString));
-      expect(source.contains(newString), false);
-
-      final evaluateDone = waitForEvaluateToExecute();
-      final rootLib = isolate.rootLib;
-      await client.evaluate(isolate.id!, rootLib!.id!, 'evaluate()');
-      await evaluateDone;
-      source = await context.webDriver.pageSource;
-      expect(source, contains(newString));
-      expect(source.contains(originalString), false);
+      await callEvaluateAndWaitForLog(newString);
     });
 
     test('can hot reload with no changes, hot reload with changes, and '
         'hot reload again with no changes', () async {
       final client = context.debugConnection.vmService;
 
-      // Empty hot reload,
+      // Empty hot reload.
       await recompile();
       final vm = await client.getVM();
       final isolate = await client.getIsolate(vm.isolates!.first.id!);
       var report = await fakeClient.reloadSources(isolate.id!);
       expect(report.success, true);
 
-      var evaluateDone = waitForEvaluateToExecute();
-      final rootLib = isolate.rootLib;
-      await client.evaluate(isolate.id!, rootLib!.id!, 'evaluate()');
-      await evaluateDone;
-      var source = await context.webDriver.pageSource;
-      expect(source, contains(originalString));
-      expect(source.contains(newString), false);
+      await callEvaluateAndWaitForLog(originalString);
 
       // Hot reload.
       await makeEditAndRecompile();
       report = await fakeClient.reloadSources(isolate.id!);
       expect(report.success, true);
 
-      evaluateDone = waitForEvaluateToExecute();
-      await client.evaluate(isolate.id!, rootLib.id!, 'evaluate()');
-      await evaluateDone;
-      source = await context.webDriver.pageSource;
-      expect(source, contains(newString));
-      expect(source.contains(originalString), false);
+      await callEvaluateAndWaitForLog(newString);
 
       // Empty hot reload.
       await recompile();
       report = await fakeClient.reloadSources(isolate.id!);
       expect(report.success, true);
 
-      evaluateDone = waitForEvaluateToExecute();
-      await client.evaluate(isolate.id!, rootLib.id!, 'evaluate()');
-      await evaluateDone;
-      source = await context.webDriver.pageSource;
-      expect(source, contains(newString));
-      expect(source.contains(originalString), false);
+      await callEvaluateAndWaitForLog(newString);
     });
   }, timeout: Timeout.factor(2));
 }
diff --git a/dwds/test/hot_restart_breakpoints_test.dart b/dwds/test/hot_restart_breakpoints_test.dart
index 358baa2..1a83b5f 100644
--- a/dwds/test/hot_restart_breakpoints_test.dart
+++ b/dwds/test/hot_restart_breakpoints_test.dart
@@ -36,27 +36,8 @@
 
   tearDownAll(provider.dispose);
 
-  void makeEdit(String file, String originalString, String newString) {
-    if (file == project.dartEntryFileName) {
-      context.makeEditToDartEntryFile(
-        toReplace: originalString,
-        replaceWith: newString,
-      );
-    } else {
-      context.makeEditToDartLibFile(
-        libFileName: file,
-        toReplace: originalString,
-        replaceWith: newString,
-      );
-    }
-  }
-
-  Future<void> makeEditAndRecompile(
-    String file,
-    String originalString,
-    String newString,
-  ) async {
-    makeEdit(file, originalString, newString);
+  Future<void> makeEditsAndRecompile(List<Edit> edits) async {
+    await context.makeEdits(edits);
     await context.recompile(fullRestart: true);
   }
 
@@ -129,9 +110,9 @@
       await client.resume(isolate.id!);
     }
 
-    // When the program is executing, we want to check that at some point it
-    // will execute code that will emit [expectedString].
-    Future<void> resumeAndExpectLog(String expectedString) async {
+    // Resume the program, and check that at some point it will execute code
+    // that will print `expectedString` to the console.
+    Future<void> resumeAndWaitForLog(String expectedString) async {
       final completer = Completer<void>();
       final subscription = context.webkitDebugger.onConsoleAPICalled.listen((
         e,
@@ -141,7 +122,14 @@
         }
       });
       await resume();
-      await completer.future;
+      await completer.future.timeout(
+        const Duration(minutes: 1),
+        onTimeout: () {
+          throw TimeoutException(
+            "Failed to find log: '$expectedString' in console.",
+          );
+        },
+      );
       await subscription.cancel();
     }
 
@@ -206,7 +194,7 @@
 
       // Should break at `callLog`.
       await breakpointFuture;
-      await resumeAndExpectLog(genString);
+      await resumeAndWaitForLog(genString);
     });
 
     test('after edit and hot restart, breakpoint is in new file', () async {
@@ -215,7 +203,9 @@
 
       await addBreakpoint(file: mainFile, breakpointMarker: callLogMarker);
 
-      await makeEditAndRecompile(mainFile, oldLog, newLog);
+      await makeEditsAndRecompile([
+        (file: mainFile, originalString: oldLog, newString: newLog),
+      ]);
 
       final breakpointFuture = waitForBreakpoint();
 
@@ -226,7 +216,7 @@
       // Should break at `callLog`.
       await breakpointFuture;
       expect(consoleLogs.contains(newLog), false);
-      await resumeAndExpectLog(newLog);
+      await resumeAndWaitForLog(newLog);
     });
 
     test('after adding line, hot restart, removing line, and hot restart, '
@@ -239,7 +229,9 @@
       final extraLog = 'hot reload';
       final oldString = "log('";
       final newString = "log('$extraLog');\n$oldString";
-      await makeEditAndRecompile(mainFile, oldString, newString);
+      await makeEditsAndRecompile([
+        (file: mainFile, originalString: oldString, newString: newString),
+      ]);
 
       var breakpointFuture = waitForBreakpoint();
 
@@ -251,12 +243,14 @@
       await breakpointFuture;
       expect(consoleLogs.contains(extraLog), true);
       expect(consoleLogs.contains(genLog), false);
-      await resumeAndExpectLog(genLog);
+      await resumeAndWaitForLog(genLog);
 
       consoleLogs.clear();
 
       // Remove the line we just added.
-      await makeEditAndRecompile(mainFile, newString, oldString);
+      await makeEditsAndRecompile([
+        (file: mainFile, originalString: newString, newString: oldString),
+      ]);
 
       breakpointFuture = waitForBreakpoint();
 
@@ -268,7 +262,7 @@
       await breakpointFuture;
       expect(consoleLogs.contains(extraLog), false);
       expect(consoleLogs.contains(genLog), false);
-      await resumeAndExpectLog(genLog);
+      await resumeAndWaitForLog(genLog);
     });
 
     test(
@@ -293,10 +287,13 @@
         final newImports =
             '$oldImports\n'
             "import 'package:_test_hot_restart_breakpoints/library.dart';";
-        makeEdit(mainFile, oldImports, newImports);
+        final edits = [
+          (file: mainFile, originalString: oldImports, newString: newImports),
+        ];
         final oldLog = "log('$genLog');";
         final newLog = "log('\$libraryValue');";
-        await makeEditAndRecompile(mainFile, oldLog, newLog);
+        edits.add((file: mainFile, originalString: oldLog, newString: newLog));
+        await makeEditsAndRecompile(edits);
 
         var breakpointFuture = waitForBreakpoint();
 
@@ -315,7 +312,7 @@
         // Should break at `libValue`.
         await breakpointFuture;
         expect(consoleLogs.contains(libGenLog), false);
-        await resumeAndExpectLog(libGenLog);
+        await resumeAndWaitForLog(libGenLog);
       },
     );
 
@@ -329,6 +326,7 @@
 
       // Add library files, import them, but only refer to the last one in main.
       final numFiles = 50;
+      final edits = <Edit>[];
       for (var i = 1; i <= numFiles; i++) {
         final libFile = 'library$i.dart';
         context.addLibraryFile(
@@ -341,11 +339,16 @@
         final newImports =
             '$oldImports\n'
             "import 'package:_test_hot_restart_breakpoints/$libFile';";
-        makeEdit(mainFile, oldImports, newImports);
+        edits.add((
+          file: mainFile,
+          originalString: oldImports,
+          newString: newImports,
+        ));
       }
       final oldLog = "log('$genLog');";
       final newLog = "log('\$libraryValue$numFiles');";
-      await makeEditAndRecompile(mainFile, oldLog, newLog);
+      edits.add((file: mainFile, originalString: oldLog, newString: newLog));
+      await makeEditsAndRecompile(edits);
 
       var breakpointFuture = waitForBreakpoint();
 
@@ -366,7 +369,7 @@
       // Should break at the breakpoint in the last file.
       await breakpointFuture;
       expect(consoleLogs.contains(newGenLog), false);
-      await resumeAndExpectLog(newGenLog);
+      await resumeAndWaitForLog(newGenLog);
     });
   });
 }
diff --git a/fixtures/_test/example/append_body/main.dart b/fixtures/_test/example/append_body/main.dart
index c030eac..8a89205 100644
--- a/fixtures/_test/example/append_body/main.dart
+++ b/fixtures/_test/example/append_body/main.dart
@@ -4,14 +4,16 @@
 
 import 'dart:async';
 import 'dart:developer';
-// TODO: https://github.com/dart-lang/webdev/issues/2508
-// ignore: deprecated_member_use
-import 'dart:html';
 import 'dart:js_interop';
 
 @JS('console.log')
 external void log(String _);
 
+// We use this to test whether a hot restart or a full reload occurred. In the
+// former, we should see the old log, but in the latter, we should not.
+@JS('\$previousLog')
+external String? previousLog;
+
 void main() {
   var count = 0;
   // For setting breakpoints.
@@ -19,15 +21,17 @@
     print('Count is: ${++count}'); // Breakpoint: printCount
   });
 
-  document.body?.appendText('Hello World!');
+  var logMessage = 'Hello World!';
+  // Note that we concatenate instead of logging each one separately to avoid
+  // possibly mixing up logs with a previous call to `main`.
+  if (previousLog != null) logMessage = '$previousLog $logMessage';
+  log(logMessage);
+  previousLog = logMessage;
 
   registerExtension('ext.flutter.disassemble', (_, __) async {
-    document.body?.appendText('start disassemble ');
+    log('start disassemble');
     await Future.delayed(const Duration(seconds: 1));
-    document.body?.appendText('end disassemble ');
+    log('end disassemble');
     return ServiceExtensionResponse.result('{}');
   });
-
-  // Wait for this print statement so that we know main is done executing.
-  log('main executed');
 }
diff --git a/fixtures/_test_hot_reload/web/main.dart b/fixtures/_test_hot_reload/web/main.dart
index e1b1f02..a85a43a 100644
--- a/fixtures/_test_hot_reload/web/main.dart
+++ b/fixtures/_test_hot_reload/web/main.dart
@@ -10,14 +10,8 @@
 @JS('console.log')
 external void log(String _);
 
-@JS('document.body.innerHTML')
-external set innerHtml(String html);
-
 void evaluate() {
-  innerHtml = 'Program is running!\n $reloadValue}\n';
-
-  // Wait for this print statement so that we know evaluate is done executing.
-  log('evaluate executed');
+  log('$reloadValue');
 }
 
 void main() {
diff --git a/fixtures/_test_hot_restart2/web/main.dart b/fixtures/_test_hot_restart2/web/main.dart
index 090ea67..92d072a 100644
--- a/fixtures/_test_hot_restart2/web/main.dart
+++ b/fixtures/_test_hot_restart2/web/main.dart
@@ -3,9 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:core';
-// TODO: https://github.com/dart-lang/webdev/issues/2508
-// ignore: deprecated_member_use
-import 'dart:html';
+import 'dart:js_interop';
 
 import 'package:_test_hot_restart1/library1.dart';
 import 'package:_test_hot_restart2/library2.dart';
@@ -23,6 +21,9 @@
 ///   Constants in reloaded modules fail to compare with constants in stale
 ///   constant containers, causing 'ConstantEqualityFailure's.
 
+@JS('console.log')
+external void log(String _);
+
 class ConstObject {
   const ConstObject();
   String get text => 'ConstObject('
@@ -30,7 +31,10 @@
       '${value1 == value2 ? 'ConstantEqualitySuccess' : 'ConstantEqualityFailure'})';
 }
 
+void printConst() {
+  log('${const ConstObject().text}');
+}
+
 void main() {
-  document.body!.innerHtml =
-      'Program is running!\n${const ConstObject().text}\n';
+  printConst();
 }
